guix package: Use relative symlinks to generations.
authorLudovic Courtès <ludo@gnu.org>
Fri, 13 Jul 2018 12:33:11 +0000 (14:33 +0200)
committerLudovic Courtès <ludo@gnu.org>
Fri, 13 Jul 2018 15:28:39 +0000 (17:28 +0200)
Reported by Roel Janssen <roel@gnu.org>
at <https://lists.gnu.org/archive/html/guix-devel/2018-07/msg00036.html>.

* guix/profiles.scm (switch-to-generation): Use (basename generation) as
the symlink target.
* guix/scripts/package.scm (build-and-use-profile): Likewise,
use (basename name) as the symlink target.
* tests/guix-package.sh: Adjust --roll-back test accordingly.  Add
explicitly test with '-p foo/prof'.

guix/profiles.scm
guix/scripts/package.scm
tests/guix-package.sh

index d2a794b..f34f4fc 100644 (file)
@@ -1521,7 +1521,7 @@ the generation that was current before switching."
                               (profile profile)
                               (generation number)))))
           (else
-           (switch-symlinks profile generation)
+           (switch-symlinks profile (basename generation))
            current))))
 
 (define (switch-to-previous-generation profile)
index 29829f5..b38a55d 100644 (file)
@@ -190,7 +190,7 @@ do not treat collisions in MANIFEST as an error."
              (let* ((entries (manifest-entries manifest))
                     (count   (length entries)))
                (switch-symlinks name prof)
-               (switch-symlinks profile name)
+               (switch-symlinks profile (basename name))
                (unless (string=? profile %current-profile)
                  (register-gc-root store name))
                (format #t (N_ "~a package in profile~%"
index 3b3fa35..cef3b34 100644 (file)
@@ -185,6 +185,16 @@ grep -E 'emacs[[:blank:]]+42\.5\.9rc7[[:blank:]]+.*-emacs-42.5.9rc7' \
 rm "$emacs_tarball" "$tmpfile"
 rmdir "$module_dir"
 
+# Profiles with a relative file name.  Make sure we don't create dangling
+# symlinks--see bug report at
+# <https://lists.gnu.org/archive/html/guix-devel/2018-07/msg00036.html>.
+mkdir -p "$module_dir/foo"
+( cd "$module_dir" ;                                           \
+  guix package --bootstrap -i guile-bootstrap -p foo/prof )
+test -f "$module_dir/foo/prof/bin/guile"
+rm "$module_dir/foo"/*
+rmdir "$module_dir/foo"
+rmdir "$module_dir"
 
 #
 # Try with the default profile.
@@ -215,7 +225,7 @@ do
     guix package --bootstrap --roll-back
     ! test -f "$HOME/.guix-profile/bin"
     ! test -f "$HOME/.guix-profile/lib"
-    test "`readlink "$default_profile"`" = "$default_profile-0-link"
+    test "`readlink "$default_profile"`" = "`basename $default_profile-0-link`"
 done
 
 # Check whether '-p ~/.guix-profile' makes any difference.