Subject: bug#52577: closed (Re: bug#52577: ‘guix lint’ throws an ugly backtrace if the GitHub updater receives “rate limit exceeded”error)

From: [email-masked] (GNU bug Tracking System)
Date: Sat, 14 May 2022 14:19:02 +0000

Your bug report

#52577: ‘guix lint’ throws an ugly backtrace if the GitHub updater receives “rate limit exceeded” error

which was filed against the guix package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
52577: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52577
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#52577: ‘guix lint’ throws an ugly backtrace if the GitHub updater receives “rate limit exceeded” error
From: Ludovic Courtès <[email-masked]>
To: Xinglu Chen <[email-masked]>
Cc: [email-masked]
Date: Sat, 14 May 2022 16:18:26 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi,

Xinglu Chen <[email-masked]> skribis:

> When running ‘guix lint -c refresh’ on a package hosted on GitHub, I get
> an ugly backtrace when the GitHub rate limit has been reached.
>
> $ guix lint pipewire

[...]

>    1428:5  5 (check-for-updates #<package [email-masked] gnu/packag…>)
>     771:2  4 (call-with-networking-fail-safe _ _ _)
> In ice-9/boot-9.scm:
>   1752:10  3 (with-exception-handler _ _ #:unwind? _ # _)
>   1685:16  2 (raise-exception _ #:continuable? _)
>   1683:16  1 (raise-exception _ #:continuable? _)
>   1685:16  0 (raise-exception _ #:continuable? _)
>
> ice-9/boot-9.scm:1685:16: In procedure raise-exception:
> ERROR:
>   1. &http-get-error:
>       uri: #<<uri> scheme: https userinfo: #f host: "api.github.com" port: #f path: "/repos/PipeWire/pipewire/releases" query: #f fragment: #f>
>       code: 403
>       reason: "rate limit exceeded"
>   2. &message: "https://api.github.com/repos/PipeWire/pipewire/releases: HTTP download failed: 403 (\"rate limit exceeded\")"

This was fixed in March with commit
55e8e283ae398cc476e50e822383797c5f43db4c.

Closing!

Ludo’.

Subject: ‘guix lint’ throws an ugly backtrace if the GitHub updater receives“rate limit exceeded” error
From: Xinglu Chen <[email-masked]>
To: [email-masked]
Date: Fri, 17 Dec 2021 15:03:36 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

When running ‘guix lint -c refresh’ on a package hosted on GitHub, I get
an ugly backtrace when the GitHub rate limit has been reached.

--8<---------------cut here---------------start------------->8---
$ guix lint pipewire
fetching CVE database for 2021...
fetching CVE database for 2018...
Backtrace:[email-masked] [refresh]...
          15 (primitive-load "/home/yoctocell/.config/guix/current/b…")
In guix/ui.scm:
   2206:7 14 (run-guix . _)
  2169:10 13 (run-guix-command _ . _)
In ice-9/boot-9.scm:
  1752:10 12 (with-exception-handler _ _ #:unwind? _ # _)
  1752:10 11 (with-exception-handler _ _ #:unwind? _ # _)
In guix/store.scm:
   658:37 10 (thunk)
In srfi/srfi-1.scm:
    634:9  9 (for-each #<procedure 7fb8f038ff40 at guix/scripts/lin…> …)
In guix/scripts/lint.scm:
     65:4  8 (run-checkers _ _ #:store _)
In srfi/srfi-1.scm:
    634:9  7 (for-each #<procedure 7fb8e15a8d20 at guix/scripts/lin…> …)
In guix/scripts/lint.scm:
    74:21  6 (_ _)
In guix/lint.scm:
   1428:5  5 (check-for-updates #<package [email-masked] gnu/packag…>)
    771:2  4 (call-with-networking-fail-safe _ _ _)
In ice-9/boot-9.scm:
  1752:10  3 (with-exception-handler _ _ #:unwind? _ # _)
  1685:16  2 (raise-exception _ #:continuable? _)
  1683:16  1 (raise-exception _ #:continuable? _)
  1685:16  0 (raise-exception _ #:continuable? _)

ice-9/boot-9.scm:1685:16: In procedure raise-exception:
ERROR:
  1. &http-get-error:
      uri: #<<uri> scheme: https userinfo: #f host: "api.github.com" port: #f path: "/repos/PipeWire/pipewire/releases" query: #f fragment: #f>
      code: 403
      reason: "rate limit exceeded"
  2. &message: "https://api.github.com/repos/PipeWire/pipewire/releases: HTTP download failed: 403 (\"rate limit exceeded\")"
--8<---------------cut here---------------end--------------->8---

When running ‘guix refresh’, a much friendlier error message is produced.

--8<---------------cut here---------------start------------->8---
$ guix refresh -t github
guix refresh: error: https://api.github.com/repos/OpenZWave/open-zwave/releases: HTTP download failed: 403 ("rate limit exceeded")
--8<---------------cut here---------------end--------------->8---

The problem seems to be that the ‘check-for-updates’ procedure in (guix
lint) doesn’t catch the ‘&http-get-error’.  I tried adding the following
form:

--8<---------------cut here---------------start------------->8---
(guard (c ((and (http-get-error? c)
                (string=? "rate limit exceeded"
                          (http-get-error-reason c)))
           (warning (G_ "GitHub rate limit exceeded"))
           #f))
  (with-networking-fail-safe ...))
--8<---------------cut here---------------end--------------->8---

but it doesn’t work.  C seems to be something a lot more complicated
than just a ‘&http-get-error’:

--8<---------------cut here---------------start------------->8---
#<&compound-exception components: (#<&error> #<&irritants irritants: (#<&compound-exception components: (#<&http-get-error uri: #<<uri> scheme: https userinfo: #f host: "api.github.com" port: #f path: "/repos/PipeWire/pipewire/releases" query: #f fragment: #f> code: 403 reason: "rate limit exceeded"> #<&message message: "https://api.github.com/repos/PipeWire/pipewire/releases: HTTP download failed: 403 (\"rate limit exceeded\")">)>)> #<&exception-with-kind-and-args kind: %exception args: (#<&compound-exception components: (#<&http-get-error uri: #<<uri> scheme: https userinfo: #f host: "api.github.com" port: #f path: "/repos/PipeWire/pipewire/releases" query: #f fragment: #f> code: 403 reason: "rate limit exceeded"> #<&message message: "https://api.github.com/repos/PipeWire/pipewire/releases: HTTP download failed: 403 (\"rate limit exceeded\")">)>)>)>
--8<---------------cut here---------------end--------------->8---

Any ideas on how to extract to the ‘&http-get-error’?