diff options
author | Leo Prikler <leo.prikler@student.tugraz.at> | 2020-12-05 17:20:10 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2020-12-07 12:48:26 +0100 |
commit | 07340cbebc1ef97c0196c631144775f5ce61d4f6 (patch) | |
tree | d20429d4b6b491a6f5df24eec6cc036d17d681bc | |
parent | f5d952c5f50cd9c6005cdf47dda5bccb6e428119 (diff) | |
download | guix-07340cbebc1ef97c0196c631144775f5ce61d4f6.tar guix-07340cbebc1ef97c0196c631144775f5ce61d4f6.tar.gz |
profiles: Delete duplicate manifest entries in packages->manifest.
* gnu/profiles.scm (packages->manifest): Delete duplicate entries.
* tests/profiles.scm ("packages->manifest, no duplicates"): New test.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
-rw-r--r-- | guix/profiles.scm | 34 | ||||
-rw-r--r-- | tests/profiles.scm | 10 |
2 files changed, 28 insertions, 16 deletions
diff --git a/guix/profiles.scm b/guix/profiles.scm index 034591eb79..59a313ea08 100644 --- a/guix/profiles.scm +++ b/guix/profiles.scm @@ -399,22 +399,24 @@ denoting a specific output of a package." 'inferior-package->manifest-entry)) (manifest - (map (match-lambda - (((? package? package) output) - (package->manifest-entry package output)) - ((? package? package) - (package->manifest-entry package)) - ((thing output) - (if inferiors-loaded? - ((inferior->entry) thing output) - (throw 'wrong-type-arg 'packages->manifest - "Wrong package object: ~S" (list thing) (list thing)))) - (thing - (if inferiors-loaded? - ((inferior->entry) thing) - (throw 'wrong-type-arg 'packages->manifest - "Wrong package object: ~S" (list thing) (list thing))))) - packages))) + (delete-duplicates + (map (match-lambda + (((? package? package) output) + (package->manifest-entry package output)) + ((? package? package) + (package->manifest-entry package)) + ((thing output) + (if inferiors-loaded? + ((inferior->entry) thing output) + (throw 'wrong-type-arg 'packages->manifest + "Wrong package object: ~S" (list thing) (list thing)))) + (thing + (if inferiors-loaded? + ((inferior->entry) thing) + (throw 'wrong-type-arg 'packages->manifest + "Wrong package object: ~S" (list thing) (list thing))))) + packages) + manifest-entry=?))) (define (manifest->gexp manifest) "Return a representation of MANIFEST as a gexp." diff --git a/tests/profiles.scm b/tests/profiles.scm index f0a1a1d11c..2dec42bec1 100644 --- a/tests/profiles.scm +++ b/tests/profiles.scm @@ -384,6 +384,16 @@ (manifest-entry-search-paths (package->manifest-entry mpl))))) +(test-assert "packages->manifest, no duplicates" + (let ((expected + (manifest + (list + (package->manifest-entry packages:guile-2.2)))) + (manifest (packages->manifest + (list packages:guile-2.2 packages:guile-2.2)))) + (every manifest-entry=? (manifest-entries expected) + (manifest-entries manifest)))) + (test-equal "packages->manifest, propagated inputs" (map (match-lambda ((label package) |