Subject: bug#25635: 'guix refresh' does not work for packages with multiple URIs (python-cram is one example)

From: Sergei Trofimovich <[email-masked]>
Date: Mon, 6 Feb 2017 09:19:56 +0000

[had to corrupt URIs to get past spam filter]

Noticed by accident when ran 'guix refresh' (global refreh).

Full quick reproducer is [1].

The trigger seems to be '(uri (list' nesting:

  gnu/packages/python.scm:
(define-public python-cram
  (package
    (name "python-cram")
    (version "0.7")
    (home-page "https://...")
    (source (origin
              (method url-fetch)
              (uri (list (string-append home-page "cram-"
                                        version ".tar.gz")
                         (pypi-uri "cram" version)))
              (sha256
               (base32
                "0bvz6fwdi55rkrz3f50zsy35gvvwhlppki2yml5bj5ffy9d499vx"))))

A few issues here:
- in [1] it does not tell which package it is.
- in full 'guix refresh' run the first error aborts whole process.
   would be nice to have a mode which proceeds even in face of errors

[1]: ~/dev/git/guix $ ./pre-inst-env guix refresh python-cram
;;; note: source file /home/slyfox/dev/git/guix/guix/import/pypi.scm
;;;       newer than compiled /home/slyfox/dev/git/guix/guix/import/pypi.go
Backtrace:
In ice-9/boot-9.scm:
  66: 19 [call-with-prompt prompt0 ...]
In ice-9/eval.scm:
 432: 18 [eval # #]
In ice-9/boot-9.scm:
2404: 17 [save-module-excursion #<procedure 1fd5900 at ice-9/boot-9.scm:4051:3 ()>]
4056: 16 [#<procedure 1fd5900 at ice-9/boot-9.scm:4051:3 ()>]
1727: 15 [%start-stack load-stack ...]
1732: 14 [#<procedure 1fe8bd0 ()>]
In unknown file:
   ?: 13 [primitive-load "/home/slyfox/dev/git/guix/scripts/guix"]
In guix/ui.scm:
1228: 12 [run-guix-command refresh "python-cram"]
In ice-9/boot-9.scm:
 160: 11 [catch srfi-34 #<procedure 59c8100 at guix/ui.scm:432:2 ()> ...]
 160: 10 [catch system-error ...]
In guix/scripts/refresh.scm:
 442: 9 [#<procedure 4bf00f0 at guix/scripts/refresh.scm:441:4 ()>]
 462: 8 [#<procedure 3082c60 at guix/scripts/refresh.scm:442:6 ()>]
In srfi/srfi-1.scm:
 616: 7 [for-each #<procedure 479d8d0 at guix/scripts/refresh.scm:462:22 (t-1378592)> ...]
In guix/scripts/refresh.scm:
 288: 6 [check-for-package-update # # # ...]
In ice-9/boot-9.scm:
 160: 5 [catch srfi-34 #<procedure 5c24300 at ice-9/eval.scm:416:20 ()> ...]
In ice-9/eval.scm:
 411: 4 [eval # #]
 387: 3 [eval # #]
 387: 2 [eval # #]
In guix/utils.scm:
 569: 1 [file-sans-extension #]
In unknown file:
   ?: 0 [string-rindex # #\. #<undefined> ...]

ERROR: In procedure string-rindex:
ERROR: In procedure string-index-right: Wrong type argument in position 1 (expecting string): ("https://..." "https://...")

-- 

  Sergei