From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mathieu OTHACEHE Subject: [PATCH] import: github: Catch HTTP 403 error during fetch. Date: Tue, 17 Jan 2017 09:17:30 +0100 Message-ID: <20170117081730.17927-1-m.othacehe@gmail.com> Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:42890) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cTOxc-0006eh-Nf for guix-devel@gnu.org; Tue, 17 Jan 2017 03:17:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cTOxX-0006J1-KH for guix-devel@gnu.org; Tue, 17 Jan 2017 03:17:44 -0500 Received: from mail-wm0-x244.google.com ([2a00:1450:400c:c09::244]:36070) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cTOxX-0006GW-Dv for guix-devel@gnu.org; Tue, 17 Jan 2017 03:17:39 -0500 Received: by mail-wm0-x244.google.com with SMTP id r126so36603399wmr.3 for ; Tue, 17 Jan 2017 00:17:37 -0800 (PST) List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: guix-devel@gnu.org * guix/import/github.scm (json-fetch*): Catch 403 HTTP error that may be raised if a github token has not been set. Signed-off-by: Mathieu OTHACEHE --- Hi, If too many github requests are made during a guix refresh (> 60/h), github will reject all further requests with a 403 error. The 403 error is not catch in json-fetch* guard, so guix refresh will exit at that point. The user never gets to error message informing that setting a GUIX_GITHUB_TOKEN may fix the problem. Mathieu guix/import/github.scm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/guix/import/github.scm b/guix/import/github.scm index df5a6b0e0..1e0bb53d9 100644 --- a/guix/import/github.scm +++ b/guix/import/github.scm @@ -32,10 +32,13 @@ (define (json-fetch* url) "Return a representation of the JSON resource URL (a list or hash table), or -#f if URL returns 404." +#f if URL returns 403 or 404." (guard (c ((and (http-get-error? c) - (= 404 (http-get-error-code c))) - #f)) ;"expected" if package is unknown + (let ((error (http-get-error-code c))) + (or (= 403 error) + (= 404 error)))) + #f)) ;; "expected" if there is an authentification error (403), + ;; or if package is unknown (404). ;; Note: github.com returns 403 if we omit a 'User-Agent' header. (let* ((port (http-fetch url)) (result (json->scm port))) -- 2.11.0