summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-08-04 21:27:30 +0200
committerLudovic Courtès <ludo@gnu.org>2020-08-05 22:28:28 +0200
commit05f3d34094b23dc9612ff6641a0257bc4f7dcd12 (patch)
treed4b424cd03c58374d2e2bcc50537465d4a8c7d56
parentfc45f2fcf8c1cd19fa162d5c8fd43956f442f11d (diff)
downloadguix-05f3d34094b23dc9612ff6641a0257bc4f7dcd12.tar.gz
ui: Report key-and-arg exceptions correctly.
Fixes <https://bugs.gnu.org/42601>.
Reported by Jan Wielkiewicz <tona_kosmicznego_smiecia@interia.pl>.

Regression introduced in efe037fc5cc3134bbc3ef4e36b49a3f788921b68
whereby errors like 'wrong-type-arg' would be improperly reported:

  guix environment: error: Wrong type argument in position ~A (expecting ~A): ~S

See also commit a07d5e558b5403dad0a59776b950b6b02169c249.

* guix/ui.scm (call-with-error-handling): Move 'message-condition?'
clause after '&exception-with-kind-and-args' clause.
-rw-r--r--guix/ui.scm19
1 files changed, 10 insertions, 9 deletions
diff --git a/guix/ui.scm b/guix/ui.scm
index 42afdc2856..efc3f39186 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -795,14 +795,6 @@ directories:~{ ~a~}~%")
                      (invoke-error-stop-signal c)
                      (cons (invoke-error-program c)
                            (invoke-error-arguments c))))
-             ((message-condition? c)
-              ;; Normally '&message' error conditions have an i18n'd message.
-              (report-error (and (error-location? c) (error-location c))
-                            (G_ "~a~%")
-                            (gettext (condition-message c) %gettext-domain))
-              (when (fix-hint? c)
-                (display-hint (condition-fix-hint c)))
-              (exit 1))
 
              ((formatted-message? c)
               (apply report-error
@@ -825,7 +817,16 @@ directories:~{ ~a~}~%")
                 (guile-3
                  ((exception-predicate &exception-with-kind-and-args) c))
                 (else #f))
-              (raise c)))
+              (raise c))
+
+             ((message-condition? c)
+              ;; Normally '&message' error conditions have an i18n'd message.
+              (report-error (and (error-location? c) (error-location c))
+                            (G_ "~a~%")
+                            (gettext (condition-message c) %gettext-domain))
+              (when (fix-hint? c)
+                (display-hint (condition-fix-hint c)))
+              (exit 1)))
       ;; Catch EPIPE and the likes.
       (catch 'system-error
         thunk