Subject: SWH fallback is never reached due to an uncaught exception

From: Björn Höfling <[email-masked]>
Date: Sat, 29 Dec 2018 16:47:45 +0100

git-download has a built-in option to download from Software Heritage
(SWH) as a fall-back, when a repository is unavailable. Unfortunately,
that code is never reached:

./pre-inst-env guix build guile-bash --no-substitutes --no-grafts -S

The following derivation will be built:
   /gnu/store/1y7jrh6szq3xlcissh4m963pvvygv3m4-guile-bash-0.1.6-0.1eabc56-checkout.drv
building /gnu/store/1y7jrh6szq3xlcissh4m963pvvygv3m4-guile-bash-0.1.6-0.1eabc56-checkout.drv...
environment variable `PATH' set to `/gnu/store/q09sy224qnxrp982z4xfaxi19721mjx8-gzip-1.9/bin:/gnu/store/ipx79bfj2mrc8npj7s3qi3zri11jfhaw-tar-1.30/bin'
Initialized empty Git repository in /gnu/store/7p7mkiqv9ah6x0x20qzpas44sdf7jqkl-guile-bash-0.1.6-0.1eabc56-checkout/.git/
fatal: repository 'https://anonscm.debian.org/cgit/users/kaction-guest/retired/dev.guile-bash.git/' not found
Failed to do a shallow fetch; retrying a full fetch...
fatal: repository 'https://anonscm.debian.org/cgit/users/kaction-guest/retired/dev.guile-bash.git/' not found
Backtrace:
           3 (primitive-load "/gnu/store/4qlm9ih5nhwj38jl46vdy3s37qj?")
In ice-9/eval.scm:
   293:34  2 (_ #<directory (guile-user) 5ce140>)
In ./guix/build/git.scm:
    50:10  1 (git-fetch "https://anonscm.debian.org/cgit/users/kact?" ?)
In ./guix/build/utils.scm:
    616:6  0 (invoke _ . _)

./guix/build/utils.scm:616:6: In procedure invoke:
Throw to key `srfi-34' with args `(#<condition &invoke-error [program: "/gnu/store/aqldm6f3963q8qgqxdzdsdhd7l036f85-git-minimal-2.20.1/bin/git" arguments: ("fetch" "origin") exit-status: 128 term-signal: #f stop-signal: #f] 5fb640>)'.
builder for `/gnu/store/1y7jrh6szq3xlcissh4m963pvvygv3m4-guile-bash-0.1.6-0.1eabc56-checkout.drv' failed with exit code 1
build of /gnu/store/1y7jrh6szq3xlcissh4m963pvvygv3m4-guile-bash-0.1.6-0.1eabc56-checkout.drv failed
View build log at '/var/log/guix/drvs/1y/7jrh6szq3xlcissh4m963pvvygv3m4-guile-bash-0.1.6-0.1eabc56-checkout.drv.bz2'.
guix build: error: build failed: build of `/gnu/store/1y7jrh6szq3xlcissh4m963pvvygv3m4-guile-bash-0.1.6-0.1eabc56-checkout.drv' failed

The code is in git-download.scm, line 133:

            (or (git-fetch (getenv "git url") (getenv "git commit")
                           #$output
                           #:recursive? recursive?
                           #:git-command (string-append #+git "/bin/git"))
                (download-nar #$output)

                ;; As a last resort, attempt to download from Software Heritage.
                ;; XXX: Currently recursive checkouts are not supported.
                (and (not recursive?)
                     (swh-download (getenv "git url") (getenv "git commit")
                                   #$output)))))))

If I change the order of the or and add the shw-download first, it
works.

Björn