diff options
author | Ludovic Courtès <ludo@gnu.org> | 2013-01-27 17:18:55 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2013-01-27 17:18:55 +0100 |
commit | d9307267b3b4a87391e33daacef162745f057c3d (patch) | |
tree | 8aa72a440c39aa507936abfb1ed7d625e5ff3fd2 /guix-package.in | |
parent | 29767aaef67e78ca4ca80448725a4183146e463a (diff) | |
download | guix-d9307267b3b4a87391e33daacef162745f057c3d.tar guix-d9307267b3b4a87391e33daacef162745f057c3d.tar.gz |
guix-package: When rolling back to nothingness, point to the empty profile.
Suggested by Andreas Enge <andreas@enge.fr> at
<http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00316.html>.
* guix-package.in (roll-back): Check whether PROFILE is valid using
`file-exists?'. When NUMBER is zero, just emit a notice. When
PREVIOUS-NUMBER is zero and PREVIOUS-PROFILE does not exist, build the
empty profile, and link to it.
* tests/guix-package.sh: Add tests.
* doc/guix.texi (Invoking guix-package): Document the new behavior.
Diffstat (limited to 'guix-package.in')
-rw-r--r-- | guix-package.in | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/guix-package.in b/guix-package.in index 37a1df0c11..caddae1392 100644 --- a/guix-package.in +++ b/guix-package.in @@ -220,14 +220,26 @@ all of PACKAGES, a list of name/version/output/path tuples." (symlink previous-profile pivot) (rename-file pivot profile))) - (cond ((zero? number) + (cond ((not (file-exists? profile)) ; invalid profile (format (current-error-port) - (_ "error: `~a' is not a valid profile~%") + (_ "error: profile `~a' does not exist~%") profile)) - ((or (zero? previous-number) + ((zero? number) ; empty profile + (format (current-error-port) + (_ "nothing to do: already at the empty profile~%"))) + ((or (zero? previous-number) ; going to emptiness (not (file-exists? previous-profile))) - (leave (_ "error: no previous profile; not rolling back~%"))) - (else (switch-link))))) + (let*-values (((drv-path drv) + (profile-derivation (%store) '())) + ((prof) + (derivation-output-path + (assoc-ref (derivation-outputs drv) "out")))) + (when (not (build-derivations (%store) (list drv-path))) + (leave (_ "failed to build the empty profile~%"))) + + (symlink prof previous-profile) + (switch-link))) + (else (switch-link))))) ; anything else ;;; |