unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
* bug#42504: guix refresh --update fails for Rust packages
@ 2020-07-24  7:16 Alexandru-Sergiu Marton
  2020-07-24  9:23 ` Danny Milosavljevic
  0 siblings, 1 reply; 4+ messages in thread
From: Alexandru-Sergiu Marton @ 2020-07-24  7:16 UTC (permalink / raw)
  To: 42504

Hi,

I tried to use the automatic updater for a Rust package but it had an
ugly fail. Here's the backtrace:

--8<---------------cut here---------------start------------->8---
[brown@121408 guix][env]$ ./pre-inst-env guix refresh --update rust-instant
Backtrace:
In ice-9/boot-9.scm:
  1736:10 16 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
In unknown file:
          15 (apply-smob/0 #<thunk 7f462a316580>)
In ice-9/boot-9.scm:
    718:2 14 (call-with-prompt _ _ #<procedure default-prompt-handler (k proc)>)
In ice-9/eval.scm:
    619:8 13 (_ #(#(#<directory (guile-user) 7f4629f52f00>)))
In guix/ui.scm:
  1974:12 12 (run-guix-command _ . _)
In ice-9/boot-9.scm:
  1736:10 11 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
  1731:15 10 (with-exception-handler #<procedure 7f461e6afbd0 at ice-9/boot-9.scm:1815:7 (exn)> _ #:unwind? _ #:unwind-for-type _)
  1736:10  9 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
In guix/store.scm:
   631:22  8 (thunk)
  2025:24  7 (run-with-store #<store-connection 256.99 7f461e6b7eb0> #<procedure 7f461c337f00 at guix/scripts/refresh.scm:535:10 (state)> #:guile-for-build _ #:system _ #:target _)
In guix/scripts/refresh.scm:
   552:16  6 (_ _)
In srfi/srfi-1.scm:
    634:9  5 (for-each #<procedure 7f462019e0f0 at guix/scripts/refresh.scm:553:17 (t-916fdc98f4be2f1-1c8c)> (#<package rust-instant@0.1.2 /home/brown/src/guix/gnu/packages/crates-io.scm:11321 7f4620de5d20>))
In guix/scripts/refresh.scm:
   318:20  4 (update-package #<store-connection 256.99 7f461e6b7eb0> #<package rust-instant@0.1.2 /home/brown/src/guix/gnu/packages/crates-io.scm:11321 7f4620de5d20> _ #:key-download _ #:warn? _)
In guix/upstream.scm:
   376:34  3 (package-update/url-fetch #<store-connection 256.99 7f461e6b7eb0> _ #<<upstream-source> package: "rust-instant" version: "0.1.6" urls: ("https://crates.io/api/v1/crates/instant/0.1.6/download…> …)
In unknown file:
           2 (string-contains #f "z" #<undefined> #<undefined> #<undefined> #<undefined>)
In ice-9/boot-9.scm:
  1669:16  1 (raise-exception _ #:continuable? _)
  1669:16  0 (raise-exception _ #:continuable? _)

ice-9/boot-9.scm:1669:16: In procedure raise-exception:
In procedure string-contains: Wrong type argument in position 1 (expecting string): #f
--8<---------------cut here---------------end--------------->8---

It's not only this package. Trying to update rust-serde gives a very
similar backtrace:

--8<---------------cut here---------------start------------->8---
Backtrace:
In ice-9/boot-9.scm:
  1736:10 16 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
In unknown file:
          15 (apply-smob/0 #<thunk 7f4a4a9a6580>)
In ice-9/boot-9.scm:
    718:2 14 (call-with-prompt _ _ #<procedure default-prompt-handler (k proc)>)
In ice-9/eval.scm:
    619:8 13 (_ #(#(#<directory (guile-user) 7f4a4a5e2f00>)))
In guix/ui.scm:
  1974:12 12 (run-guix-command _ . _)
In ice-9/boot-9.scm:
  1736:10 11 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
  1731:15 10 (with-exception-handler #<procedure 7f4a3efbd390 at ice-9/boot-9.scm:1815:7 (exn)> _ #:unwind? _ #:unwind-for-type _)
  1736:10  9 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
In guix/store.scm:
   631:22  8 (thunk)
  2025:24  7 (run-with-store #<store-connection 256.99 7f4a40a59000> #<procedure 7f4a3c9d6d20 at guix/scripts/refresh.scm:535:10 (state)> #:guile-for-build _ #:system _ #:target _)
In guix/scripts/refresh.scm:
   552:16  6 (_ _)
In srfi/srfi-1.scm:
    634:9  5 (for-each #<procedure 7f4a40aa13c0 at guix/scripts/refresh.scm:553:17 (t-916fdc98f4be2f1-1c8c)> (#<package rust-serde@1.0.105 /home/brown/src/guix/gnu/packages/crates-io.scm:22635 7f4a414d06e0>))
In guix/scripts/refresh.scm:
   318:20  4 (update-package #<store-connection 256.99 7f4a40a59000> #<package rust-serde@1.0.105 /home/brown/src/guix/gnu/packages/crates-io.scm:22635 7f4a414d06e0> _ #:key-download _ #:warn? _)
In guix/upstream.scm:
   376:34  3 (package-update/url-fetch #<store-connection 256.99 7f4a40a59000> _ #<<upstream-source> package: "rust-serde" version: "1.0.114" urls: ("https://crates.io/api/v1/crates/serde/1.0.114/download…> …)
In unknown file:
           2 (string-contains #f "z" #<undefined> #<undefined> #<undefined> #<undefined>)
In ice-9/boot-9.scm:
  1669:16  1 (raise-exception _ #:continuable? _)
  1669:16  0 (raise-exception _ #:continuable? _)
--8<---------------cut here---------------end--------------->8---

It seems that I can update non-rust stuff though. `guix refresh --update
i3-gaps` works fine.

Cheers,
Sergiu




^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#42504: guix refresh --update fails for Rust packages
  2020-07-24  7:16 bug#42504: guix refresh --update fails for Rust packages Alexandru-Sergiu Marton
@ 2020-07-24  9:23 ` Danny Milosavljevic
  2020-07-24 11:08   ` Alexandru-Sergiu Marton
  0 siblings, 1 reply; 4+ messages in thread
From: Danny Milosavljevic @ 2020-07-24  9:23 UTC (permalink / raw)
  To: Alexandru-Sergiu Marton; +Cc: 42504

[-- Attachment #1: Type: text/plain, Size: 3132 bytes --]

'"z"' appears in guix/upstream.scm, 

(define* (package-update/url-fetch store package source
                                   #:key key-download)
  "Return the version, tarball, and SOURCE, to update PACKAGE to
SOURCE, an <upstream-source>."
  (match source
    (($ <upstream-source> _ version urls signature-urls)
     (let*-values (((archive-type)
                    (match (and=> (package-source package) origin-uri)
                      ((? string? uri)
                       (let ((type (file-extension (basename uri))))
                         ;; Sometimes we have URLs such as
                         ;; "https://github.com/…/tarball/v0.1", in which case
                         ;; we must not consider "1" as the extension.
                         (and (or (string-contains type "z")
                                  (string=? type "tar"))
                              type)))
                      (_
                       "gz")))
                   ((url signature-url)
                    ;; Try to find a URL that matches ARCHIVE-TYPE.
                    (find2 (lambda (url sig-url)
                             ;; Some URIs lack a file extension, like
                             ;; 'https://crates.io/???/0.1/download'.  In that
                             ;; case, pick the first URL.
                             (or (not archive-type)
                                 (string-suffix? archive-type url)))
                           urls
                           (or signature-urls (circular-list #f)))))
       ;; If none of URLS matches ARCHIVE-TYPE, then URL is #f; in that case,
       ;; pick up the first element of URLS.
       (let ((tarball (download-tarball store
                                        (or url (first urls))
                                        (and (pair? signature-urls)
                                             (or signature-url
                                                 (first signature-urls)))
                                        #:key-download key-download)))
         (values version tarball source))))))

And guix repl says:

scheme@(guix-user)> ,use (guix utils)
scheme@(guix-user)> (file-extension "https://crates.io/api/v1/crates/instant/0.1.2/download")
$1 = #f

But the case #f is not handled in the code above--which is why it doesn't work.

Could you test the following fix?

diff --git a/guix/upstream.scm b/guix/upstream.scm
index 70cbfb45e8..31bd6faea4 100644
--- a/guix/upstream.scm
+++ b/guix/upstream.scm
@@ -369,7 +369,7 @@ SOURCE, an <upstream-source>."
      (let*-values (((archive-type)
                     (match (and=> (package-source package) origin-uri)
                       ((? string? uri)
-                       (let ((type (file-extension (basename uri))))
+                       (let ((type (or (file-extension (basename uri)) "")))
                          ;; Sometimes we have URLs such as
                          ;; "https://github.com/…/tarball/v0.1", in which case
                          ;; we must not consider "1" as the extension.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* bug#42504: guix refresh --update fails for Rust packages
  2020-07-24  9:23 ` Danny Milosavljevic
