summary refs log tree commit diff
diff options
context:
space:
mode:
authorzimoun <zimon.toutoune@gmail.com>2021-01-19 16:47:21 +0100
committerLudovic Courtès <ludo@gnu.org>2022-03-07 22:49:29 +0100
commit5278cab3dc001b371e1ed2f920b7f0c5678938e3 (patch)
tree991dadc6021e36dddd9adf7e38df3b8a07d32798
parent7229b0e85826e8c752bfe64334901c747951ccf2 (diff)
downloadguix-5278cab3dc001b371e1ed2f920b7f0c5678938e3.tar.gz
scripts: import: gem: Fix recursive error handling.
Partly fixes <https://bugs.gnu.org/44115>.

* guix/scripts/import/gem.scm (guix-import-gem): Handle error.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
-rw-r--r--guix/scripts/import/gem.scm33
1 files changed, 18 insertions, 15 deletions
diff --git a/guix/scripts/import/gem.scm b/guix/scripts/import/gem.scm
index 328d20b946..82deac16ad 100644
--- a/guix/scripts/import/gem.scm
+++ b/guix/scripts/import/gem.scm
@@ -3,6 +3,7 @@
 ;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com>
 ;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
 ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -80,24 +81,26 @@ Import and convert the RubyGems package for PACKAGE-NAME.\n"))
 
   (let* ((opts (parse-options))
          (args (filter-map (match-lambda
-                            (('argument . value)
-                             value)
-                            (_ #f))
+                             (('argument . value)
+                              value)
+                             (_ #f))
                            (reverse opts))))
     (match args
       ((package-name)
-       (if (assoc-ref opts 'recursive)
-           (map (match-lambda
-                  ((and ('package ('name name) . rest) pkg)
-                   `(define-public ,(string->symbol name)
-                      ,pkg))
-                  (_ #f))
-                (gem-recursive-import package-name 'rubygems))
-           (let ((sexp (gem->guix-package package-name)))
-             (unless sexp
-               (leave (G_ "failed to download meta-data for package '~a'~%")
-                      package-name))
-             sexp)))
+       (let ((code (if (assoc-ref opts 'recursive)
+                       (map (match-lambda
+                              ((and ('package ('name name) . rest) pkg)
+                               `(define-public ,(string->symbol name)
+                                  ,pkg))
+                              (_ #f))
+                            (gem-recursive-import package-name 'rubygems))
+                       (let ((sexp (gem->guix-package package-name)))
+                         (if sexp sexp #f)))))
+         (match code
+           ((or #f '(#f))
+            (leave (G_ "failed to download meta-data for package '~a'~%")
+                   package-name))
+           (_ code))))
       (()
        (leave (G_ "too few arguments~%")))
       ((many ...)