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 @@ (define (resolve-collision leaves) (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 @@ (define (resolve-collision leaves) (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 @@ (define %store (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")