diff options
author | Ludovic Courtès <ludo@gnu.org> | 2016-03-22 09:57:15 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2016-03-23 00:23:12 +0100 |
commit | 8c321299c532e620c0d2327dd15acad3d6b4476c (patch) | |
tree | 22007dc5ec7d92d58cdcbb994c5898174b236aad | |
parent | b98293ebed46086c21cdd975c4a8c6139b2edcd0 (diff) | |
download | guix-8c321299c532e620c0d2327dd15acad3d6b4476c.tar.gz |
substitute: Gracefully handle TLS errors.
* guix/scripts/substitute.scm (with-networking): Use 'match-lambda*' and add case for 'gnutls-error'.
-rwxr-xr-x | guix/scripts/substitute.scm | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm index 4563f3df0f..82ce069598 100755 --- a/guix/scripts/substitute.scm +++ b/guix/scripts/substitute.scm @@ -780,16 +780,24 @@ PORT. REPORT-PROGRESS is a two-argument procedure such as that returned by (define-syntax with-networking (syntax-rules () - "Catch DNS lookup errors and gracefully exit." + "Catch DNS lookup errors and TLS errors and gracefully exit." ;; Note: no attempt is made to catch other networking errors, because DNS ;; lookup errors are typically the first one, and because other errors are ;; a subset of `system-error', which is harder to filter. ((_ exp ...) - (catch 'getaddrinfo-error + (catch #t (lambda () exp ...) - (lambda (key error) - (leave (_ "host name lookup error: ~a~%") - (gai-strerror error))))))) + (match-lambda* + (('getaddrinfo-error error) + (leave (_ "host name lookup error: ~a~%") + (gai-strerror error))) + (('gnutls-error error proc . rest) + (let ((error->string (module-ref (resolve-interface '(gnutls)) + 'error->string))) + (leave (_ "TLS error in procedure '~a': ~a~%") + proc (error->string error)))) + (args + (apply throw args))))))) ;;; |