aboutsummaryrefslogtreecommitdiff
path: root/guix-package.in
diff options
context:
space:
mode:
Diffstat (limited to 'guix-package.in')
-rw-r--r--guix-package.in22
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
;;;