@ 2020-07-24 11:08   ` Alexandru-Sergiu Marton
  2020-07-27 11:36     ` Danny Milosavljevic
  0 siblings, 1 reply; 4+ messages in thread
From: Alexandru-Sergiu Marton @ 2020-07-24 11:08 UTC (permalink / raw)
  To: Danny Milosavljevic; +Cc: 42504

Danny Milosavljevic <dannym@scratchpost.org> writes:
> And guix repl says:
>
> scheme@(guix-user)> ,use (guix utils)
> scheme@(guix-user)> (file-extension "https://crates.io/api/v1/crates/instant/0.1.2/download")
> $1 = #f
>
> But the case #f is not handled in the code above--which is why it doesn't work.
>
> Could you test the following fix?
>
> diff --git a/guix/upstream.scm b/guix/upstream.scm
> index 70cbfb45e8..31bd6faea4 100644
> --- a/guix/upstream.scm
> +++ b/guix/upstream.scm
> @@ -369,7 +369,7 @@ SOURCE, an <upstream-source>."
>       (let*-values (((archive-type)
>                      (match (and=> (package-source package) origin-uri)
>                        ((? string? uri)
> -                       (let ((type (file-extension (basename uri))))
> +                       (let ((type (or (file-extension (basename uri)) "")))
>                           ;; Sometimes we have URLs such as
>                           ;; "https://github.com/…/tarball/v0.1", in which case
>                           ;; we must not consider "1" as the extension.

This fixes the issue, thanks!

--
Sergiu




^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#42504: guix refresh --update fails for Rust packages
  2020-07-24 11:08   ` Alexandru-Sergiu Marton
@ 2020-07-27 11:36     ` Danny Milosavljevic
  0 siblings, 0 replies; 4+ messages in thread
From: Danny Milosavljevic @ 2020-07-27 11:36 UTC (permalink / raw)
  To: Alexandru-Sergiu Marton; +Cc: 42504-done

[-- Attachment #1: Type: text/plain, Size: 105 bytes --]

Hi,

thanks for testing!

Pushed to guix master as commit bc76f8b1f9a74c0f187022991b633cc1820944c7.

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-07-27 11:37 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-24  7:16 bug#42504: guix refresh --update fails for Rust packages Alexandru-Sergiu Marton
2020-07-24  9:23 ` Danny Milosavljevic
2020-07-24 11:08   ` Alexandru-Sergiu Marton
2020-07-27 11:36     ` Danny Milosavljevic

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).