Subject: Re: bug#42512: "guix refresh --list-updaters" fails

From: Ludovic Courtès <[email-masked]>
Date: Fri, 24 Jul 2020 11:49:15 +0200

Hi Danny,

Danny Milosavljevic <[email-masked]> skribis:

> $ LC_ALL=C guix describe
> Generation 108  Jul 16 2020 11:03:13    (current)
>   guix d57ce20
>     repository URL: https://git.savannah.gnu.org/git/guix.git
>     branch: master
>     commit: d57ce2024b0bdec0f8d05258c32c7bc7275a17a6
>   heads 9cc77db
>     repository URL: https://github.com/daym/heads-guix.git
>     branch: wip-musl
>     commit: 9cc77db51d994dc3ea03298e3714e2a0c7b929a5
>
> $ LC_ALL=C guix refresh  --list-updaters
> [...]
>   - cpan: Updater for CPAN packages (5.3% coverage)
>   - kernel.org: Updater for packages hosted on kernel.org (.3% coverage)
> Backtrace:
>           12 (primitive-load "/home/dannym/.config/guix/current/bin/?")
> In guix/ui.scm:
>   1974:12 11 (run-guix-command _ . _)
> In guix/scripts/refresh.scm:
>     502:4 10 (guix-refresh . _)
> In ice-9/boot-9.scm:
>   1731:15  9 (with-exception-handler #<procedure 7fefd641f2d0 at ic?> ?)
> In srfi/srfi-37.scm:
>    201:16  8 (next-arg)
>    113:18  7 (invoke-option-processor _ _ _ _ _)
> In unknown file:
>            6 (_ #<procedure 7fefd641f240 at srfi/srfi-37.scm:114:22?> ?)
> In guix/scripts/refresh.scm:
>     285:4  5 (_ . _)
> In srfi/srfi-1.scm:
>    460:18  4 (fold #<procedure 7fefdaecbf60 at guix/scripts/refresh?> ?)
> In guix/scripts/refresh.scm:
>    287:29  3 (_ #<<upstream-updater> name: gnu-ftp description: "Up?> ?)
> In unknown file:
>            2 (filter #<procedure pred (package)> (#<package heads?> ?))
> In guix/memoization.scm:
>     101:0  1 (_ #<hash-table 7fefdaedbce0 12/31> #<package heads-u-?> ?)
> In guix/gnu-maintenance.scm:
>    182:20  0 (_)
>
> guix/gnu-maintenance.scm:182:20: In procedure struct-vtable: Wrong type argument in position 1 (expecting struct): #f
>
> (define gnu-package?
>   (let ((official-gnu-packages (memoize official-gnu-packages)))
>     (mlambdaq (package)
>       "Return true if PACKAGE is a GNU package.  This procedure may access the
> network to check in GNU's database."
>       (define (mirror-type url)
>         (let ((uri (string->uri url))) ; <------------------------

That suggests one of the packages in the ‘heads-guix’ channel has an
invalid URL (one for which ‘string->uri’ returns #f).

If you set COLUMNS=200 you should see the name of the package in the
backtrace.  :-)

Ludo’.