(web …) modules pull in (gnutls) indirectly. Arrange to load them
lazily, thereby reducing I/O and allocations when GnuTLS is not needed
such as when running ‘guix describe’ or ‘guix shell’ on a cache hit.
* guix/download.scm: Autoload (web uri).
* guix/scripts/describe.scm: Likewise.
* guix/store.scm: Likewise.
(%default-substitute-urls): Remove ‘resolve-interface’ call and use
https URLs unconditionally.
Change-Id: Ide470c556a14866e8740966d25821df487a79859
* guix/scripts/system/reconfigure.scm (switch-system-program): Set
‘GUIX_NEW_SYSTEM’ to GENERATION rather than OS, for consistency with
what ‘boot-system’ does.
* gnu/tests/reconfigure.scm (run-switch-to-system-test)
["script activated the new generation"]: Adjust accordingly.
Change-Id: I57b693606a41b8c952df32bbdc2b9120c6dbfd6a
Public keys aren’t required for client connections, and this binding is
unused. The behavior of assuming a ".pub"-suffixed file exists in the same
directory as the secret key is undocumented and surprising.
* guix/scripts/offload.scm (open-ssh-session): Delete `public' binding.
Signed-off-by: Christopher Baines <mail@cbaines.net>
Change-Id: I9b532be2abe68dae0323e4ef6e1ceab1e5603359
* guix/scripts/system.scm (define-module): #:autoload `register-valid-path'
instead of `sqlite-register'.
(copy-item): Call it with the new name.
Change-Id: I24f71f822a5f400a47adee43f61184a4fbcb9741
Signed-off-by: Christopher Baines <mail@cbaines.net>
These calls happen inside of with-error-handling, so the effect should be the
same, but this opens up the possibility of using this code in a program that
doesn't want to exit when one of these error conditions is met.
Change-Id: I15d963615d85d419559fa0f4333fa4dc1dfbfd3b
* guix/scripts/substitute.scm (download-nar, process-substitution): Use raise
formatted-message rather than leave.
Change-Id: Idd0880206b69e3903e19e0536b87d65a52c200d5
I don't think the approach of using SIGALARM here for the timeout will work
well in all cases (e.g. when using Guile Fibers), so make it possible to avoid
this.
* guix/scripts/substitute.scm (download-nar): Pass the fetch timeout in as an
option.
Change-Id: I8cbe6cdfa10cdaa7d41974cbea56a95f5efecfe6
Instead, display the warning from process-substitution and
process-substitution/fallback in the relevant places.
I'm looking at this because I want to make the substitute code less tied to
the script and usable in the Guile guix-daemon.
* guix/scripts/substitute.scm (network-error?): Move warning to…
(process-substitution/fallback, process-substitution): here.
Change-Id: I082b482c0e6ec7e02a8d437ba22dcefca5c40787
The aim here is to improve the user experience. There's anecdotal evidence
that the network performance for bordeaux is better compared to ci at least
for some users, and I don't know of any issues with rate limiting or access
restriction for bordeaux compared to ci. It also has IPv6 support.
Additionally, bordeaux generally had more substitutes than ci, particularly
for aarch64-linux and armhf-linux. This change will offer a very slight
speedup for those substitutes that only bordeaux has.
Bordeaux has been a default substitute server for nearly 3 years now and I
think this change is overdue. I'm also hopeful that we'll be able to build on
the testing regarding mirrors for bordeaux, and that'll allow potentially
improving the hosting setup (through providing more redundancy) and further
improving substitute fetching for users who currently have issues with
substitute access.
* config-daemon.ac: Switch substitute urls order.
* doc/guix.texi: Ditto.
* etc/guix-install.sh: Ditto.
* gnu/installer/newt/network.scm (wait-service-online): Ditto.
* guix/store.scm (%default-substitute-urls): Ditto.
Change-Id: I4f6d93ae1fc8b03d80b47b18b5749a51f1fde17b
Signed-off-by: Christopher Baines <mail@cbaines.net>
This allows ‘guix substitute’ to gracefully handle errors like:
TLS error in procedure 'write_to_session_record_port': Error in the push function
instead of exiting (“`guix substitute' died unexpectedly”).
* guix/scripts/substitute.scm (download-nar)[try-fetch]: Catch
‘network-error?’ too.
Reported-by: Ada Stevenson <adanskana@gmail.com>
Change-Id: I91b92183b0165832645ee37d50c13445f9322525
Previously, the nar fallback would always fail on ‘--check’ build
because the output directory in that case is different from the store
file name. This change fixes that.
* guix/build/git.scm (git-fetch-with-fallback): Add #:item parameter and
pass it to ‘download-nar’.
* guix/scripts/perform-download.scm (perform-git-download): Pass #:item
to ‘git-fetch-with-fallback’.
Change-Id: I30fc948718e99574005150bba5215a51ef153c49
* guix/scripts/import/elpa.scm (guix-import-elpa): Unquote-splice the contents
of the package sexp so the matched package definition is returned unchanged.
Change-Id: Iaaa7e72390c73c6d6671811fe9ac284d599b44c6
Signed-off-by: Ricardo Wurmus <rekado@elephly.net>
* guix/build/git.scm (git-fetch-with-fallback): Add #:hash
and #:hash-algorithm. Try ‘swh-download-directory-by-nar-hash’ before
‘swh-download’ when #:hash is provided.
* guix/git-download.scm (git-fetch/in-band*): Pass #:hash
and #:hash-algorithm to ‘git-fetch-with-fallback’.
* guix/scripts/perform-download.scm (perform-git-download): Likewise.
Change-Id: Ic875a7022fd78c9fac32e92ad4f8ce4d81646ec5
Previously the command would crash when passed an invalid fingerprint on
the command line.
* guix/scripts/git/authenticate.scm (guix-git-authenticate)
[openpgp-fingerprint*]: New procedure.
Use it instead of ‘openpgp-fingerprint’.
Change-Id: I99e0549781382f36a684a84449b603e00b53778d
* guix/scripts/download.scm (git-download-to-store*): Add new variable.
(copy-recursively-without-dot-git): New variable.
(git-download-to-file): Add new variable.
(show-help): Add 'git', 'commit', 'branch' and 'recursive'options
help message.
(%default-options): Add default value for 'git-reference' and
'recursive' options.
(%options): Add 'git', 'commit', 'branch' and 'recursive' command
line options.
(guix-download) [hash]: Compute hash with 'file-hash*' instead of
'port-hash' from (gcrypt hash) module. This allows us to compute
hashes for directories.
* doc/guix.texi (Invoking guix-download): Add @item entries for
`git', `commit', `branch' and `recursive' options. Add a paragraph in
the introduction.
* tests/guix-download.sh: New tests. Move variables and trap definition
to the top of the file.
Change-Id: Ic2c428dca4cfcb0d4714ed361a4c46609339140a
Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Reviewed-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
The default value of #f led to ("..." . #f) being passed further down as an
entry point. That is not an issue for command line invocation, since in that
code path '() was already used as a default value, but it broke docker system
test with the following error:
building /gnu/store/dll8jj6h5pfgf6ya9skk1g1546smwbib-docker-pack.tar.gz.drv...
tar: Removing leading `/' from member names
Backtrace:
6 (primitive-load "/gnu/store/g8hqzccfvn4mkm41jqs65c27gs7?")
In ./guix/docker.scm:
268:6 5 (build-docker-image "/gnu/store/zi2f5dfdrhviinm6jxp3cj?" ?)
In ice-9/ports.scm:
433:17 4 (call-with-output-file _ _ #:binary _ #:encoding _)
476:4 3 (_ _)
In ./guix/docker.scm:
270:21 2 (_)
123:40 1 (config "1996ead589ab366473d935c4d5bd0c38b998f3b299847?" ?)
In unknown file:
0 (list->vector ("/gnu/store/1pvqd30qi1aigjdf7s7l8v7?" . #))
ERROR: In procedure list->vector:
In procedure vector: Wrong type argument in position 1: ("/gnu/store/1pvqd30qi1aigjdf7s7l8v7wpvrrhfkj-profile/bin/guile" . #f)
note: keeping build directory `/tmp/guix-build-docker-pack.tar.gz.drv-16'
builder for `/gnu/store/dll8jj6h5pfgf6ya9skk1g1546smwbib-docker-pack.tar.gz.drv' failed with exit code 1
build of /gnu/store/dll8jj6h5pfgf6ya9skk1g1546smwbib-docker-pack.tar.gz.drv failed
View build log at '/var/log/guix/drvs/dl/l8jj6h5pfgf6ya9skk1g1546smwbib-docker-pack.tar.gz.drv.gz'.
cannot build derivation `/gnu/store/dq9qk1ba0f07572m8ck3xws28x1b3rif-docker-test.drv': 1 dependencies couldn't be built
guix build: error: build of `/gnu/store/dq9qk1ba0f07572m8ck3xws28x1b3rif-docker-test.drv' failed
make: *** [Makefile:7044: check-system] Error 1
Breakage was introduced in 7d5168a2af.
* guix/scripts/pack.scm (docker-image)[entry-point-argument]: Default to '().
Change-Id: If5fc1f8bcb0981df11409636e71f2ca91b05612f
* doc/guix.texi (Invoking guix import): Mention '--allow-yanked'.
* guix/import/crate.scm (make-crate-sexp): Add yanked? argument. For
yanked packages, use the full version suffixed by "-yanked" for
generated variable names and add a comment and package property.
(crate->guix-package): Add allow-yanked? argument and if it is set to #t,
allow importing yanked crates if no other version matching the
requirements exists.
[find-package-version]: Packages previously marked as yanked are only
included if allow-yanked? is #t and then take the lowest priority.
[find-crate-version]: If allow-yanked? is #t, also consider yanked
versions with the lowest priority.
[dependency-name+version]: Rename to ...
[dependency-name+version+yanked] ...this. Honor allow-yanked? and choose
between an existing package and an upstream package. Exit with an error
message if no version fulfilling the requirement is found.
[version*]: Exit with an error message if the crate version is not found.
(cargo-recursive-import): Add allow-yanked? argument.
* guix/read-print.scm: Export <comment>.
* guix/scripts/import/crate.scm: Add "--allow-yanked".
* tests/crate.scm: Add test 'crate-recursive-import-only-yanked-available'.
[sort-map-dependencies]: Adjust accordingly.
[remove-yanked-info]: New variable.
Adjust test 'crate-recursive-import-honors-existing-packages'.
(test-bar-dependencies): Add yanked dev-dependencies.
(test-leaf-bob-crate): Add yanked versions.
(rust-leaf-bob-3.0.2-yanked): New variable.
Signed-off-by: Efraim Flashner <efraim@flashner.co.il>
Change-Id: I175d89b39774e6b57dcd1f05bf68718d23866bb7
If --recursive-dev-dependencies is specified, development dependencies
are also included for all recursively imported packages.
* doc/guix.texi (Invoking guix import): Mention --recursive-dev-dependencies.
* guix/import/crate.scm (crate-recursive-import): Add
recursive-dev-dependencies? argument.
* guix/scripts/import/crate.scm (show-help, guix-import-crate): Add
"--recursive-dev-dependencies".
* tests/crate.scm: Test both #f and #t for #:recursive-dev-dependencies?
in the 'cargo-recursive-import' test.
(test-root-dependencies): Add intermediate-c as dev-dependency.
(test-intermediate-c-crate, test-intermediate-c-dependencies): New
variables.
Signed-off-by: Efraim Flashner <efraim@flashner.co.il>
Change-Id: Iae89794681155d77f128733120e60f03bc297717
The goal is to make it easier to diagnose substitute
misconfiguration (where we’re passing a substitute URL whose
corresponding key is not authorized).
Suggested by Emmanuel Agullo.
* guix/scripts/weather.scm (check-narinfo-authorization): New procedure.
(report-server-coverage): Use it.
* doc/guix.texi (Invoking guix weather): Document it.
(Getting Substitutes from Other Servers): Add “Troubleshooting” frame.
Change-Id: I0a049c39eefb10d6a06634c8b16aa86902769791
* guix/scripts/challenge.scm (%default-options): Remove ‘substitute-urls’.
(guix-challenge): Call ‘substitute-urls’ when OPTS doesn’t have it. Warn
when ‘substitute-urls’ returns #f.
Change-Id: I49be0e89404c1889970a3430967fbb3498d35d99
Fixes a bug whereby ‘package->development-manifest’ would run with the
wrong system in mind, leading to errors like this:
$ guix shell -s i586-gnu -D shepherd --no-grafts
guix shell: error: package linux-libre-headers@5.15.49 does not support i586-gnu
* guix/scripts/environment.scm (options/resolve-packages): Define
‘system’ and pass it to ‘package->development-manifest’.’
* tests/guix-shell.sh: Test it.
Change-Id: I95c471c1918913ab80dec7d3ca64fe38583cce78
Fixes <https://issues.guix.gnu.org/67575>.
* guix/scripts/substitute.scm (process-substitution/fallback): Use
‘report-error’ instead of ‘leave’. Write status line to PORT.
* tests/substitute.scm ("substitute, narinfo is available but nar is
missing"): Adjust accordingly.
Change-Id: Ic7297dbd563c007111ec2167c8d52505a07d4822
Partially fixes <https://issues.guix.gnu.org/64858>.
Fixes a bug whereby ‘guix shell -f guix.scm’ would use the same cache
key as ‘guix shell’ in an empty directory (meaning: no packages
specified) and would ignore the mtime of ‘guix.scm’.
* guix/scripts/shell.scm (profile-cached-gc-root): In ‘load’ case,
recognize both the ‘package’ and ‘ad-hoc-package’ tags.
Co-authored-by: Ludovic Courtès <ludo@gnu.org>
Change-Id: Ice6d0ac43e1dc6bb335a17963364c2cc6bcd076d
Fixes a bug whereby ‘guix locate --clear’ would end with the “no files
to search for” error.
Fixes <https://issues.guix.gnu.org/66799>.
* guix/scripts/locate.scm (guix-locate): Do not emit “no files to search
for” error when 'clear? is set in OPTS.
* tests/guix-locate.sh: Test it.
Reported-by: Maciej Kalandyk <m.kalandyk@outlook.com>
Change-Id: Ib8fa125c18481d7f5408bd89df9503713527641d
Commit 79ec651a28 introduced a check to
error out when attempting to use ‘time-machine’ to travel to a commit
before ‘v1.0.0’.
This commit fixes a performance issue with the strategy used in
79ec651a28 (the repository was opened,
updated, and traversed a second time by ‘validate-guix-channel’) as well
as a user interface issue (“Updating channel” messages would be printed
too late).
This patch reimplements the check in terms of the existing #:validate-pull
mechanism, which is designed to avoid extra repository operations.
Fixes <https://issues.guix.gnu.org/65788>.
* guix/inferior.scm (cached-channel-instance): Change default value
of #:validate-channels. Remove call to VALIDATE-CHANNELS; pass it
as #:validate-pull to ‘latest-channel-instances’.
* guix/scripts/time-machine.scm (%reference-channels): New variable.
(validate-guix-channel): New procedure, written as a simplification of…
(guix-time-machine)[validate-guix-channel]: … this. Remove.
Pass #:reference-channels to ‘cached-channel-instance’.
Reported-by: Simon Tournier <zimon.toutoune@gmail.com>
Change-Id: I9b0ec61fba7354fe08b04a91f4bd32b72a35460c
Previously, ‘%graft?’ would be parameterized after ‘package-derivation’
had been called for ‘%guile-for-build’, which is too late.
* guix/scripts/environment.scm (guix-environment*)[with-store/maybe]:
Parameterize ‘%graft?’.
Remove ‘%graft?’ parameterization from body.
Change-Id: I65ef4a8c5f27e19a49196005871e5f7057fabaec