guix package: Do the right thing for '-p ~/.guix-profile'.

Fixes <http://bugs.gnu.org/17939>.
Reported by Taylan Ulrich Bayirli/Kammer <taylanbayirli@gmail.com>.

* guix/scripts/package.scm (canonicalize-profile): New procedure.
  (%options): Use it for --profile.
* tests/guix-package.sh: Add test.
This commit is contained in:
Ludovic Courtès 2014-07-05 14:56:08 +02:00
parent e84d8b30d9
commit 88371f0d7d
2 changed files with 22 additions and 2 deletions

View File

@ -68,6 +68,17 @@
;; coexist with Nix profiles.
(string-append %profile-directory "/guix-profile"))
(define (canonicalize-profile profile)
"If PROFILE is %USER-PROFILE-DIRECTORY, return %CURRENT-PROFILE. Otherwise
return PROFILE unchanged. The goal is to treat '-p ~/.guix-profile' as if
'-p' was omitted." ; see <http://bugs.gnu.org/17939>
(if (and %user-profile-directory
(string=? (canonicalize-path (dirname profile))
(dirname %user-profile-directory))
(string=? (basename profile) (basename %user-profile-directory)))
%current-profile
profile))
(define (link-to-empty-profile generation)
"Link GENERATION, a string, to the empty profile."
(let* ((drv (profile-derivation (%store) (manifest '())))
@ -573,7 +584,7 @@ Install, remove, or upgrade PACKAGES in a single transaction.\n"))
#f)))
(option '(#\p "profile") #t #f
(lambda (opt name arg result arg-handler)
(values (alist-cons 'profile arg
(values (alist-cons 'profile (canonicalize-profile arg)
(alist-delete 'profile result))
#f)))
(option '(#\n "dry-run") #f #f

View File

@ -189,7 +189,7 @@ test "`readlink_base "$profile"`" = "$generation"
XDG_CACHE_HOME="${XDG_CACHE_HOME:-$HOME/.cache}"
export XDG_CACHE_HOME
HOME="t-home-$$"
HOME="$PWD/t-home-$$"
export HOME
mkdir -p "$HOME"
@ -224,6 +224,15 @@ do
test "`readlink "$default_profile"`" = "$default_profile-0-link"
done
# Check whether '-p ~/.guix-profile' makes any difference.
# See <http://bugs.gnu.org/17939>.
if test -e "$HOME/.guix-profile-0-link"; then false; fi
if test -e "$HOME/.guix-profile-1-link"; then false; fi
guix package --bootstrap -p "$HOME/.guix-profile" -i guile-bootstrap
if test -e "$HOME/.guix-profile-1-link"; then false; fi
guix package --bootstrap --roll-back -p "$HOME/.guix-profile"
if test -e "$HOME/.guix-profile-0-link"; then false; fi
# Extraneous argument.
if guix package install foo-bar;
then false; else true; fi