environment: Disable profile collision checks.

Reported by Efraim Flashner.
This is a followup to a654dc4bcf.

* 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".
This commit is contained in:
Ludovic Courtès 2017-06-21 16:50:59 +02:00
parent cba988ed85
commit afd06f605b
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
3 changed files with 19 additions and 2 deletions

View File

@ -1199,10 +1199,14 @@ the entries in MANIFEST."
#:key #:key
(hooks %default-profile-hooks) (hooks %default-profile-hooks)
(locales? #t) (locales? #t)
(allow-collisions? #f)
system target) system target)
"Return a derivation that builds a profile (aka. 'user environment') with "Return a derivation that builds a profile (aka. 'user environment') with
the given MANIFEST. The profile includes additional derivations returned by the given MANIFEST. The profile includes additional derivations returned by
the monadic procedures listed in HOOKS--such as an Info 'dir' file, etc. 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 When LOCALES? is true, the build is performed under a UTF-8 locale; this adds
a dependency on the 'glibc-utf8-locales' package. a dependency on the 'glibc-utf8-locales' package.
@ -1212,8 +1216,10 @@ are cross-built for TARGET."
(mlet* %store-monad ((system (if system (mlet* %store-monad ((system (if system
(return system) (return system)
(current-system))) (current-system)))
(ok? (check-for-collisions manifest system (ok? (if allow-collisions?
#:target target)) (return #t)
(check-for-collisions manifest system
#:target target)))
(extras (if (null? (manifest-entries manifest)) (extras (if (null? (manifest-entries manifest))
(return '()) (return '())
(sequence %store-monad (sequence %store-monad

View File

@ -323,6 +323,13 @@ BOOTSTRAP? specifies whether to use the bootstrap Guile to build the
profile." profile."
(profile-derivation (packages->manifest inputs) (profile-derivation (packages->manifest inputs)
#:system system #: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? #:hooks (if bootstrap?
'() '()
%default-profile-hooks) %default-profile-hooks)

View File

@ -105,6 +105,10 @@ else
test $? = 42 test $? = 42
fi 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 if guile -c '(getaddrinfo "www.gnu.org" "80" AI_NUMERICSERV)' 2> /dev/null
then then
# Compute the build environment for the initial GNU Make. # Compute the build environment for the initial GNU Make.