summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2022-01-09 22:34:01 +0100
committerLudovic Courtès <ludo@gnu.org>2022-01-09 23:17:17 +0100
commitd1e3c96759407a4d7db8f5975b0e78941a0e64c4 (patch)
tree022916a573289c225bc1f004c6a8ea826bcf20e7
parent04f18d65771d3ceae5c0b67312a59a2e521befb9 (diff)
downloadguix-d1e3c96759407a4d7db8f5975b0e78941a0e64c4.tar.gz
scripts: import: go: Wrap body in 'with-error-handling'.
This ensures proper error reporting and an exception reaches the top
level.

* guix/scripts/import/go.scm (guix-import-go): Wrap body in
'with-error-handling'.
-rw-r--r--guix/scripts/import/go.scm69
1 files changed, 35 insertions, 34 deletions
diff --git a/guix/scripts/import/go.scm b/guix/scripts/import/go.scm
index f5cfea8683..f1970d3543 100644
--- a/guix/scripts/import/go.scm
+++ b/guix/scripts/import/go.scm
@@ -87,37 +87,38 @@ that are not yet in Guix"))
     (parse-command-line args %options (list %default-options)
                         #:build-options? #f))
 
-  (let* ((opts (parse-options))
-         (args (filter-map (match-lambda
-                             (('argument . value)
-                              value)
-                             (_ #f))
-                           (reverse opts)))
-         ;; Append the full version to the package symbol name when using
-         ;; pinned versions.
-         (package->definition* (if (assoc-ref opts 'pin-versions?)
-                                   (cut package->definition <> 'full)
-                                   package->definition)))
-    (match args
-      ((spec)                         ;e.g., github.com/golang/protobuf@v1.3.1
-       (receive (name version)
-           (package-name->name+version spec)
-         (let ((arguments (list name
-                                #:goproxy (assoc-ref opts 'goproxy)
-                                #:version version
-                                #:pin-versions?
-                                (assoc-ref opts 'pin-versions?))))
-           (if (assoc-ref opts 'recursive)
-               ;; Recursive import.
-               (map package->definition*
-                    (apply go-module-recursive-import arguments))
-               ;; Single import.
-               (let ((sexp (apply go-module->guix-package* arguments)))
-                 (unless sexp
-                   (leave (G_ "failed to download meta-data for module '~a'.~%")
-                          name))
-                 (package->definition* sexp))))))
-      (()
-       (leave (G_ "too few arguments~%")))
-      ((many ...)
-       (leave (G_ "too many arguments~%"))))))
+  (with-error-handling
+    (let* ((opts (parse-options))
+           (args (filter-map (match-lambda
+                               (('argument . value)
+                                value)
+                               (_ #f))
+                             (reverse opts)))
+           ;; Append the full version to the package symbol name when using
+           ;; pinned versions.
+           (package->definition* (if (assoc-ref opts 'pin-versions?)
+                                     (cut package->definition <> 'full)
+                                     package->definition)))
+      (match args
+        ((spec)                       ;e.g., github.com/golang/protobuf@v1.3.1
+         (receive (name version)
+             (package-name->name+version spec)
+           (let ((arguments (list name
+                                  #:goproxy (assoc-ref opts 'goproxy)
+                                  #:version version
+                                  #:pin-versions?
+                                  (assoc-ref opts 'pin-versions?))))
+             (if (assoc-ref opts 'recursive)
+                 ;; Recursive import.
+                 (map package->definition*
+                      (apply go-module-recursive-import arguments))
+                 ;; Single import.
+                 (let ((sexp (apply go-module->guix-package* arguments)))
+                   (unless sexp
+                     (leave (G_ "failed to download meta-data for module '~a'.~%")
+                            name))
+                   (package->definition* sexp))))))
+        (()
+         (leave (G_ "too few arguments~%")))
+        ((many ...)
+         (leave (G_ "too many arguments~%")))))))