summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2017-06-21 16:50:59 +0200
committerLudovic Courtès <ludo@gnu.org>2017-06-21 16:53:22 +0200
commitafd06f605bf88a796acefc7ed598b43879346a6b (patch)
treeedb62a347c953146831a7d67ca21d78329855b01
parentcba988ed859616f3a36f88f2984d42417447dfa1 (diff)
environment: Disable profile collision checks.
Reported by Efraim Flashner. This is a followup to a654dc4bcf7c8e205bdefa1a1d5f23444dd22778. * guix/profiles.scm (profile-derivation): Add #:allow-collisions? and honor it. * guix/scripts/environment.scm (inputs->profile-derivation): Pass #:allow-collisions? #f to 'profile-derivation'. * tests/guix-environment.sh: Test "guix environment guix".
-rw-r--r--guix/profiles.scm10
-rw-r--r--guix/scripts/environment.scm7
-rw-r--r--tests/guix-environment.sh4
3 files changed, 19 insertions, 2 deletions
diff --git a/guix/profiles.scm b/guix/profiles.scm
index 0c70975f7e..dcb5186c7a 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -1199,10 +1199,14 @@ the entries in MANIFEST."
#:key
(hooks %default-profile-hooks)
(locales? #t)
+ (allow-collisions? #f)
system target)
"Return a derivation that builds a profile (aka. 'user environment') with
the given MANIFEST. The profile includes additional derivations returned by
the monadic procedures listed in HOOKS--such as an Info 'dir' file, etc.
+Unless ALLOW-COLLISIONS? is true, a '&profile-collision-error' is raised if
+entries in MANIFEST collide (for instance if there are two same-name packages
+with a different version number.)
When LOCALES? is true, the build is performed under a UTF-8 locale; this adds
a dependency on the 'glibc-utf8-locales' package.
@@ -1212,8 +1216,10 @@ are cross-built for TARGET."
(mlet* %store-monad ((system (if system
(return system)
(current-system)))
- (ok? (check-for-collisions manifest system
- #:target target))
+ (ok? (if allow-collisions?
+ (return #t)
+ (check-for-collisions manifest system
+ #:target target)))
(extras (if (null? (manifest-entries manifest))
(return '())
(sequence %store-monad
diff --git a/guix/scripts/environment.scm b/guix/scripts/environment.scm
index af69e2b730..0abc509a35 100644
--- a/guix/scripts/environment.scm
+++ b/guix/scripts/environment.scm
@@ -323,6 +323,13 @@ BOOTSTRAP? specifies whether to use the bootstrap Guile to build the
profile."
(profile-derivation (packages->manifest inputs)
#:system system
+
+ ;; Packages can have conflicting inputs, or explicit
+ ;; inputs that conflict with implicit inputs (e.g., gcc,
+ ;; gzip, etc.). Thus, do not error out when we
+ ;; encounter collision.
+ #:allow-collisions? #t
+
#:hooks (if bootstrap?
'()
%default-profile-hooks)
diff --git a/tests/guix-environment.sh b/tests/guix-environment.sh
index 9115949123..bf5ca17fa5 100644
--- a/tests/guix-environment.sh
+++ b/tests/guix-environment.sh
@@ -105,6 +105,10 @@ else
test $? = 42
fi
+# Make sure we can build the environment of 'guix'. There may be collisions
+# in its profile (e.g., for 'gzip'), but we have to accept them.
+guix environment guix --bootstrap -n
+
if guile -c '(getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)' 2> /dev/null
then
# Compute the build environment for the initial GNU Make.