summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2013-02-06 22:51:24 +0100
committerLudovic Courtès <ludo@gnu.org>2013-02-06 23:04:10 +0100
commit6211223021cdb477e93d7ba789d5a0119ffb4bd4 (patch)
tree7322568ef89680dafdd2a36feca89bd415f3748b
parent44ce77ff52b0456e71ccaabbf3900e71d7a5841f (diff)
downloadguix-6211223021cdb477e93d7ba789d5a0119ffb4bd4.tar.gz
union: Delete duplicates when passed the same input several times.
* guix/build/union.scm (union-build): Prepend "." to the result of
  `union-tree', to match the expectations of `delete-duplicate-leaves'.
  Don't do mkdir when SUBDIR is ".".
* tests/union.scm ("union-build"): Keep duplicates in %BOOTSTRAP-INPUTS.
-rw-r--r--guix/build/union.scm10
-rw-r--r--tests/union.scm7
2 files changed, 10 insertions, 7 deletions
diff --git a/guix/build/union.scm b/guix/build/union.scm
index 234964dba5..a6a4450180 100644
--- a/guix/build/union.scm
+++ b/guix/build/union.scm
@@ -150,8 +150,9 @@ the DIRECTORIES."
 
   (mkdir output)
   (let loop ((tree (delete-duplicate-leaves
-                    (tree-union (append-map (compose tree-leaves file-tree)
-                                            directories))
+                    (cons "."
+                          (tree-union (append-map (compose tree-leaves file-tree)
+                                                  directories)))
                     leaf=?
                     resolve-collision))
              (dir  '()))
@@ -165,8 +166,9 @@ the DIRECTORIES."
          (symlink tree target)))
       (((? string? subdir) leaves ...)
        ;; A sub-directory: create it in OUTPUT, and iterate over LEAVES.
-       (let ((dir (string-join dir "/")))
-         (mkdir (string-append output "/" dir "/" subdir)))
+       (unless (string=? subdir ".")
+         (let ((dir (string-join dir "/")))
+           (mkdir (string-append output "/" dir "/" subdir))))
        (for-each (cute loop <> `(,@dir ,subdir))
                  leaves))
       ((leaves ...)
diff --git a/tests/union.scm b/tests/union.scm
index 87450d74fd..9816882101 100644
--- a/tests/union.scm
+++ b/tests/union.scm
@@ -94,9 +94,10 @@
   (let* ((inputs  (map (match-lambda
                         ((name package)
                          `(,name ,(package-derivation %store package))))
-                       (delete-duplicates %bootstrap-inputs
-                                          (lambda (i1 i2)
-                                            (eq? (second i1) (second i2))))))
+
+                       ;; Purposefully leave duplicate entries.
+                       (append %bootstrap-inputs
+                               (take %bootstrap-inputs 3))))
          (builder `(begin
                      (use-modules (guix build union))
                      (union-build (assoc-ref %outputs "out")