summaryrefslogtreecommitdiff
path: root/guix/scripts/system.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-04-27 15:31:37 +0200
committerLudovic Courtès <ludo@gnu.org>2018-04-27 18:45:02 +0200
commit6ddb59607be810caa1aa40b402b38564d8d9a6bc (patch)
tree1f1d22f8d3eea5a7fefafe89a88fa2093b88b4c5 /guix/scripts/system.scm
parent60912a888d4c238850da38efe2cbf39a29dbf877 (diff)
downloadguix-patches-6ddb59607be810caa1aa40b402b38564d8d9a6bc.tar
guix-patches-6ddb59607be810caa1aa40b402b38564d8d9a6bc.tar.gz
guix system: Report wrong file system 'device' fields.
Previously, if you wrote (device "my-label") without (title 'label), you'd get: guix system: error: stat: No such file or directory: "my-label" Now you get a proper error and a hint. Reported by Pierre-Antoine Rouby. * guix/scripts/system.scm (check-file-system-availability)[literal]: New variable. Loop over LITERAL. * gnu/system/file-systems.scm (%pseudo-file-system-types): New variable. * guix/ui.scm (display-hint): Make public.
Diffstat (limited to 'guix/scripts/system.scm')
-rw-r--r--guix/scripts/system.scm24
1 files changed, 23 insertions, 1 deletions
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index b50cabcd1a..af501eb8f7 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -583,7 +583,8 @@ any, are available. Raise an error if they're not."
(define relevant
(filter (lambda (fs)
(and (file-system-mount? fs)
- (not (string=? "tmpfs" (file-system-type fs)))
+ (not (member (file-system-type fs)
+ %pseudo-file-system-types))
(not (memq 'bind-mount (file-system-flags fs)))))
file-systems))
@@ -592,6 +593,11 @@ any, are available. Raise an error if they're not."
(eq? (file-system-title fs) 'label))
relevant))
+ (define literal
+ (filter (lambda (fs)
+ (eq? (file-system-title fs) 'device))
+ relevant))
+
(define uuid
(filter (lambda (fs)
(eq? (file-system-title fs) 'uuid))
@@ -611,6 +617,22 @@ any, are available. Raise an error if they're not."
(format (current-error-port)
args ...))))))
(for-each (lambda (fs)
+ (catch 'system-error
+ (lambda ()
+ (stat (file-system-device fs)))
+ (lambda args
+ (let ((errno (system-error-errno args))
+ (device (file-system-device fs)))
+ (error (G_ "~a: error: device '~a' not found: ~a~%")
+ (file-system-location* fs) device
+ (strerror errno))
+ (unless (string-prefix? "/" device)
+ (display-hint (format #f (G_ "If '~a' is a file system
+label, you need to add @code{(title 'label)} to your @code{file-system}
+definition.")
+ device)))))))
+ literal)
+ (for-each (lambda (fs)
(unless (find-partition-by-label (file-system-device fs))
(error (G_ "~a: error: file system with label '~a' not found~%")
(file-system-location* fs)