summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2016-03-28 22:49:42 +0200
committerLudovic Courtès <ludo@gnu.org>2016-03-28 22:50:25 +0200
commit7f949db03e5dffa7873ce63723c0a92a28594511 (patch)
tree3e6acbc2a9c1b77f390427659c23e353eaae3d70
parente2f41133e9c9e597cd3e1be553aaef636c35f8b6 (diff)
downloadguix-7f949db03e5dffa7873ce63723c0a92a28594511.tar.gz
guix system: Warn against missing 'guix pull'.
Suggested by Leo Famulari and others.

* guix/scripts/system.scm (maybe-suggest-running-guix-pull): New
procedure.
(perform-action): Call it when ACTION is 'reconfigure.
-rw-r--r--guix/scripts/system.scm18
1 files changed, 18 insertions, 0 deletions
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index 8ebeb4d595..566e7e8768 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -482,6 +482,21 @@ PATTERN, a string.  When PATTERN is #f, display all the system generations."
     ((disk-image)
      (system-disk-image os #:disk-image-size image-size))))
 
+(define (maybe-suggest-running-guix-pull)
+  "Suggest running 'guix pull' if this has never been done before."
+  ;; The reason for this is that the 'guix' binding that we see here comes
+  ;; from either ~/.config/latest or, if it's missing, from the
+  ;; globally-installed Guix, which is necessarily older.  See
+  ;; <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html> for
+  ;; a discussion.
+  (define latest
+    (string-append (config-directory) "/latest"))
+
+  (unless (file-exists? latest)
+    (warning (_ "~a not found: 'guix pull' was never run~%") latest)
+    (warning (_ "Consider running 'guix pull' before 'reconfigure'.~%"))
+    (warning (_ "Failing to do that may downgrade your system!~%"))))
+
 (define* (perform-action action os
                          #:key grub? dry-run? derivations-only?
                          use-substitutes? device target
@@ -498,6 +513,9 @@ building anything."
   (define println
     (cut format #t "~a~%" <>))
 
+  (when (eq? action 'reconfigure)
+    (maybe-suggest-running-guix-pull))
+
   (mlet* %store-monad
       ((sys       (system-derivation-for-action os action
                                                 #:image-size image-size