From 6211223021cdb477e93d7ba789d5a0119ffb4bd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 6 Feb 2013 22:51:24 +0100 Subject: [PATCH] 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. --- guix/build/union.scm | 10 ++++++---- tests/union.scm | 7 ++++--- 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 @@ (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")