“guix import -r“ fails with Bactktrace instead of error

OpenSubmitted by zimoun.
Details
2 participants
  • Lulu
  • zimoun
Owner
unassigned
Severity
normal
Z
Z
zimoun wrote on 21 Oct 2020 15:19
(address . bug-guix@gnu.org)
87blgvg1i4.fsf@gmail.com
Dear,

Compare:

$ guix import elpa foo
guix import: error: failed to download package 'foo'

with:

$ guix import elpa foo -r
Backtrace:
4 (primitive-load "/home/simon/.config/guix/current/bin/guix")
In guix/ui.scm:
2116:12 3 (run-guix-command _ . _)
In guix/scripts/import.scm:
120:11 2 (guix-import . _)
In guix/scripts/import/elpa.scm:
103:16 1 (guix-import-elpa . _)
In guix/import/utils.scm:
431:36 0 (recursive-import "foo" gnu #:repo->guix-package _ #:guix-name _)

guix/import/utils.scm:431:36: In procedure recursive-import:
Wrong number of values returned to continuation (expected 2)



Idem with the importers: ’hackage’, ’pypi’, ’cran’, ’crate’ and ’opam’.
Note the special mention to ’gem’:

$ guix import gem kikoo -r
#f


All the best,
simon
L
“guix import -r“ fails with Bactktrace instead of error
(name . 44115@debbugs.gnu.org)(address . 44115@debbugs.gnu.org)
1526955024.4020.1604009529477@office.mailbox.org
Okay, this one was a tad difficult but I think I got it down. A problem was that
there were hacks in importers to circumvent this problem without actually solving
it. I'm going to send in annotated patches soon.

--
Lulu
L
[bug#44115] [PATCH] import: Make failed recursive imports yield an error instead of backtrace.
(name . guix-patches@gnu.org)(address . guix-patches@gnu.org)
674201342.4055.1604011162338@office.mailbox.org
* guix/import/utils.scm (recursive-import): Move error handling of recursive imports to a single point.
* guix/import/gem.scm (gem->guix-package): Fix the `values' hack and make the procedure return #f on failure.
* guix/import/pypi.scm (pypi->guix-package): Fix the condition hack and make the procedure return #f on failure.

---
guix/import/gem.scm | 2 +-
guix/import/pypi.scm | 5 +----
guix/import/utils.scm | 9 +++++++--
3 files changed, 9 insertions(+), 7 deletions(-)

Toggle diff (58 lines)
diff --git a/guix/import/gem.scm b/guix/import/gem.scm
index 3fe240f36a..c97df149ab 100644
--- a/guix/import/gem.scm
+++ b/guix/import/gem.scm
@@ -143,7 +143,7 @@ VERSION, HASH, HOME-PAGE, DESCRIPTION, DEPENDENCIES, and LICENSES."
                                  dependencies
                                  licenses)
                   dependencies-names))
-        (values #f '()))))
+        #f)))
 
 (define (guix-package->gem-name package)
   "Given a PACKAGE built from rubygems.org, return the name of the
diff --git a/guix/import/pypi.scm b/guix/import/pypi.scm
index 15116e349d..9c6a825243 100644
--- a/guix/import/pypi.scm
+++ b/guix/import/pypi.scm
@@ -478,10 +478,7 @@ VERSION, SOURCE-URL, HOME-PAGE, SYNOPSIS, DESCRIPTION, and LICENSE."
             (info    (and project (pypi-project-info project))))
        (and project
             (guard (c ((missing-source-error? c)
-                       (let ((package (missing-source-error-package c)))
-                         (leave (G_ "no source release for pypi package ~a ~a~%")
-                                (project-info-name info)
-                                (project-info-version info)))))
+                       #f))
               (make-pypi-sexp (project-info-name info)
                               (project-info-version info)
                               (and=> (latest-source-release project)
diff --git a/guix/import/utils.scm b/guix/import/utils.scm
index 145515c489..815a05988e 100644
--- a/guix/import/utils.scm
+++ b/guix/import/utils.scm
@@ -36,6 +36,7 @@
   #:use-module (guix store)
   #:use-module (guix download)
   #:use-module (guix sets)
+  #:use-module (guix ui)
   #:use-module (gnu packages)
   #:use-module (ice-9 match)
   #:use-module (ice-9 rdelim)
@@ -428,8 +429,12 @@ name corresponding to the upstream name."
     (not (null? (find-packages-by-name (guix-name name)))))
 
   (define (lookup-node name)
-    (receive (package dependencies) (repo->guix-package name repo)
-      (make-node name package dependencies)))
+    (call-with-values (lambda () (repo->guix-package name repo))
+      (match-lambda*
+        ((#f)
+         (leave (G_ "failed to download package '~a' during recursive import~%") name))
+        ((package dependencies)
+         (make-node name package dependencies)))))
 
   (map node-package
        (topological-sort (list (lookup-node package-name))
-- 
2.29.1
Z
Z
zimoun wrote on 18 Jan 2021 21:25
Re: bug#44115: “guix import -r “ fails with Bactktrace instead of error
(address . 44115@debbugs.gnu.org)
864kje9emb.fsf@gmail.com
Hi,

The commit bea3b17739fc591b8cf6db1f8d28a6f6c9585577 changed a bit the
importers. However, even before this commit, the errors are incorrectly
reported for ’gnu’ and ’json’, without the --recursive option, e.g,
commit 23e2cd156f. And bea3b17739 does not change anything. This very
same backtrace:

Toggle snippet (28 lines)
# Importer: gnu
Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...
Backtrace:
10 (primitive-load "/home/simon/.cache/guix/inferiors/uefwax7zflbosucfo3nxhvvwwyvldkx447xk…")
In guix/ui.scm:
2118:12 9 (run-guix-command _ . _)
In guix/scripts/import.scm:
120:11 8 (guix-import . _)
In ice-9/boot-9.scm:
1736:10 7 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
1731:15 6 (with-exception-handler #<procedure 7f44f4628900 at ice-9/boot-9.scm:1815:7 (exn)> _ # _ …)
In guix/import/gnu.scm:
111:2 5 (gnu->guix-package "kikoo-lol" #:key-download _)
In guix/gnu-maintenance.scm:
364:20 4 (latest-ftp-release "kikoo-lol" #:server _ #:directory _ #:keep-file? _ # _ #:ftp-open _ …)
In guix/ftp-client.scm:
233:6 3 (ftp-list #<<ftp-connection> socket: #<input-output: socket 15> addrinfo: #(32 10 1 6 …> …)
In srfi/srfi-1.scm:
460:18 2 (fold #<procedure 7f44f4628720 at guix/ftp-client.scm:187:10 (dir result)> _ _)
In guix/ftp-client.scm:
74:8 1 (_ _ _)
In ice-9/boot-9.scm:
1669:16 0 (raise-exception _ #:continuable? _)

ice-9/boot-9.scm:1669:16: In procedure raise-exception:
Throw to key `ftp-error' with args `(#<input-output: socket 15> "CWD kikoo-lol" 550 "Failed to change directory.\r")'.

and

Toggle snippet (24 lines)
# Importer: json
Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...
Backtrace:
7 (primitive-load "/home/simon/.cache/guix/inferiors/uefwax7zflbosucfo3nxhvvwwyvldkx447xk…")
In guix/ui.scm:
2118:12 6 (run-guix-command _ . _)
In guix/scripts/import.scm:
120:11 5 (guix-import . _)
In guix/scripts/import/json.scm:
91:11 4 (guix-import-json . _)
In ice-9/boot-9.scm:
1731:15 3 (with-exception-handler #<procedure 7f25ebaf6210 at ice-9/boot-9.scm:1815:7 (exn)> _ # _ …)
In guix/import/json.scm:
61:19 2 (_)
In ice-9/ports.scm:
440:11 1 (call-with-input-file "kikoo-lol" #<procedure 7f25ebad92c0 at ice-9/ports.scm:492:3 (p)> …)
In unknown file:
0 (open-file "kikoo-lol" "r" #:encoding #f #:guess-encoding #f)

ERROR: In procedure open-file:
In procedure open-file: No such file or directory: "kikoo-lol"


Then, for the same commit 23e2cd156f and the importers supporting the
--recursive option, the only one reporting correctly the error is the
’stackage’ importer:

Toggle snippet (91 lines)
for from in pypi hackage stackage elpa gem cran opam ;\
do echo "# Importer: $from" ;\
guix time-machine --commit=23e2cd156f -- import $from kikoo-lol -r ;\
done
# Importer: pypi
Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...
following redirection to `https://pypi.org/pypi/kikoo-lol/json/'...
Backtrace:
4 (primitive-load "/home/simon/.cache/guix/inferiors/uefwax7zflbosucfo3nxhvvwwyvldkx447xk…")
In guix/ui.scm:
2118:12 3 (run-guix-command _ . _)
In guix/scripts/import.scm:
120:11 2 (guix-import . _)
In guix/scripts/import/pypi.scm:
97:16 1 (guix-import-pypi . _)
In guix/import/utils.scm:
431:36 0 (recursive-import "kikoo-lol" #f #:repo->guix-package _ #:guix-name _)

guix/import/utils.scm:431:36: In procedure recursive-import:
Wrong number of values returned to continuation (expected 2)
# Importer: hackage
Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...
Backtrace:
4 (primitive-load "/home/simon/.cache/guix/inferiors/uefwax7zflbosucfo3nxhvvwwyvldkx447xk…")
In guix/ui.scm:
2118:12 3 (run-guix-command _ . _)
In guix/scripts/import.scm:
120:11 2 (guix-import . _)
In guix/scripts/import/hackage.scm:
132:26 1 (guix-import-hackage . _)
In guix/import/utils.scm:
431:36 0 (recursive-import "kikoo-lol" #f #:repo->guix-package _ #:guix-name _)

guix/import/utils.scm:431:36: In procedure recursive-import:
Wrong number of values returned to continuation (expected 2)
# Importer: stackage
Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...
guix import: error: kikoo-lol: Stackage package not found
# Importer: elpa
Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...
Backtrace:
4 (primitive-load "/home/simon/.cache/guix/inferiors/uefwax7zflbosucfo3nxhvvwwyvldkx447xk…")
In guix/ui.scm:
2118:12 3 (run-guix-command _ . _)
In guix/scripts/import.scm:
120:11 2 (guix-import . _)
In guix/scripts/import/elpa.scm:
103:16 1 (guix-import-elpa . _)
In guix/import/utils.scm:
431:36 0 (recursive-import "kikoo-lol" gnu #:repo->guix-package _ #:guix-name _)

guix/import/utils.scm:431:36: In procedure recursive-import:
Wrong number of values returned to continuation (expected 2)
# Importer: gem
Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...
#f

# Importer: cran
Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...
error: failed to retrieve package information from "https://cran.r-project.org/web/packages/kikoo-lol/DESCRIPTION": 404 ("Not Found")
Backtrace:
4 (primitive-load "/home/simon/.cache/guix/inferiors/uefwax7zflbosucfo3nxhvvwwyvldkx447xk…")
In guix/ui.scm:
2118:12 3 (run-guix-command _ . _)
In guix/scripts/import.scm:
120:11 2 (guix-import . _)
In srfi/srfi-1.scm:
586:17 1 (map1 (#f))
In guix/import/utils.scm:
258:2 0 (package->definition _)

guix/import/utils.scm:258:2: In procedure package->definition:
Throw to key `match-error' with args `("match" "no matching pattern" #f)'.
# Importer: opam
Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...
Package not found in opam repository: kikoo-lol
Backtrace:
4 (primitive-load "/home/simon/.cache/guix/inferiors/uefwax7zflbosucfo3nxhvvwwyvldkx447xk…")
In guix/ui.scm:
2118:12 3 (run-guix-command _ . _)
In guix/scripts/import.scm:
120:11 2 (guix-import . _)
In guix/scripts/import/opam.scm:
96:16 1 (guix-import-opam . _)
In guix/import/utils.scm:
431:36 0 (recursive-import "kikoo-lol" #f #:repo->guix-package _ #:guix-name _)

guix/import/utils.scm:431:36: In procedure recursive-import:
Wrong number of values returned to continuation (expected 2)

And now the commit bea3b17739 introduces instead this backtraces for
’opam’:

Toggle snippet (21 lines)
# Importer: opam
Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...
Backtrace:
6 (primitive-load "/home/simon/.cache/guix/inferiors/fbnvi5znqq6m3atsgadr35wm3anm7hwiouof…")
In guix/ui.scm:
2118:12 5 (run-guix-command _ . _)
In guix/scripts/import.scm:
120:11 4 (guix-import . _)
In guix/scripts/import/opam.scm:
96:16 3 (guix-import-opam . _)
In guix/import/utils.scm:
445:31 2 (recursive-import "kikoo-lol" #:repo->guix-package _ #:guix-name _ #:version _ #:repo _)
436:33 1 (lookup-node "kikoo-lol" #f)
In guix/import/opam.scm:
264:0 0 (opam->guix-package _ #:repository _ #:version _)

guix/import/opam.scm:264:0: In procedure opam->guix-package:
Unrecognized keyword: #:repo


Last and annoying, the commit bea3b17739 introduces the regression:

Toggle snippet (45 lines)
for ci in 23e2cd156f bea3b17739 ; do guix time-machine --commit=$ci -- import hackage process -r ; done
Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...

Starting download of /tmp/guix-file.WAQrHM
From https://hackage.haskell.org/package/process/process-1.6.10.0.tar.gz...
….10.0.tar.gz 72KiB 559KiB/s 00:00 [##################] 100.0%
(define-public ghc-process
(package
(name "ghc-process")
(version "1.6.10.0")
(source
(origin
(method url-fetch)
(uri (string-append
"https://hackage.haskell.org/package/process/process-"
version
".tar.gz"))
(sha256
(base32
"01c50qhrsvymbifa3lzyq6g4hmj6jl3awjp1jmbhdkmfdfaq3v16"))))
(build-system haskell-build-system)
(home-page
"http://hackage.haskell.org/package/process")
(synopsis "Process libraries")
(description
"This package contains libraries for dealing with system processes. . The typed-process package is a more recent take on a process API, which uses this package internally. It features better binary support, easier concurrency, and a more composable API. You can read more about it at <https://github.com/fpco/typed-process/#readme>.")
(license bsd-3)))

Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...
Backtrace:
4 (primitive-load "/home/simon/.cache/guix/inferiors/fbnvi5znqq6m3atsgadr35wm3anm7hwiouof…")
In guix/ui.scm:
2118:12 3 (run-guix-command _ . _)
In guix/scripts/import.scm:
120:11 2 (guix-import . _)
In guix/scripts/import/hackage.scm:
132:26 1 (guix-import-hackage . _)
In guix/import/utils.scm:
416:0 0 (recursive-import _ #:repo->guix-package _ #:guix-name _ #:version _ #:repo _)

guix/import/utils.scm:416:0: In procedure recursive-import:
Invalid keyword: #f


All the best,
simon
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send email to 44115@debbugs.gnu.org