import: go: Improve error handling.

* guix/import/go.scm (go-module->guix-package*): Handle errors, remove
memoize.
(go-module-recursive-import): Remove 'guard', add memoize.
* guix/scripts/import/go.scm (guix-import-go): Adjust.
* tests/go.scm: Adjust.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
zimoun 2021-08-06 11:05:17 -07:00 committed by Ludovic Courtès
parent f95bdeb93a
commit be13e2be08
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
3 changed files with 35 additions and 23 deletions

View file

@ -6,6 +6,7 @@
;;; Copyright © 2021 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev>
;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@ -63,6 +64,7 @@ (define-module (guix import go)
#:use-module (web uri)
#:export (go-module->guix-package
go-module->guix-package*
go-module-recursive-import))
;;; Commentary:
@ -646,7 +648,28 @@ (define* (go-module->guix-package module-path #:key
dependencies+versions
dependencies))))
(define go-module->guix-package* (memoize go-module->guix-package))
(define go-module->guix-package*
(lambda args
;; Disable output buffering so that the following warning gets printed
;; consistently.
(setvbuf (current-error-port) 'none)
(let ((package-name (match args ((name _ ...) name))))
(guard (c ((http-get-error? c)
(warning (G_ "Failed to import package ~s.
reason: ~s could not be fetched: HTTP error ~a (~s).
This package and its dependencies won't be imported.~%")
package-name
(uri->string (http-get-error-uri c))
(http-get-error-code c)
(http-get-error-reason c))
(values #f '()))
(else
(warning (G_ "Failed to import package ~s.
reason: ~s.~%")
package-name
(exception-args c))
(values #f '())))
(apply go-module->guix-package args)))))
(define* (go-module-recursive-import package-name
#:key (goproxy "https://proxy.golang.org")
@ -656,23 +679,12 @@ (define* (go-module-recursive-import package-name
(recursive-import
package-name
#:repo->guix-package
(lambda* (name #:key version repo)
;; Disable output buffering so that the following warning gets printed
;; consistently.
(setvbuf (current-error-port) 'none)
(guard (c ((http-get-error? c)
(warning (G_ "Failed to import package ~s.
reason: ~s could not be fetched: HTTP error ~a (~s).
This package and its dependencies won't be imported.~%")
name
(uri->string (http-get-error-uri c))
(http-get-error-code c)
(http-get-error-reason c))
(values #f '())))
(receive (package-sexp dependencies)
(go-module->guix-package* name #:goproxy goproxy
#:version version
#:pin-versions? pin-versions?)
(values package-sexp dependencies))))
(memoize
(lambda* (name #:key version repo)
(receive (package-sexp dependencies)
(go-module->guix-package* name #:goproxy goproxy
#:version version
#:pin-versions? pin-versions?)
(values package-sexp dependencies))))
#:guix-name go-module->guix-package-name
#:version version))

View file

@ -112,10 +112,10 @@ (define (parse-options)
(map package->definition*
(apply go-module-recursive-import arguments))
;; Single import.
(let ((sexp (apply go-module->guix-package arguments)))
(let ((sexp (apply go-module->guix-package* arguments)))
(unless sexp
(leave (G_ "failed to download meta-data for module '~a'~%")
module-name))
(leave (G_ "failed to download meta-data for module '~a'.~%")
name))
(package->definition* sexp))))))
(()
(leave (G_ "too few arguments~%")))

View file

@ -410,6 +410,6 @@ (define (mock-http-get testcase)
(nix-base32-string->bytevector
"0sjjj9z1dhilhpc8pq4154czrb79z9cm044jvn75kxcjv6v5l2m5")
#f)))
(go-module->guix-package "github.com/go-check/check")))))))
(go-module->guix-package* "github.com/go-check/check")))))))
(test-end "go")