gexp: 'file-union' accepts directory names.
* guix/gexp.scm (file-union): Import (guix build utils). Make the parent directories of TARGET. * tests/gexp.scm ("file-union"): New test.
This commit is contained in:
parent
e80c725db7
commit
5dec93bb8b
@ -1479,26 +1479,31 @@ denoting the target file. Here's an example:
|
||||
`((\"hosts\" ,(plain-file \"hosts\"
|
||||
\"127.0.0.1 localhost\"))
|
||||
(\"bashrc\" ,(plain-file \"bashrc\"
|
||||
\"alias ls='ls --color'\"))))
|
||||
\"alias ls='ls --color'\"))
|
||||
(\"libvirt/qemu.conf\" ,(plain-file \"qemu.conf\" \"\"))))
|
||||
|
||||
This yields an 'etc' directory containing these two files."
|
||||
(computed-file name
|
||||
(gexp
|
||||
(begin
|
||||
(mkdir (ungexp output))
|
||||
(chdir (ungexp output))
|
||||
(ungexp-splicing
|
||||
(map (match-lambda
|
||||
((target source)
|
||||
(gexp
|
||||
(begin
|
||||
;; Stat the source to abort early if it does
|
||||
;; not exist.
|
||||
(stat (ungexp source))
|
||||
(with-imported-modules '((guix build utils))
|
||||
(gexp
|
||||
(begin
|
||||
(use-modules (guix build utils))
|
||||
|
||||
(symlink (ungexp source)
|
||||
(ungexp target))))))
|
||||
files))))))
|
||||
(mkdir (ungexp output))
|
||||
(chdir (ungexp output))
|
||||
(ungexp-splicing
|
||||
(map (match-lambda
|
||||
((target source)
|
||||
(gexp
|
||||
(begin
|
||||
;; Stat the source to abort early if it does
|
||||
;; not exist.
|
||||
(stat (ungexp source))
|
||||
|
||||
(mkdir-p (dirname (ungexp target)))
|
||||
(symlink (ungexp source)
|
||||
(ungexp target))))))
|
||||
files)))))))
|
||||
|
||||
(define* (directory-union name things
|
||||
#:key (copy? #f) (quiet? #f)
|
||||
|
@ -1093,6 +1093,24 @@
|
||||
(call-with-input-file out get-string-all))
|
||||
(equal? refs (list guile))))))))
|
||||
|
||||
(test-assertm "file-union"
|
||||
(mlet* %store-monad ((union -> (file-union "union"
|
||||
`(("a" ,(plain-file "a" "1"))
|
||||
("b/c/d" ,(plain-file "d" "2"))
|
||||
("e" ,(plain-file "e" "3")))))
|
||||
(drv (lower-object union))
|
||||
(out -> (derivation->output-path drv)))
|
||||
(define (contents=? file str)
|
||||
(string=? (call-with-input-file (string-append out "/" file)
|
||||
get-string-all)
|
||||
str))
|
||||
|
||||
(mbegin %store-monad
|
||||
(built-derivations (list drv))
|
||||
(return (and (contents=? "a" "1")
|
||||
(contents=? "b/c/d" "2")
|
||||
(contents=? "e" "3"))))))
|
||||
|
||||
(test-assert "gexp->derivation vs. %current-target-system"
|
||||
(let ((mval (gexp->derivation "foo"
|
||||
#~(begin
|
||||
|
Loading…
Reference in New Issue
Block a user