[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
03/12: gexp: Add 'mixed-text-file'.
From: |
Ludovic Courtès |
Subject: |
03/12: gexp: Add 'mixed-text-file'. |
Date: |
Thu, 08 Oct 2015 21:47:30 +0000 |
civodul pushed a commit to branch wip-service-refactor
in repository guix.
commit 1914bc9c6926ac2eb4fadcba001a63b51f10c323
Author: Ludovic Courtès <address@hidden>
Date: Wed Sep 9 09:44:43 2015 +0200
gexp: Add 'mixed-text-file'.
* guix/gexp.scm (mixed-text-file): New procedure.
* tests/gexp.scm ("mixed-text-file"): New test.
* doc/guix.texi (G-Expressions): Document it.
---
doc/guix.texi | 13 +++++++++++++
guix/gexp.scm | 16 ++++++++++++++++
tests/gexp.scm | 15 +++++++++++++++
3 files changed, 44 insertions(+), 0 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 1272ca2..34bf061 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -3463,6 +3463,19 @@ will references @var{coreutils}, @var{grep}, and
@var{sed}, thereby
preventing them from being garbage-collected during its lifetime.
@end deffn
address@hidden {Scheme Procedure} mixed-text-file @var{name} @var{text} @dots{}
+Return an object representing store file @var{name} containing
address@hidden @var{text} is a sequence of strings and file-like objects,
+as in:
+
address@hidden
+(mixed-text-file "profile"
+ "export PATH=" coreutils "/bin:" grep "/bin")
address@hidden example
+
+This is the declarative counterpart of @code{text-file*}.
address@hidden deffn
+
Of course, in addition to gexps embedded in ``host'' code, there are
also modules containing build tools. To make it clear that they are
meant to be used in the build stratum, these modules are kept in the
diff --git a/guix/gexp.scm b/guix/gexp.scm
index 10acf2b..f44df9c 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -61,6 +61,7 @@
gexp->file
gexp->script
text-file*
+ mixed-text-file
imported-files
imported-modules
compiled-modules
@@ -969,6 +970,21 @@ resulting store file holds references to all these."
(gexp->derivation name builder))
+(define* (mixed-text-file name #:rest text)
+ "Return an object representing store file NAME containing TEXT. TEXT is a
+sequence of strings and file-like objects, as in:
+
+ (mixed-text-file \"profile\"
+ \"export PATH=\" coreutils \"/bin:\" grep \"/bin\")
+
+This is the declarative counterpart of 'text-file*'."
+ (define build
+ (gexp (call-with-output-file (ungexp output "out")
+ (lambda (port)
+ (display (string-append (ungexp-splicing text)) port)))))
+
+ (computed-file name build))
+
;;;
;;; Syntactic sugar.
diff --git a/tests/gexp.scm b/tests/gexp.scm
index 0a8ce65..77439cf 100644
--- a/tests/gexp.scm
+++ b/tests/gexp.scm
@@ -660,6 +660,21 @@
file)))))
#:guile-for-build (package-derivation %store %bootstrap-guile))))
+(test-assertm "mixed-text-file"
+ (mlet* %store-monad ((file -> (mixed-text-file "mixed"
+ "export PATH="
+ %bootstrap-guile "/bin"))
+ (drv (lower-object file))
+ (out -> (derivation->output-path drv))
+ (guile-drv (package->derivation %bootstrap-guile))
+ (guile -> (derivation->output-path guile-drv)))
+ (mbegin %store-monad
+ (built-derivations (list drv))
+ (mlet %store-monad ((refs ((store-lift references) out)))
+ (return (and (string=? (string-append "export PATH=" guile "/bin")
+ (call-with-input-file out get-string-all))
+ (equal? refs (list guile))))))))
+
(test-assert "gexp->derivation vs. %current-target-system"
(let ((mval (gexp->derivation "foo"
#~(begin
- branch wip-service-refactor created (now b1e3d48), Ludovic Courtès, 2015/10/08
- 01/12: gexp: Add 'computed-file'., Ludovic Courtès, 2015/10/08
- 02/12: gexp: Add 'program-file'., Ludovic Courtès, 2015/10/08
- 08/12: gexp: Add 'scheme-file'., Ludovic Courtès, 2015/10/08
- 05/12: system: Make service procedures non-monadic., Ludovic Courtès, 2015/10/08
- 12/12: PRELIM: services: Introduce extensible abstract services., Ludovic Courtès, 2015/10/08
- 03/12: gexp: Add 'mixed-text-file'.,
Ludovic Courtès <=
- 04/12: services: 'mingetty-service' no longer takes monadic values., Ludovic Courtès, 2015/10/09
- 11/12: system: Account skeleton API is non-monadic., Ludovic Courtès, 2015/10/09
- 07/12: services: nscd-service: Fit everything into <nscd-configuration>., Ludovic Courtès, 2015/10/09
- 06/12: services: mingetty-service: Use <mingetty-configuration> objects., Ludovic Courtès, 2015/10/09
- 09/12: system: pam: Use 'computed-file' instead of 'gexp->derivation'., Ludovic Courtès, 2015/10/09
- 10/12: guix system: Add '--derivation'., Ludovic Courtès, 2015/10/09