* 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
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 external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.