diff options
author | Huang Ying <huang.ying.caritas@gmail.com> | 2017-03-12 19:53:58 +0800 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2017-03-26 12:53:48 +0200 |
commit | addce19e2d38a197f5ea10eefb5f3cd25c3a52e7 (patch) | |
tree | 87f70b53d781a51da36f18f780bfdb586f94d26d /guix/build/union.scm | |
parent | 7398d96ee9141768de2a33df94109f7f10637d27 (diff) |
union: Add create-all-directories? parameter to 'union-build'.
* guix/build/union.scm (union-build): Add create-all-directories? keyword
parameter.
* tests/union.scm ("union-build #:create-all-directories? #t"): New test.
Co-authored-by: Ludovic Courtès <ludo@gnu.org>
Diffstat (limited to 'guix/build/union.scm')
-rw-r--r-- | guix/build/union.scm | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/guix/build/union.scm b/guix/build/union.scm index 6640b56523..a2ea72e1f5 100644 --- a/guix/build/union.scm +++ b/guix/build/union.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013, 2014, 2016 Ludovic Courtès <ludo@gnu.org> ;;; Copyright © 2014 Mark H Weaver <mhw@netris.org> +;;; Copyright © 2017 Huang Ying <huang.ying.caritas@gmail.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -73,9 +74,12 @@ identical, #f otherwise." (loop))))))))))))) (define* (union-build output inputs - #:key (log-port (current-error-port))) - "Build in the OUTPUT directory a symlink tree that is the union of all -the INPUTS." + #:key (log-port (current-error-port)) + (create-all-directories? #f)) + "Build in the OUTPUT directory a symlink tree that is the union of all the +INPUTS. As a special case, if CREATE-ALL-DIRECTORIES?, creates the +subdirectories in the output directory to make sure the caller can modify them +later." (define (symlink* input output) (format log-port "`~a' ~~> `~a'~%" input output) @@ -104,8 +108,11 @@ the INPUTS." (define (union output inputs) (match inputs ((input) - ;; There's only one input, so just make a link. - (symlink* input output)) + ;; There's only one input, so just make a link unless + ;; create-all-directories?. + (if (and create-all-directories? (file-is-directory? input)) + (union-of-directories output inputs) + (symlink* input output))) (_ (call-with-values (lambda () (partition file-is-directory? inputs)) (match-lambda* |