diff options
author | Ludovic Courtès <ludo@gnu.org> | 2020-07-24 12:04:22 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2020-07-24 14:21:30 +0200 |
commit | ac928d3e9ebdb660f8104f3e4b890a2353787cdf (patch) | |
tree | 6b84be632b4d3f0d4769682af081341cff96093f | |
parent | a553892215157090ff892dc5cbbe85a25e837260 (diff) | |
download | guix-ac928d3e9ebdb660f8104f3e4b890a2353787cdf.tar.gz |
import: github: Gracefully handle projects that have disappeared.
Fixes <https://bugs.gnu.org/42509>. Reported by Alexandru-Sergiu Marton <brown121407@posteo.ro>. * guix/import/github.scm (fetch-releases-or-tags): Use 'http-fetch' instead of 'json-fetch', and guard against 404 errors. Upon 404, emit a warning and return the empty vector.
-rw-r--r-- | guix/import/github.scm | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/guix/import/github.scm b/guix/import/github.scm index 95a792d0ca..888b148ffb 100644 --- a/guix/import/github.scm +++ b/guix/import/github.scm @@ -26,10 +26,13 @@ #:use-module (srfi srfi-26) #:use-module (srfi srfi-34) #:use-module (guix utils) + #:use-module (guix i18n) + #:use-module (guix diagnostics) #:use-module ((guix download) #:prefix download:) #:use-module ((guix git-download) #:prefix download:) #:use-module (guix import utils) #:use-module (guix import json) + #:use-module (json) #:use-module (guix packages) #:use-module (guix upstream) #:use-module (guix http-client) @@ -162,12 +165,20 @@ empty list." `((Authorization . ,(string-append "token " (%github-token)))) '()))) - (match (json-fetch release-url #:headers headers) - (#() - ;; We got the empty list, presumably because the user didn't use GitHub's - ;; "release" mechanism, but hopefully they did use Git tags. - (json-fetch tag-url #:headers headers)) - (x x))) + (guard (c ((and (http-get-error? c) + (= 404 (http-get-error-code c))) + (warning (G_ "~a is unreachable (~a)~%") + release-url (http-get-error-code c)) + '#())) ;return an empty release set + (let* ((port (http-fetch release-url #:headers headers)) + (result (json->scm port))) + (close-port port) + (match result + (#() + ;; We got the empty list, presumably because the user didn't use GitHub's + ;; "release" mechanism, but hopefully they did use Git tags. + (json-fetch tag-url #:headers headers)) + (x x))))) (define (latest-released-version url package-name) "Return a string of the newest released version name given a string URL like |