Skip to content
Snippets Groups Projects
Unverified Commit af0ba938 authored by Ludovic Courtès's avatar Ludovic Courtès
Browse files

guix system: Return two values when failing to talk to shepherd.

Before that, when 'guix system reconfigure' failed to talk to shepherd
and a 'system-error' was raised, we would get a "too few values returned
to continuation" error, which would prevent GRUB from being installed.

Reported by fps on #guix.

* guix/scripts/system.scm (warn-on-system-error): Remove.
(with-shepherd-error-handling): Inline former 'warn-on-system-error'.
Return two values when 'system-error' is raised.
parent 59fed2b6
No related branches found
No related tags found
No related merge requests found
...@@ -227,25 +227,20 @@ (define-syntax-rule (save-load-path-excursion body ...) ...@@ -227,25 +227,20 @@ (define-syntax-rule (save-load-path-excursion body ...)
(set! %load-path path) (set! %load-path path)
(set! %load-compiled-path cpath))))) (set! %load-compiled-path cpath)))))
(define-syntax-rule (warn-on-system-error body ...)
(catch 'system-error
(lambda ()
body ...)
(lambda (key proc format-string format-args errno . rest)
(warning (_ "while talking to shepherd: ~a~%")
(apply format #f format-string format-args))
(with-monad %store-monad
(return #f)))))
(define-syntax-rule (with-shepherd-error-handling mbody ...) (define-syntax-rule (with-shepherd-error-handling mbody ...)
"Catch and report Shepherd errors that arise when binding MBODY, a monadic "Catch and report Shepherd errors that arise when binding MBODY, a monadic
expression in %STORE-MONAD." expression in %STORE-MONAD."
(lambda (store) (lambda (store)
(warn-on-system-error (catch 'system-error
(guard (c ((shepherd-error? c) (lambda ()
(values (report-shepherd-error c) store))) (guard (c ((shepherd-error? c)
(values (run-with-store store (begin mbody ...)) (values (report-shepherd-error c) store)))
store))))) (values (run-with-store store (begin mbody ...))
store)))
(lambda (key proc format-string format-args errno . rest)
(warning (_ "while talking to shepherd: ~a~%")
(apply format #f format-string format-args))
(values #f store)))))
(define (report-shepherd-error error) (define (report-shepherd-error error)
"Report ERROR, a '&shepherd-error' error condition object." "Report ERROR, a '&shepherd-error' error condition object."
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment