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:ipewire@0.3.29 [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 # …) In guix/scripts/lint.scm: 65:4 8 (run-checkers _ _ #:store _) In srfi/srfi-1.scm: 634:9 7 (for-each # …) In guix/scripts/lint.scm: 74:21 6 (_ _) In guix/lint.scm: 1428:5 5 (check-for-updates #) 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: #< 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: #< 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: #< 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’?