Commit Graph

5793 Commits

Author SHA1 Message Date
Ludovic Courtès
a26006ff72
gexp: Keep 'lower-inputs' private.
It had been made public in 6b6298ae39 but
it's no longer needed since 779aa003fb.

* guix/gexp.scm (lower-inputs): Do not export.
2021-02-23 15:24:48 +01:00
Ludovic Courtès
4fa9d48fd4
gexp: 'gexp-inputs' returns both native and non-native inputs.
This avoids double traversal of references and extra bookkeeping,
thereby further reducing memory allocations.

* guix/gexp.scm (lower-gexp): Include only one call to 'lower-inputs'.
(gexp-inputs): Remove #:native? parameter.
[set-gexp-input-native?]: New procedure.
[add-reference-inputs]: Use it.
(gexp-native-inputs): Remove.
* tests/gexp.scm (gexp-native-inputs): Remove.
(gexp-input->tuple): Include 'gexp-input-native?'.
("let-system")
("let-system, nested")
("ungexp + ungexp-native")
("ungexp + ungexp-native, nested")
("ungexp + ungexp-native, nested, special mixture")
("input list")
("input list + ungexp-native")
("input list splicing")
("input list splicing + ungexp-native-splicing")
("gexp list splicing + ungexp-splicing"): Adjust accordingly.
2021-02-23 15:24:48 +01:00
Ludovic Courtès
fc6d6aee66
gexp: 'gexp-inputs' returns a list of <gexp-input> records.
This slightly reduces memory allocation.

* guix/gexp.scm (lower-inputs): Expect a list of <gexp-input> rather
than a list of tuples.
(lower-reference-graphs)[tuple->gexp-input]: New procedure.
Use it.
(gexp-inputs): Return a list of <gexp-input> rather than a list of
tuples.
* tests/gexp.scm (gexp-input->tuple): New procedure.
("one input package")
("one input package, dotted list")
("one input origin")
("one local file")
("one local file, symlink")
("one plain file")
("two input packages, one derivation, one file")
("file-append")
("file-append, output")
("file-append, nested")
("let-system")
("let-system, nested")
("ungexp + ungexp-native")
("ungexp + ungexp-native, nested")
("ungexp + ungexp-native, nested, special mixture")
("input list")
("input list + ungexp-native")
("input list splicing")
("input list splicing + ungexp-native-splicing")
("gexp list splicing + ungexp-splicing"): Adjust accordingly.
2021-02-23 15:24:48 +01:00
Ludovic Courtès
bde7929bd0
gexp: Micro-optimize sexp serialization.
* guix/gexp.scm (sexp->string): New procedure.
(gexp->derivation): Use it instead of 'object->string'.
2021-02-23 15:24:48 +01:00
Ludovic Courtès
70b33d8898
store: Object cache profiling shows the number of entries.
* guix/store.scm (record-cache-lookup!): Add 'size' variable; keep it
up-to-date and display it.
2021-02-23 15:24:47 +01:00
Ludovic Courtès
db45712a67
grafts: Inline 'grafting?' and 'set-grafting'.
As for 'current-target-system' & co., this makes sure we don't
needlessly allocate closures.

* guix/grafts.scm (grafting?, set-grafting): Inline.
2021-02-23 15:24:47 +01:00
Ludovic Courtès
11f11d7ecb
scripts: Don't trigger option hints for short options.
Previously, 'guix install foo -r bar' would crash with a backtrace
because NAME would be #\r (a character instead of a string).

* guix/scripts.scm (parse-command-line)[parse-options-from]: Call
'option-hint' only when NAME is a string.
2021-02-22 23:42:08 +01:00
Ludovic Courtès
e8fc373900
profiles: Fix typo in manifest comment.
* guix/build/profiles.scm (build-profile): Fix typo.
2021-02-22 23:42:08 +01:00
Ludovic Courtès
ce2ba3431a
describe: Fix typo in 'manifest-entry-with-provenance'.
* guix/describe.scm (manifest-entry-with-provenance): Fix first argument
to 'assq'.
2021-02-22 23:42:08 +01:00
Ludovic Courtès
66c9bc35ef
packages: 'package-field-location' preserves the original file name.
This fixes a regression introduced in
9a38bed2cf.

* guix/packages.scm (package-field-location): Do not shadow the 'file'
variable.
2021-02-22 23:42:08 +01:00
Christopher Baines
20c08a8a45
substitute: Rework connection error handling.
This is part of trying to reduce the interdependency of code within the
substitute module.

This commit addresses some of the error handling that was performed through
open-connection-for-uri/maybe. The new approach is to use
call-with-connection-error-handling, and wrap calls to http-multiple-get and
http-fetch with that procedure, which takes care of handling connection
errors.

I think this is even slightly more rigerous than the previous setup, because
this approach handles connection errors that occur when http-multiple-get
reconnects to a host.

* guix/scripts/substitute.scm (open-connection-for-uri/maybe): Transform in to
call-with-connection-error-handling.
(fetch-narinfos): Use call-with-connection-error-handling.
(process-query): Replace open-connection-for-uri/maybe with
open-connection-for-uri/cached.
(open-connection-for-uri/cached): Set a default timeout, matching the
behaviour in open-connection-for-uri/maybe.
(process-substitution): Use call-with-connection-error-handling.
2021-02-22 20:43:12 +00:00
Christopher Baines
187e970968
substitute: Remove fetch-narinfos use open-connection-for-uri/maybe.
At least by default.  Instead, make the open-connection procedure a parameter,
and make the default guix:open-connection-for-uri.  Do so similarly for
lookup-narinfos and lookup-narinfos/diverse which work towards calling
fetch-narinfos.

This means this code can be moved to a different module, without having
use/move the connection caching code.

* guix/scripts/substitute.scm (fetch-narinfos): Add #:open-connection
argument, and call http-multiple-get with it.
(lookup-narinfos) Add #:open-connection argument, and call fetch-narinfos with
it.
(lookup-narinfos/diverse): Add #:open-connection argument, and call
lookup-narinfos with it.
(process-query): Call lookup-narinfos/diverse with #:open-connection
open-connection-for-uri/maybe.
2021-02-22 20:43:12 +00:00
Christopher Baines
8116cc6673
substitute: Inline fetch in to process-substitutes.
As it's only called in one place, and this should make the code easier to
read.

* guix/scripts/substitute.scm (fetch): Move procedure inside…
(process-substitution): …here.
2021-02-22 20:43:11 +00:00
Christopher Baines
b9d058e3f7
substitute: Remove redundant fetch arguments.
It's just called in one place, with hardcoded argument values, so just inline
them.

* guix/scripts/substitute.scm (fetch): Remove arguments that don't vary, copy
the values from the call site in process-substitution.
(process-substitution): Remove unnecessary argument values from fetch call.
2021-02-22 20:43:11 +00:00
Christopher Baines
7c85877fdf
substitute: Remove now redundant connection caching helpers.
Failures now should be handled where they occur, and if there's a problem
that's symptomatic of an issue with the connection, the port should be closed.

* guix/scripts/substitute.scm (call-with-cached-connection): Remove procedure.
(with-cached-connection): Remove syntax rule.
2021-02-22 20:43:11 +00:00
Christopher Baines
f50f5751ff
substitute: Change connection cache handling in process-substitution.
Just pass open-connection-for-uri/maybe to http-fetch, this removes the need
for with-cached-connection and passing the port in.

* guix/scripts/substitute.scm (fetch): Don't take a port as an argument, and
pass open-connection-for-uri/maybe to http-fetch.
(process-substitution): Don't call fetch with with-cached-connection.
2021-02-22 20:43:11 +00:00
Christopher Baines
05f38ca8dc
http-client: Accept #:open-connection in http-fetch.
So that an alternative procedure can be passed in, perhaps to perform
connection caching.

* guix/http-client.scm (http-fetch): Add an #:open-connection keyword
argument.
2021-02-22 20:43:10 +00:00
Christopher Baines
7b812f7c84
substitute: Stop using call-with-cached-connection in fetch-narinfos.
Instead, just pass open-connection-for-uri/maybe to http-multiple-get. This
code should be functionaly similar to the previous code. The eventual aim of
this is to make the connection caching not mandatory in fetch-narinfos.

* guix/scripts/substitute.scm (fetch-narinfos): Remove use of
call-with-cached-connection.
2021-02-22 20:43:10 +00:00
Christopher Baines
f50b501a74
substitute: open-connection-for-uri/maybe add #:verify-certificate?.
As this is used by http-fetch and http-multiple-get when they call the
specified open connection procedure.

* guix/scripts/substitute.scm (open-connection-for-uri/maybe): Support
 #:verify-certificate?.
2021-02-22 20:43:10 +00:00
Christopher Baines
205833b72c
http-client: Add error handling to http-multiple-get.
Making sure to close the port if it looks to be unusable. This closing of the
port will allow for caching connections, without caching broken connections,
as the cache can avoid handing out closed ports.

* guix/http-client.scm (http-multiple-get): Try to catch exceptions that
happen if the port is unusable, this is a adaptation of code within the (guix
scripts substitute) module.
2021-02-22 20:43:10 +00:00
Christopher Baines
e2e853ddb0
guix: Move http-multiple-get to (guix http-client).
From (guix scripts substitute). This will make it easier to reuse this code.

* guix/scripts/substitute.scm (http-multiple-get): Remove, and move to…
* guix/http-client.scm (http-multiple-get): …here.
2021-02-22 20:43:09 +00:00
Christopher Baines
87734503a4
substitute: Remove redundant let block from fetch.
* guix/scripts/substitute.scm (fetch): Remove redundant let block.
2021-02-22 20:43:09 +00:00
Christopher Baines
08acee2f98
substitute: Remove connection handling from fetch.
http-fetch does this, so just use that code instead.

* guix/scripts/substitute.scm (fetch): Remove connection handling when the
port is closed.
2021-02-22 20:43:09 +00:00
Christopher Baines
fbd61b5d3d
substitute: Remove buffer handling from fetch.
http-fetch does this, so just set the right option.

* guix/scripts/substitute.scm (fetch): Remove buffering code, and pass
 #:buffered? to http-fetch.
2021-02-22 20:43:09 +00:00
Ludovic Courtès
9a38bed2cf
packages: 'package-field-location' handles 'search-path' returning #f.
Fixes <https://bugs.gnu.org/46390>.
Reported by zimoun <zimon.toutoune@gmail.com>.

This is similar to the fix in d10474c38d.

* guix/packages.scm (package-field-location): Handle FILE not in %LOAD-PATH.
* tests/guix-lint.sh: Add test.
2021-02-22 12:07:45 +01:00
Brice Waegeneire
8a452e156e
ui: Fix typo in description.
* guix/ui.scm (switch-to-generation*): Fix typo in description.
2021-02-19 13:35:01 +01:00
Mathieu Othacehe
6e8cdf1d26
scripts: system: Accept <image> records as input.
* guix/scripts/system.scm (system-derivation-for-action): Replace "os"
argument by "image". Remove "image-size", "image-type", "label" and
"volatile-root?"  arguments.
(perform-action): Ditto.
(process-action): Construct the <image> record and pass it to "perform-action"
procedure.
* tests/guix-system.sh: Adapt accordingly.
* gnu/system/images/hurd.scm: Return the default image.
* gnu/system/images/novena.scm: Ditto.
* gnu/system/images/pine64.scm: Ditto.
* gnu/system/images/pinebook-pro.scm Ditto.
2021-02-17 10:57:02 +01:00
Mathieu Othacehe
ee2a5da80a
scripts: system: Remove 'vm-image' command.
Remove the 'vm-image' command that has been superseded by the 'image'
command.

* gnu/system/vm.scm (system-qemu-image): Remove it.
* guix/scripts/system.scm (system-derivation-for-action): Mark 'vm-image'
command as deprecated and use the image API to produce the VM image.
(perform-action, show-help): Adapt accordingly.
* tests/guix-system.sh: Ditto.
* doc/guix.texi (Invoking guix system,
Running Guix in a VM): Ditto.
* etc/completion/fish/guix.fish: Ditto.
* etc/completion/zsh/_guix: Ditto.
2021-02-17 10:52:28 +01:00
宋文武
858898e348
ftp-client: Before 'PASV', try 'EPSV' first for IPv6.
This fixes <https://bugs.gnu.org/46481>.

* guix/ftp-client.scm (ftp-epsv, ftp-passive): New procedures.
(ftp-list, ftp-retr): Replace call to 'ftp-pasv' with 'ftp-passive'.
2021-02-15 08:38:00 +08:00
Nicolas Goaziou
ab512c2104
import: crate: Use repository when home-page is unavailable
* guix/import/crate.scm (make-crate-sexp): Always use home-page, which is
properly set up by the caller.
(crate->guix-package): Make sure to use the repository when home-page is null.
2021-02-12 22:47:09 +01:00
宋文武
5207c5eb55
pull: Create the "${XDG_CONFIG_HOME}/guix" directory when needed.
This fixes <https://bugs.gnu.org/46269>.

* guix/scripts/pull.scm (ensure-default-profile): Add a 'mkdir-p' call before
'symlink'.
2021-02-12 20:54:33 +08:00
Lars-Dominik Braun
a643deac2d
environment: Allow starting from existing profile.
* guix/scripts/environment.scm (%options): Add -p/--profile switch.
(show-help): Document new switch.
(guix-environment): Handle new 'profile switch.

Signed-off-by: 宋文武 <iyzsong@member.fsf.org>
2021-02-11 17:59:07 +08:00
Ludovic Courtès
18a4882e30
docker: Pass '--hard-dereference' to 'tar' to ensure reproducible builds.
Reported by zimoun at
<https://lists.gnu.org/archive/html/guix-devel/2021-02/msg00053.html>.

* guix/docker.scm (%tar-determinism-options): Add '--hard-dereference'.

Co-authored-by: zimoun <zimon.toutoune@gmail.com>
2021-02-08 23:50:35 +01:00
Leo Prikler
e1bdab4f0f
build-system: Add renpy-build-system.
* guix/build/renpy-build-system.scm: New file.
* guix/build-system/renpy.scm: New file.
* Makefile.am (MODULES): Add them here.
* doc/guix.texi (Build Systems): Document renpy-build-system.
2021-02-07 15:17:55 +01:00
Ludovic Courtès
fada92bb80
guix describe: 'display-profile-content' checks the right generation.
Fixes a regression introduced in
316fc2acbb, whereby 'guix pull -l' would
always display channel information corresponding to the latest profile
generation.

Reported by Vagrant Cascadian.

* guix/scripts/describe.scm (profile-generation-channels): New
procedure.
(display-profile-content): Change default value of 'channels'.
2021-02-05 23:15:36 +01:00
Ludovic Courtès
29009fdb2d
channels: Consider the current channel commit as authentic.
Fixes <https://bugs.gnu.org/45895>.

When the ~/.cache/guix/authentication is empty, this change allows
authentication to start at the current commit, as shown by 'guix
describe', instead of starting from the introductory commit, which would
take more and more time (there's currently 18K commits per year).

* guix/git-authenticate.scm (authenticate-repository): Add #:authentic-commits.
[authenticated-commits]: Append it.
* guix/channels.scm (authenticate-channel)[authentic-commits]: New
variable.  Pass it to 'authenticate-repository'.
2021-02-04 09:23:39 +01:00
Ludovic Courtès
55daad123e
build: Add '--with-channel-commit' and related configure flags.
Partially fixes <https://bugs.gnu.org/45896>.

* m4/guix.m4 (GUIX_CHANNEL_METADATA): New macro.
* configure.ac: Use it.
* guix/config.scm.in (%channel-metadata): Adjust accordingly.
2021-02-04 09:23:39 +01:00
Ludovic Courtès
316fc2acbb
channels: Record 'guix' channel metadata in (guix config).
Partially fixes <https://bugs.gnu.org/45896>.

* guix/config.scm.in (%channel-metadata): New variable.
* guix/describe.scm (channel-metadata): Use it.
(current-channels): New procedure.
(current-profile-entries): Clarify docstring.
* guix/self.scm (compiled-guix): Add #:channel-metadata and pass it to
'make-config.scm'.
(make-config.scm): Add #:channel-metadata and define '%channel-metadata'
in the generated file.
(guix-derivation): Add #:channel-metadata and pass it to 'compiled-guix'.
* guix/channels.scm (build-from-source): Replace 'name', 'source', and
'commit' parameters with 'instance'.  Pass #:channel-metadata to BUILD.
(build-channel-instance): Adjust accordingly.
* build-aux/build-self.scm (build-program): Add #:channel-metadata
and pass it to 'guix-derivation'.
(build): Add #:channel-metadata and pass it to 'build-program'.
* guix/scripts/describe.scm (display-profile-info): Add optional
'channels' parameter.  Pass it to 'display-profile-content'.
(display-profile-content): Add optional 'channels' parameter and honor
it.  Iterate on CHANNELS rather than on the manifest entries of
PROFILE.
(guix-describe): When PROFILE is #f, call 'current-channels' and pass it
to 'display-profile-info', unless it returns the empty list.
2021-02-04 09:23:39 +01:00
Ludovic Courtès
814ee99da8
store: 'store-path-hash-part' really returns false for invalid file names.
The "store-path-hash-part #f", due to a SRFI-64 bug, was marked as
successful even though 'store-path-hash-part' was throwing an exception.

* guix/store.scm (store-path-hash-part): Really return #f.
2021-02-04 09:23:38 +01:00
zimoun
f0a1a55c66
ui: Add hint for command typo.
* guix/ui.scm (command-hint): New variable
(run-guix-command): Use it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-02-03 12:41:29 +01:00
zimoun
0df4d5aa04
guix: scripts: Add hint for option typo.
* guix/scripts.scm (option-hint): New procedure.
(parse-command-line): Add 'option-hint'.

Co-authored-by: Ludovic Courtès <ludo@gnu.org>
2021-02-03 12:41:28 +01:00
zimoun
9505b54a4f
utils: Add string distance.
* guix/utils.scm (string-distance): New procedure.
(string-closest): New procedure.
* tests/utils.scm ("string-distance", "string-closest"): New tests.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-02-03 12:41:28 +01:00
Christopher Baines
2d518f7eb5
guix: narinfo: Export narinfo-contents.
As this is useful if you want to work with narinfo signatures outside of Guix,
in the Guix Data Service for example.

* guix/narinfo.scm: Export narinfo-contents.
2021-02-02 19:29:52 +00:00
Maxim Cournoyer
889f425b35
import: gnu: Fix the detection of non-GNU packages.
* guix/import/gnu.scm (gnu->guix-package): Move the 'find-package' call before
the 'latest-release' call, which would fail when the package did not have an
entry on the FTP server.
2021-02-02 13:48:35 -05:00
Ludovic Courtès
aedbc5ff32
guix package: Add '--export-channels'.
* guix/channels.scm (sexp->channel): Export.
* guix/describe.scm: Use (guix channels).
(manifest-entry-provenance): New procedure.
* guix/scripts/package.scm (channel=?, export-channels): New
procedures.
(show-help, %options): Add '--export-channels'.
(process-query): Honor it.
* build-aux/build-self.scm (build-program)[select?]: Exclude (guix
channels) to account for the (guix describe) change above.
* doc/guix.texi (Invoking guix package): Document it.
2021-02-01 17:32:35 +01:00
Ludovic Courtès
60d72f5364
channels: Add 'channel->code'.
* guix/channels.scm (channel->code): New procedure, taken from...
* guix/scripts/describe.scm (channel->sexp): ... here.
Adjust callers accordingly.
2021-02-01 17:32:35 +01:00
Ludovic Courtès
1b88b7bad2
guix describe: Use 'manifest-entry-channel'.
* guix/channels.scm (manifest-entry-channel): Export.
* guix/scripts/describe.scm (display-profile-content): Use it.
2021-02-01 17:32:35 +01:00
Ludovic Courtès
a47f16a874
channels: Add the channel name to channel sexps.
* guix/channels.scm (channel-instance->sexp): Add 'name'.
(sexp->channel): Extract the name from SEXP, using the optional argument
as a fallback.
2021-02-01 17:32:35 +01:00
Ludovic Courtès
9272cc700e
channels: Factorize 'manifest-entry-channel' and channel serialization.
* guix/channels.scm (sexp->channel, manifest-entry-channel): New
procedures.
(profile-channels): Replace lambda by 'manifest-entry-channel'.
(channel-instance->sexp): New procedure.
(channel-instances->manifest)[instance->entry]: Use
'channel-instance->sexp' instead of inline code.
2021-02-01 17:32:35 +01:00
Ludovic Courtès
9fd7b050e2
guix package: Add '--export-manifest'.
* guix/scripts/package.scm (export-manifest): New procedure.
(show-help, %options): Add '--export-manifest'.
(process-query): Honor it.
* guix/build/profiles.scm (build-profile): Mention it.
* tests/guix-package.sh: Test it.
* doc/guix.texi (Invoking guix package): Document it.
2021-02-01 17:32:35 +01:00
Ludovic Courtès
579506e272
utils: Add 'version-unique-prefix'.
* guix/utils.scm (version-unique-prefix): New procedure.
* tests/utils.scm ("version-unique-prefix"): New test.
2021-02-01 17:32:34 +01:00
Ludovic Courtès
b41e21488f
profiles: Add 'manifest->code'.
* guix/profiles.scm (manifest->code): New procedure.
* tests/profiles.scm ("manifest->code, simple")
("manifest->code, simple, versions")
("manifest->code, transformations"): New tests.
2021-02-01 17:32:31 +01:00
zimoun
60947257ae
scripts: import: json: Fix error handling.
Fixes partially <https://bugs.gnu.org/44115>.

* guix/scripts/import/json.scm (guix-import-json): Handle error.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-01-31 21:49:59 +01:00
zimoun
460e7d8bc9
import: gnu: Mention package name upon failure.
* guix/import/gnu.scm (gnu->guix-package): Use 'formatted-message' and
mention the package name in error messages.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-01-31 21:49:59 +01:00
zimoun
be84fc600e
gnu-maintenance: Fix error handling.
Fixes partially <https://bugs.gnu.org/44115>.

* guix/gnu-maintenance.scm (latest-release): Handle 'ftp-error'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-01-31 21:49:58 +01:00
Ludovic Courtès
13a7d2a538
database: Validate #:nar-size and #:time when registering store items.
* guix/store/database.scm (assert-integer): New procedure.
(update-or-insert): Use it to validate NAR-SIZE and TIME.
* tests/store-database.scm ("sqlite-register with incorrect size"): New
test.
2021-01-31 21:49:58 +01:00
Ludovic Courtès
9c4869fe9c
database: Remove workarounds unnecessary with guile-sqlite3 0.1.2.
* guix/store/database.scm (sqlite-exec, sqlite-finalize): Remove.
2021-01-31 21:49:58 +01:00
Ludovic Courtès
246c0c60da
ci: Add missing imports.
This is a followup to 041a9466ea.

* guix/ci.scm: Add missing imports.
* guix/channels.scm: Remove (guix ci) import.
2021-01-31 21:49:58 +01:00
Mathieu Othacehe
041a9466ea
guix: channels: Introduce "channel-with-substitutes-available".
* guix/channels.scm (find-latest-commit-with-substitutes,
channel-with-substitutes-available): New procedures.
* guix/scripts/pull.scm (guix-pull): Move "channel-list" call inside the
%current-system parameter scope.
* doc/guix.texi (Channels with substitutes): New section.
2021-01-31 18:36:42 +01:00
Ludovic Courtès
ede4a81947
guix system: Adjust 'upgrade-shepherd-services' to shepherd service change.
Fixes a regression introduced in 95f72dcd7a.

* guix/scripts/system/reconfigure.scm (upgrade-shepherd-services)[target-services]:
Add call to 'shepherd-configuration-services'.
2021-01-30 18:23:52 +01:00
Maxime Devos
95f72dcd7a
services: shepherd: Allow custom 'shepherd' package.
* gnu/services/shepherd.scm (<shepherd-configuration>): New record.
(shepherd-boot-gexp, shepherd-root-service-type): Use it.
(scm->go, shepherd-configuration-file): Allow passing custom
shepherd package.
* gnu/system.scm (operating-system-shepherd-service-names): Use the new
record.
* guix/scripts/system.scm (export-shepherd-graph): Adjust accordingly.
* doc/guix.texi (Shepherd Services). Document it.

Co-authored-by: Ludovic Courtès <ludo@gnu.org>
2021-01-30 15:36:57 +01:00
nixo
ba093a6d27
build-system/julia: Don't rely on file name to set module name.
* guix/build/julia-build-system.scm (project.toml->name): New procedure.
  (precompile, check, julia-build): Accept new key argument #:julia-package-name.
* guix/build-system/julia.scm (julia-build): ... add it.
* doc/guix.texi (julia-build-system): Update julia-package-name accordingly.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-01-30 15:36:56 +01:00
nixo
a23b384f3f
build-system/julia: Enable tests.
* guix/build-system/julia.scm (julia-build): Set tests? default to #t.
* guix/build/julia-build-system.scm (check): Respect tests? and fix julia
  invocation.
  (%standard-phases): Add check phase after install.
* doc/guix.texi (julia-build-system): Update accordingly.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-01-30 15:36:56 +01:00
Ludovic Courtès
7cfd789150
inferior: Speed up 'cached-channel-instance' for cache hits.
That way a command like:

  guix time-machine --commit=5aeee07cc9 -- describe

goes from 3.4s to 0.5s on a cache hit, even slightly less when passing
the full commit ID.

* guix/inferior.scm (channel-full-commit): New procedure.
(cached-channel-instance): Remove 'instances' top-level variable.  Add
'commits' and use it for 'key'.  Move 'latest-channel-instances' call to
the cache miss case.
2021-01-29 12:09:11 +01:00
zimoun
95852b305b
ui: Look up extensions before built-in commands.
* guix/ui.scm (run-guix-command): Modify order so that extensions are allowed
to override default commands.

Co-authored-by: Ricardo Wurmus <rekado@elephly.net>
2021-01-28 15:07:55 +01:00
Ricardo Wurmus
446c711308
guix: Add Open Software License 2.1.
* guix/licenses.scm (osl2.1): New variable.
2021-01-28 15:07:55 +01:00
Ricardo Wurmus
09ab0d42b0
guix: Fix typo.
* guix/inferior.scm (inferior-available-packages): Remove extra word in
docstring.
2021-01-28 15:07:52 +01:00
Ludovic Courtès
0f20b3fa20
inferior: Memoize entries in 'inferior-package->manifest-entry'.
Fixes a performance issue as reported by Ricardo Wurmus
in <https://bugs.gnu.org/46100>.

* guix/inferior.scm (inferior-package->manifest-entry): Remove #:parent parameter.
[cache]: New variable.
[memoized]: New macro.
[loop]: New procedure.
2021-01-27 23:03:06 +01:00
Ludovic Courtès
7df3ab0f0d
store: Add 'find-roots' RPC.
* guix/serialization.scm (read-string-pairs): New procedure.
* guix/store.scm (read-arg): Add support for 'string-pairs'.
(find-roots): New procedure.
* tests/store.scm ("add-indirect-root and find-roots"): New test.
2021-01-22 08:36:03 +01:00
Ludovic Courtès
d4a562ba7a
Revert "substitute: Remove extra 'newline' call."
This reverts commit d5a1b0e86f.

This change turned out to be misguided; it would lead to "substitute:"
lines being printed on the client side, without anything beyond the
colon sign.
2021-01-21 00:14:38 +01:00
Ludovic Courtès
98d3abe744
repl: Fix exception handling for interpreted code.
The 'stack' variable could be #f when code is interpreted, which in
practice happens when running in "legacy" mode--i.e., when
'open-inferior' invokes "guile" instead of "guix repl".

* guix/repl.scm (send-repl-response)[handle-exception]: Check whether
STACK is true before passing it to 'stack->frames'.
* tests/inferior.scm ("&inferior-exception, legacy mode"): New test.
2021-01-21 00:14:38 +01:00
Ludovic Courtès
3d43b7aef3
import, swh: Adjust to Guile-JSON 4.5.x unspecified value handling.
* guix/import/cpan.scm (<cpan-release>)[home-page]: Add 'unspecified?'
case.
* guix/import/gem.scm (<gem>)[licenses]: Likewise.
(json->gem-dependency-list): Likewise.
* guix/swh.scm (<directory-entry>)[checksums]: Likewise.
2021-01-21 00:14:38 +01:00
Tobias Geerinckx-Rice
166ccaefe8
archive: Note service type in ACL hint.
* guix/scripts/archive.scm (authorize-key): Mention guix-service-type.
2021-01-20 18:49:29 +01:00
Ricardo Wurmus
e8a968f89d
import/cran: Add more invalid package names to ignore.
* guix/import/cran.scm (invalid-packages): Add more names.
2021-01-20 17:18:59 +01:00
Ludovic Courtès
9ab817b2a4
transformations: Add '--with-latest'.
* guix/upstream.scm (upstream-source-compiler): New procedure.
(%updaters): Set! it.
* guix/transformations.scm (transform-package-latest): New procedure.
(%transformations): Add 'with-latest'.
(%transformation-options, show-transformation-options-help/detailed):
Add '--with-latest'.
* tests/transformations.scm ("options->transformation, with-latest"):
New test.
* doc/guix.texi (Package Transformation Options): Document it.
2021-01-19 17:45:39 +01:00
JOULAUD François
4d79f072cc
environment: Fix '--root' option with relative file name.
The path normalization of `--root` option of `guix environment` was
buggy as it appended full argument after normalized directory. This
patch fixes it.

* guix/scripts/environment.scm (register-gc-root): Fix gc-root path
normalization.
* tests/guix-environment.sh: Add test.

Co-authored-by: Ludovic Courtès <ludo@gnu.org>
2021-01-19 17:45:38 +01:00
Ludovic Courtès
f97ee77418
modules: Recognize #:re-export-and-replace.
* guix/modules.scm (extract-dependencies): Recognize
 #:re-export-and-replace, which was introduced in Guile 3.0.
2021-01-19 17:45:38 +01:00
Mathieu Othacehe
e74baa1245
system: Rename 'disk-image' command 'image'.
* guix/scripts/system.scm (system-derivation-for-action): Rename 'disk-image'
command 'image'. Warn when using the now deprecated 'disk-image' command.
(show-help): Adapt accordingly.
(guix-system): Ditto.
* tests/guix-system.sh: Ditto.
* gnu/system/examples/bare-hurd.tmpl: Ditto.
* doc/guix.texi (Building the Installation Image,
Building the Installation Image for ARM Boards,
Invoking guix pack,
Invoking guix system): Adapt documentation.
2021-01-19 17:16:56 +01:00
Mathieu Othacehe
2f497d94e7
image: Rename "raw" image-type to "efi-raw".
* gnu/system/image.scm (raw-image-type): Rename to "efi-raw-image-type".
* guix/scripts/system.scm (%default-options): Adapt accordingly.
* doc/guix.texi: Ditto.

Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
2021-01-17 11:04:25 +01:00
Christopher Baines
681af17460
guix: Move narinfo code from substitute script to module.
This separation between the code for dealing with narinfos from the code doing
that for a purpose should make things clearer, and better support components
other that the substitute script in using this code.

This is just moving the code around, no code should have been significantly
changed.

* guix/scripts/substitute.scm (<narinfo>): Move record type to (guix narinfo).
(fields->alist, narinfo-hash-algorithm+value, narinfo-hash->sha256,
narinfo-signature->canonical-sexp, narinfo-maker, read-narinfo,
narinfo-sha256, valid-narinfo?, write-narinfo, narinfo->string,
string->narinfo, equivalent-narinfo?, supported-compression?,
compresses-better?, narinfo-best-uri): Move procedures to (guix narinfo).
(%compression-methods): Move variable to (guix narinfo).
* guix/narinfo.scm: New file.
* Makefile.am (MODULES): Add it.
* po/guix/POTFILES.in: Add 'guix/narinfo.scm'.
2021-01-16 11:51:03 +00:00
Christopher Baines
35e0c0cf1d
substitute: Untangle skipping authentication from valid-narinfo?.
Rather than having valid-narinfo? evaluate to #t if
%allow-unauthenticated-substitutes? is set to #t, just use (const #t) for
valid-narinfo? when %allow-unauthenticated-substitutes? is set to #t.  This
will allow moving valid-narinfo? in to a (guix substitutes) module.

* guix/scripts/substitute.scm (process-query, process-substitution): Change
the authorized? argument to lookup-narinfo and lookup-narinfos/diverse based
on %allow-unauthenticated-substitutes?.
(valid-narinfo?): Remove use of %allow-unauthenticated-substitutes?.
2021-01-16 11:49:36 +00:00
Ludovic Courtès
03655f1e41
self: Add dependency on guile-zstd.
* guix/self.scm (specification->package): Add "guile-zstd".
(compiled-guix)[guile-zstd]: New variable.
[dependencies]: Add it.
2021-01-14 09:12:24 +01:00
Ludovic Courtès
016299d859
substitute: Add zstd support.
* guix/scripts/substitute.scm (%compression-methods): Add zstd.
(compresses-better?): "lzip" always wins.
2021-01-13 22:24:19 +01:00
Ludovic Courtès
d288a4de7d
publish: Add support for zstd compression.
* guix/scripts/publish.scm (compress-nar)[write-compressed-file]: New
procedure.
Use it for 'gzip' and 'lzip'.  Add 'zstd.
(nar-response-port, string->compression-type): Add case for 'zstd'.
* tests/publish.scm (zstd-supported?): New procedure.
("/nar/zstd/*"): New test.
* doc/guix.texi (Invoking guix publish): Document zstd compression.
(Base Services): Add cross-reference to the above node.
2021-01-13 22:24:19 +01:00
Ludovic Courtès
db0cecdf6b
utils: Support zstd compression via Guile-zstd.
* guix/utils.scm (lzip-port): Return a single value.
(zstd-port): New procedure.
(decompressed-port, compressed-output-port): Add 'zstd' case.
* tests/utils.scm (test-compression/decompression): Test 'zstd' when
the (zstd) module is available.
2021-01-13 22:24:19 +01:00
Ludovic Courtès
0d04658710
utils: Remove 'compressed-output-port'.
This procedure was unused except in one test.

* guix/utils.scm (compressed-port): Remove.
* tests/utils.scm (test-compression/decompression): Rewrite to use
'compressed-output-port' instead.
2021-01-13 22:24:19 +01:00
Ludovic Courtès
d5a1b0e86f
substitute: Remove extra 'newline' call.
This led to extra "substitute:" lines since commit
79c6614f58 or thereabouts.

* guix/scripts/substitute.scm (fetch-narinfos): Remove extra 'newline'
call, which can be traced back to
d3a652037e (2015).
2021-01-13 16:26:58 +01:00
Ludovic Courtès
87b0001325
git: Periodically delete least-recently-used cached checkouts.
This ensures ~/.cache/guix/checkouts is periodically cleaned up.

* guix/git.scm (cached-checkout-expiration)
(%checkout-cache-cleanup-period): New variables.
(delete-checkout): New procedure.
(update-cached-checkout)[cache-entries]: New procedure.
Add call to 'maybe-remove-expired-cache-entries'.
* guix/cache.scm (file-expiration-time): Add optional 'timestamp'
parameter and honor it.
2021-01-13 16:26:58 +01:00
Maxim Cournoyer
8152fd1af5
packages: Fix 'base32' used before definition warning.
Before this change, compiling the module would emit the following message:
"guix/packages.scm:213:25: warning: macro `base32' used before definition".

* guix/packages.scm (define-compile-time-decoder)
(base32, base64): Move definitions to the top of the module.
2021-01-11 08:15:08 -05:00
Maxim Cournoyer
3049097ac2
import: texlive: Produce a partial package definition rather than crashing.
This is a small improvement awaiting a definitive fix for
<https://issues.guix.gnu.org/45656>.

* guix/import/texlive.scm (sxml->package): Produce a warning when the SVN
checkout failed.  Rather than crashing on the unexpected #f value, return a
partial package definition with the source field set to #f.
2021-01-10 23:30:30 -05:00
Leo Prikler
2dba37e27a
Revert "gnu: nmap: Update license."
This reverts commit 2323a7120a.
The new license has been deemed non-free by Fedora [1] and there has not yet
been a statement by the FSF claiming otherwise.  See also [2].

[1] https://github.com/nmap/nmap/issues/2199
[2] https://lists.gnu.org/archive/html/guix-devel/2020-10/msg00227.html
2021-01-10 17:43:31 +01:00
Simon Tournier
a0f019b81f
ui: Fix order of match clauses.
Fixes <https://bugs.gnu.org/45709>.

This is a follow-up to commit cf289d7cfa.

* guix/ui.scm (run-guix-command): Match for #false first.

Signed-off-by: Ricardo Wurmus <rekado@elephly.net>
2021-01-07 18:10:58 +01:00
Ludovic Courtès
069bb95ab2
upstream: Make the 'updaters' parameter optional.
* guix/upstream.scm (lookup-updater, package-latest-release)
(package-latest-release*, package-update): Make 'updaters' an optional
parameter.
* guix/lint.scm (check-for-updates): Remove second argument to
'package-latest-release*'.
2021-01-07 12:08:41 +01:00
Ludovic Courtès
b793718cb4
import: elpa: Updater gracefully handles missing upstream data.
Fixes a crash with:

  guix refresh emacs-exwm-no-x-toolkit

* guix/import/elpa.scm (latest-release): Return #f when
'elpa-package-info' returns #f.
2021-01-07 12:08:40 +01:00
Ricardo Wurmus
cf289d7cfa
Discover extensions via GUIX_EXTENSIONS_PATH.
* guix/scripts.scm (%command-categories): Add extension category.
* guix/ui.scm (source-file-command): Also parse extensions files.
(command-files): Accept an optional directory argument.
(extension-directories): New procedure.
(commands): Use it.
(show-guix-help): Hide empty categories.
(run-guix-command): Try loading an extension if there is no matching Guix
command.
2021-01-05 23:58:21 +01:00
Ludovic Courtès
10612d6154
graph: Install JavaScript files.
Until now, 'guix graph --backend=d3js' wouldn't work outside the build
tree.

* d3.v3.js: Move to...
* guix/d3.v3.js: ... here.
* graph.js: Move to...
* guix/graph.js: ... here.
* Makefile.am (nobase_dist_guilemodule_DATA): Add them.
(EXTRA_DIST): Remove them.
* guix/graph.scm (emit-d3js-prologue, emit-d3js-epilogue): Adjust
'search-path' argument accordingly.
* guix/self.scm (compiled-guix)[*extra-modules*]: Pass them via #:extra-files.
2021-01-04 23:54:16 +01:00
Ludovic Courtès
fa42774742
ui: It's 2021 now!
* guix/ui.scm (show-version-and-exit): Change year to 2021.
2021-01-04 23:54:16 +01:00
Ludovic Courtès
6c3690fc57
guix system: Add '--graph-backend'.
* guix/scripts/system.scm (lookup-backend): New procedure.
(export-extension-graph, export-shepherd-graph): Add #:backend parameter
and honor it.
(show-help, %options): Add "--graph-backend".
(%default-options): Add 'graph-backend'.
(process-action): Pass #:backend to 'export-extension-graph' and
'export-shepherd-graph'.
* doc/guix.texi (Invoking guix system): Document '--graph-backend'.
2021-01-04 23:54:15 +01:00
guy fleury iteriteka
0aed31be66
environment: Remove unused modules.
* guix/scripts/environment.scm: Do not use (ice-9 format) and (ice-9
rdelim).

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-01-04 11:51:48 +01:00
Ludovic Courtès
9158020d78
substitute: Handle "invalid session" GnuTLS errors on reused connections.
Reported by Christopher Baines <mail@cbaines.net>
at <https://issues.guix.gnu.org/45323#2>.

* guix/scripts/substitute.scm (call-with-cached-connection): Handle
'gnutls-error and ERROR/INVALID-SESSION.
2021-01-04 11:51:48 +01:00
Ludovic Courtès
ed63b7f87e
guix hash: Honor '-H' when used alongside '-r'.
* guix/scripts/hash.scm (guix-hash): When 'recursive? is true, use
'open-hash-port' instead of 'open-sha256-port'.
* tests/guix-hash.sh: Add test for 'guix hash -r -H sha512'.
2021-01-04 11:51:48 +01:00
Ricardo Wurmus
51c06d10cf
import/utils: recursive-import: Fix typo.
* guix/import/utils.scm (recursive-import): Fix typo.
2020-12-31 15:52:13 +01:00
Ricardo Wurmus
f249af3086
import/elpa: Abort early on failure to fetch meta data.
* guix/import/elpa.scm (elpa->guix-package): Raise condition instead of
returning #FALSE.
* guix/scripts/import/elpa.scm (guix-import-elpa): Handle conditions when
importing recursively.
2020-12-31 15:50:48 +01:00
Zhu Zihao
5f6216d551
build-system/cargo: Use argument "--no-track" in "cargo install".
* guix/build/cargo-build-system(install):
Add argument "--no-track" in "cargo install".
Remove stale hack.

Signed-off-by: Efraim Flashner <efraim@flashner.co.il>
2020-12-31 14:42:15 +02:00
Efraim Flashner
3d395e3d83
utils: Add pkg-config-for-target.
* guix/utils.scm (pkg-config-for-target): New procedure.
2020-12-28 19:04:34 +02:00
Ludovic Courtès
e38d90d497
transformations: Add '--with-patch'.
Suggested by Philippe Swartvagher <philippe.swartvagher@inria.fr>.

* guix/transformations.scm (transform-package-patches): New procedure.
(%transformations): Add it as 'with-patch'.
(%transformation-options, show-transformation-options-help/detailed):
Add '--with-patch'.
* tests/transformations.scm ("options->transformation, with-patch"): New
test.
* doc/guix.texi (Package Transformation Options): Document it.
2020-12-27 17:23:40 +01:00
Ricardo Wurmus
5aae614868
import/utils: alist->package: Handle SPDX license names only as fallback.
Fixes <https://bugs.gnu.org/45453>.

* guix/import/utils.scm (alist->package): Find plain license names in (guix
licenses) first, and only fall back to SPDX names on error.
* tests/import-utils.scm ("alist->package with SPDX license name 1/2",
"alist->package with SPDX license name 2/2"): New tests.
2020-12-27 12:06:49 +01:00
Ricardo Wurmus
649786f0cb
import/print: package->code: Fix branching.
* guix/import/print.scm (package->code)<license->code>: Branch on VAR, not on
the SYMBOL-APPEND return value.
2020-12-27 12:04:22 +01:00
Ludovic Courtès
7624ebbae3
ssh: Use 'guix repl' instead of 'guile'.
This simplifies setup of build machines: no need to install Guile in
addition to Guix, no need to set 'GUILE_LOAD_PATH' & co., leading to
fewer failure modes.

* guix/ssh.scm (remote-run): New procedure.
(remote-daemon-channel): Use it instead of 'open-remote-pipe*'.
(store-import-channel)[import]: Remove check for module availability.
Add call to 'primitive-exit'.
Use 'remote-run' instead of 'open-remote-pipe'.
(store-export-channel)[export]: Remove check for module availability.
Add calls to 'primitive-exit'.
Use 'remote-run' instead of 'open-remote-pipe'.
(handle-import/export-channel-error): Remove 'module-error' clause.
(report-module-error): Remove.
* guix/scripts/offload.scm (assert-node-has-guix): Replace call to
'report-module-error' by 'leave'.
* doc/guix.texi (Daemon Offload Setup): Remove mention of Guile.
2020-12-23 16:03:32 +01:00
Ludovic Courtès
be5a75ebb5
substitute: Reuse connections for '--query'.
This significantly speeds up things like substituting the closure of a
.drv.  This is a followup to 5ff521452b.

* guix/scripts/substitute.scm (http-multiple-get): Add #:open-connection
and #:keep-alive? and honor them.
(open-connection-for-uri/maybe): Use 'open-connection-for-uri/cached'
instead of 'guix:open-connection-for-uri'.  Call 'http-multiple-get'
within 'call-with-cached-connection'.
(open-connection-for-uri/cached): Add #:timeout and #:verify-certificate?
and honor them.
(call-with-cached-connection): Add 'open-connection'  parameter and
honor it.
2020-12-23 16:03:32 +01:00
Nicolas Goaziou
5420db323f
import: crate: Change updater name from "crates" to "crate".
* guix/import/crate.scm (%crate-updater): Change name to `crate', so it is on
par with the importer, and the manual.
2020-12-23 10:34:39 +01:00
Nicolas Goaziou
9f813f2505
scripts: Fix typo in crate importer help message.
Fixes <https://issues.guix.gnu.org/45351>.

* guix/scripts/import/crate.scm (show-help): Fix URL.
2020-12-23 10:05:07 +01:00
Ricardo Wurmus
5f5e3873d7
import/cran: Add input style "specification".
* guix/import/cran.scm (%input-style): New parameter.
(format-inputs): Use it.
* guix/scripts/import/cran.scm (guix-import-cran): Set the %input-style
parameter.
 (%options): Add "--style" option.
* doc/guix.texi (Invoking guix import): Document it.
2020-12-22 14:18:34 +01:00
Miguel Ángel Arruga Vivas
f00e68ace0
system: Allow separated /boot and encrypted root.
* gnu/bootloader/grub.scm (grub-configuration-file): New parameter
store-crypto-devices.
[crypto-devices]: New helper function.
[builder]: Use crypto-devices.
* gnu/machine/ssh.scm (roll-back-managed-host): Use
boot-parameters-store-crypto-devices to provide its contents to the
bootloader configuration generation process.
* gnu/tests/install.scm (%encrypted-root-not-boot-os,
%encrypted-root-not-boot-os): New os declaration.
(%encrypted-root-not-boot-installation-script): New script, whose contents
were initially taken from %encrypted-root-installation-script.
(%test-encrypted-root-not-boot-os): New test.
* gnu/system.scm (define-module): Export
operating-system-bootoader-crypto-devices and
boot-parameters-store-crypto-devices.
(<boot-parameters>): Add field store-crypto-devices.
(read-boot-parameters): Parse store-crypto-devices field.
[uuid-sexp->uuid]: New helper function extracted from
device-sexp->device.
(operating-system-bootloader-crypto-devices): New function.
(operating-system-bootcfg): Use
operating-system-bootloader-crypto-devices to provide its contents to
the bootloader configuration generation process.
(operating-system-boot-parameters): Add store-crypto-devices to the
generated boot-parameters.
(operating-system-boot-parameters-file): Likewise to the file with
the serialized structure.
* guix/scripts/system.scm (reinstall-bootloader): Use
boot-parameters-store-crypto-devices to provide its contents to the
bootloader configuration generation process.
* tests/boot-parameters.scm (%default-store-crypto-devices): New
variable.
(%grub-boot-parameters, test-read-boot-parameters): Use
%default-store-crypto-devices.
(tests store-crypto-devices): New tests.
2020-12-21 18:41:11 +01:00
Mathieu Othacehe
ee94cd265e
scripts: discover: Remove previous cache file.
Partially fixes <https://issues.guix.gnu.org/45302>.

* guix/scripts/discover.scm (guix-discover): Remove previous cache files.
2020-12-20 10:56:45 +01:00
Ludovic Courtès
f9978346e7
avahi: Remove poll timeout when possible.
Fixes <https://issues.guix.gnu.org/45314>.

* guix/avahi.scm (avahi-browse-service-thread): Change timeout default value
to false when no "stop-loop?" procedure is passed. Adapt "iterate-simple-poll"
call accordingly.

Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
2020-12-20 10:40:57 +01:00
Ludovic Courtès
4f621a2b00
maint: Require Guile >= 2.2.6.
* configure.ac: For Guile 2.2, require 2.2.6 or later.
* guix/gexp.scm (define-syntax-parameter-once): Remove.
Use 'define-syntax-parameter' instead.
* guix/mnoads.scm: Likewise.
* guix/inferior.scm (proxy)[select*]: Remove.
* guix/scripts/publish.scm <top level>: Remove replacement for (@@ (web
http) read-header-line).
* guix/store/deduplication.scm (counting-wrapper-port): Remove.
(nar-sha256): Call 'port-position' on PORT to compute SIZE.
2020-12-19 23:25:01 +01:00
Ludovic Courtès
c7c7f068c1
daemon: Delegate deduplication to 'guix substitute'.
This removes the main source of latency between subsequent downloads.

* nix/libstore/build.cc (SubstitutionGoal::tryToRun): Add a
"deduplicate" key to ENV.
(SubstitutionGoal::finished): Remove call to 'optimisePath'.
* guix/scripts/substitute.scm (process-substitution)[destination-in-store?]
[dump-file/deduplicate*]: New variables.
Pass #:dump-file to 'restore-file'.
* guix/scripts/substitute.scm (guix-substitute)[deduplicate?]: New
variable.
Pass #:deduplicate? to 'process-substitution'.
* guix/serialization.scm (dump-file): Export and augment 'dump-file'.
2020-12-19 23:25:01 +01:00
Ludovic Courtès
9dfa20a22a
daemon: Let 'guix substitute' perform hash checks.
This way, the hash of the store item can be computed as it is restored,
thereby avoiding an additional file tree traversal ('hashPath' call)
later on in the daemon.  Consequently, it should reduce latency between
subsequent substitute downloads.

This is a followup to 5ff521452b.

* guix/scripts/substitute.scm (narinfo-hash-algorithm+value): New
procedure.
(process-substitution): Wrap INPUT into a hash input port, 'hashed', and
read from it.  Compare the actual and expected hashes, and print a
"hash-mismatch" status line when they differ.  When they match, print
not just "success" but also the nar hash and size.
* nix/libstore/build.cc (class SubstitutionGoal)[expectedHashStr]:
Remove.
(SubstitutionGoal::finished): Tokenize 'status'.  Parse it and handle
"success" and "hash-mismatch" accordingly.  Call 'hashPath' only when
the returned hash is not SHA256.
(SubstitutionGoal::handleChildOutput): Remove 'expectedHashStr'
handling.
* tests/substitute.scm ("substitute, invalid hash"): Rename to...
("substitute, invalid narinfo hash"): ... this.
("substitute, invalid hash"): New test.
2020-12-19 23:25:00 +01:00
Ludovic Courtès
d613c1771a
status: Do not emit ANSI escapes when stderr is not a tty.
Fixes <https://bugs.gnu.org/44985>.
Reported by Simon Josefsson <simon@josefsson.org>.

* guix/progress.scm (display-download-progress): Add #:tty? and honor it.
* guix/status.scm (print-build-event): Pass #:tty? to
'display-download-progress'.
2020-12-18 16:13:39 +01:00
Carlo Zancanaro
b129b43475
import: elpa: Support working with MELPA.
* guix/import/elpa.scm (default-files-spec): New variable.
(download-git-repository, package-name->melpa-recipe, file-hash, vcs-file?,
git-repository->origin, melpa-recipe->origin, melpa-recipe->maybe-arguments):
New procedures.
(elpa-package->sexp): Add optional repo argument, and use it to determine
whether to attempt to construct a source using the MELPA recipe.
(elpa->guix-package): Pass repo to elpa-package->sexp.

Signed-off-by: Christopher Baines <mail@cbaines.net>
2020-12-18 12:37:26 +00:00
Lars-Dominik Braun
f14bb29def
import: cran: Use CRAN’s canonical URL as home-page.
* guix/import/cran.scm (%cran-canonical-url): New variable.
(description->package): Construct home-page using canonical URL.

Signed-off-by: Christopher Baines <mail@cbaines.net>
2020-12-15 22:34:30 +00:00
Ludovic Courtès
7530e491b5
deduplicate: Create the '.links' directory lazily.
This avoids repeated (mkdir-p "/gnu/store/.links") calls when
deduplicating lots of files.

* guix/store/deduplication.scm (deduplicate): Remove initial call to
'mkdir-p'.  Add ENOENT case in 'link' exception handler.  Reindent.
* tests/store-deduplication.scm ("deduplicate, ENOSPC"): Check
for (<= links 4) to account for the initial 'link' call.
2020-12-15 17:32:12 +01:00
Ludovic Courtès
9e6fe0e08f
database: Honor 'SOURCE_DATE_EPOCH'.
* guix/store/database.scm (timestamp): New procedure.
(sqlite-register): Use it as the default for #:time.
(register-items): Likewise for #:registeration-time.
2020-12-15 17:32:11 +01:00
Ludovic Courtès
3169c93903
database: Remove 'register-path'.
* guix/store/database.scm (register-path): Remove.
* tests/store-database.scm ("register-path"): Rename to...
("register-items"): ... this, and use 'register-items' instead of
'register-path'.
("register-path, directory"): Rename to...
("register-items, directory"): ... this, and use 'register-items'
instead of 'register-path'.
("register-path with unregistered references"): Rename to...
("sqlite-register with unregistered references"): ... this.
2020-12-15 17:32:11 +01:00
Ludovic Courtès
1574bd82bb
system: 'init' does not recompute the hash of each store item.
Fixes <https://bugs.gnu.org/44760>.

Previously, the 'register-path' call would re-traverse ITEM to compute
its nar hash, even though that hash is already known in the initial
store.  This patch also avoids repeated opening/closing of the
database.

* guix/store/database.scm (call-with-database): Export.
* guix/scripts/system.scm (copy-item): Add 'db' parameter.  Call
'sqlite-register' instead of 'register-path'.
(copy-closure): Remove redundant call to 'references*'.  Call
'call-with-database' and pass the database to 'copy-item'.
2020-12-15 17:32:11 +01:00
Ludovic Courtès
0682cc5936
database: Remove #:deduplicate? and #:reset-timestamps? from 'register-path'.
* guix/store/database.scm (register-path): Remove #:deduplicate?
and #:reset-timestamps?.
* guix/scripts/system.scm (copy-item): Adjust accordingly.
* tests/store-database.scm ("register-path")
("register-path, directory"): Call 'reset-timestamps'.
2020-12-15 17:32:11 +01:00
Ludovic Courtès
cd6c5ddfc8
guix system: 'init' copies, resets timestamps, and deduplicates at once.
Partly fixes <https://bugs.gnu.org/44760>.

* guix/build/store-copy.scm (copy-store-item): New procedure.
(populate-store): Use it instead of the inline 'copy-recursively' call.
* guix/scripts/system.scm (copy-item): Likewise.
Pass #:reset-timestamps? and #:deduplicate? to 'register-path'.
2020-12-15 17:32:11 +01:00
Ludovic Courtès
0793833c59
database: Remove #:deduplicate? from 'register-items'.
It is now up to the caller to deduplicate store contents.

* guix/store/database.scm (register-items): Remove #:deduplicate?
parameter and call to 'deduplicate'.
(register-path): Call 'deduplicate' when #:deduplicate? is true.
* gnu/build/image.scm (register-closure): Adjust call accordingly.
* gnu/build/vm.scm (register-closure): Likewise.
* guix/nar.scm (finalize-store-file): Likewise.
* guix/scripts/pack.scm (store-database): Likewise.
2020-12-15 17:32:11 +01:00
Ludovic Courtès
6a060ff27f
store-copy: 'populate-store' can optionally deduplicate files.
Until now deduplication was performed as an additional pass after
copying files, which involve re-traversing all the files that had just
been copied.

* guix/store/deduplication.scm (copy-file/deduplicate): New procedure.
* tests/store-deduplication.scm ("copy-file/deduplicate"): New test.
* guix/build/store-copy.scm (populate-store): Add #:deduplicate?
parameter and honor it.
* tests/gexp.scm ("gexp->derivation, store copy"): Pass #:deduplicate? #f
to 'populate-store'.
* gnu/build/image.scm (initialize-root-partition): Pass #:deduplicate?
to 'populate-store'.  Pass #:deduplicate? #f to 'register-closure'.
* gnu/build/vm.scm (root-partition-initializer): Likewise.
* gnu/build/install.scm (populate-single-profile-directory): Pass
 #:deduplicate? #f to 'populate-store'.
* gnu/build/linux-initrd.scm (build-initrd): Likewise.
* guix/scripts/pack.scm (self-contained-tarball)[import-module?]: New
procedure.
[build]: Pass it as an argument to 'source-module-closure'.
* guix/scripts/pack.scm (squashfs-image)[build]: Wrap in
'with-extensions'.
* gnu/system/linux-initrd.scm (expression->initrd)[import-module?]: New
procedure.
[builder]: Pass it to 'source-module-closure'.
* gnu/system/install.scm (cow-store-service-type)[import-module?]: New
procedure.  Pass it to 'source-module-closure'.
2020-12-15 17:32:10 +01:00
Ludovic Courtès
dea1ee1fd7
database: Remove #:reset-timestamps? from 'register-items'.
The assumption now is that the caller took care of resetting timestamps
and permissions.

* guix/store/database.scm (register-items): Remove #:reset-timestamps?
parameter and the call to 'reset-timestamps'.
(register-path): Adjust accordingly and add call to 'reset-timestamps'.
* gnu/build/image.scm (register-closure): Remove #:reset-timestamps?
parameter to 'register-items'.
* gnu/build/vm.scm (register-closure): Likewise.
* guix/nar.scm (finalize-store-file): Adjust accordingly.
* guix/scripts/pack.scm (store-database)[build]: Likewise.
2020-12-15 17:32:10 +01:00
Ludovic Courtès
7b8d239ec2
store-copy: 'populate-store' resets timestamps.
Until now, 'populate-store' would reset permissions but not timestamps,
so callers would resort to going through an extra directory traversal to
reset timestamps.

* guix/build/store-copy.scm (reset-permissions): Remove.
(copy-recursively): New procedure.
(populate-store): Pass #:keep-permissions? to 'copy-recursively'.
Remove call to 'reset-permissions'.
* tests/gexp.scm ("gexp->derivation, store copy"): In BUILD-DRV, check
whether 'populate-store' canonicalizes permissions and timestamps.
* gnu/build/image.scm (initialize-root-partition): Pass #:reset-timestamps? #f
to 'register-closure'.
* gnu/build/vm.scm (root-partition-initializer): Likewise.
2020-12-15 17:32:10 +01:00
Ludovic Courtès
2718c29c3f
nar: Deduplicate files right as they are restored.
This avoids having to traverse and re-read the files that we have just
restored, thereby reducing I/O.

* guix/serialization.scm (dump-file): New procedure.
(restore-file): Add #:dump-file parameter and honor it.
* guix/store/deduplication.scm (tee, dump-file/deduplicate): New
procedures.
* guix/nar.scm (restore-one-item): Pass #:dump-file to 'restore-file'.
(finalize-store-file): Pass #:deduplicate? #f to 'register-items'.
* tests/nar.scm <top level>: Call 'setenv' to set "NIX_STORE".
2020-12-15 17:32:09 +01:00
Ludovic Courtès
ed7d02f7c1
serialization: 'restore-file' sets canonical timestamp and permissions.
* guix/serialization.scm (restore-file): Set the permissions and mtime
of FILE.
* guix/nar.scm (finalize-store-file): Pass #:reset-timestamps? #f to
'register-items'.
* tests/nar.scm (rm-rf): Add 'chmod' calls to ensure files are writable.
("write-file + restore-file with symlinks"): Ensure every file in OUTPUT
passes 'canonical-file?'.
* tests/guix-archive.sh: Run "chmod -R +w" before "rm -rf".
2020-12-15 17:32:09 +01:00
Ludovic Courtès
465d2cb286
serialization: 'fold-archive' notifies about directory processing completion.
* guix/serialization.scm (fold-archive): Call PROC with a
'directory-complete tag when done with a directory.
(restore-file): Handle it.
* guix/scripts/archive.scm (list-contents): Likewise.
* guix/scripts/challenge.scm (archive-contents): Likewise.
* tests/nar.scm ("write-file-tree + fold-archive"): Adjust accordingly.
2020-12-15 17:32:09 +01:00
Julien Lepiller
954e4cf6a4
offload: Print warning in context.
* guix/scripts/offload.scm (build-machine): Add `location` field.
(build-machine-system): Print location with warning.
2020-12-15 15:04:06 +01:00
Mathieu Othacehe
1f49ab6ee2
scripts: discover: Remove file locks.
* guix/scripts/discover.scm (call-with-read-file-lock, with-read-file-lock):
Remove them.
(write-publish-file): Use "with-atomic-file-output" instead of
"with-file-lock".
(read-substitute-urls): Remove file lock.
2020-12-13 13:24:17 +01:00
Marius Bakke
4de58a4b81
download: Update ImageMagick mirror list.
* guix/download.scm (%mirrors): Remove defunct ImageMagick mirrors, update
URLs for directory structure changes (/releases instead of /legacy).  Move
official site last.
2020-12-13 01:05:57 +01:00
Ricardo Wurmus
482b8ae2cd
import/cran: Abort with error message when recursive import fails.
Previously, after a failed recursive import "guix import" would signal
success.

* guix/import/cran.scm (cran->guix-package): Raise a condition when all
repositories have been exhausted.
* guix/scripts/import/cran.scm (guix-import-cran): Handle errors.
2020-12-12 00:08:27 +01:00
Ludovic Courtès
41d01b4e2e
self: Remove the empty string from '%load-extensions'.
* guix/self.scm (guix-command): Set '%load-extensions'.
2020-12-11 19:06:54 +01:00
Ludovic Courtès
459f0d07a1
self: Move Guile early in the module search path.
Until now, Guile modules would first be searched for in
MODULE-DIRECTORY, then in each $GUILE_LOAD_PATH entry, and finally in
Guile itself.

* guix/self.scm (guix-command): Make GUILE the second entry in the
%LOAD-PATH and %LOAD-COMPILED-PATH.
2020-12-11 19:06:53 +01:00
Mathieu Othacehe
0faef87178
avahi: Ignore local services.
* guix/avahi.scm (avahi-browse-service-thread): Add "ignore-local?" argument
and honor it.
2020-12-10 09:48:03 +01:00
Giacomo Leidi
371ba7b4be
guix: Add globstar support.
* guix/glob.scm (string->sglob)
(glob-match?): Add globstar support.
* tests/glob.scm: Update accordingly.

Signed-off-by: Jelle Licht <jlicht@fsfe.org>
2020-12-09 22:25:17 +01:00
Ricardo Wurmus
6c148eaae7
import/utils: Fix conditional.
This is a follow-up to commit 45584061a9.

* guix/import/utils.scm (package->definition): Use EQ? instead of = to compare
truthiness; use ELSE instead of (#T).
2020-12-09 22:03:28 +01:00
Roel Janssen
0a79b24506
import: cran: Update the Bioconductor version to 3.12.
* guix/import/cran.scm (%bioconductor-version): Set to 3.12.
* guix/build-system/r.scm (bioconductor-uri):  Update to 3.12.
2020-12-09 12:12:19 +01:00
Ludovic Courtès
799f066768
import: opam: Adjust test to latest 'opam->guix-package' changes.
This is a followup to a8dccd4bdc, which
broke the test.

* guix/import/opam.scm (get-opam-repository): Prevent inlining.
* tests/opam.scm ("opam->guix-package"): Mock 'get-opam-repository'.
2020-12-08 22:58:37 +01:00
Ludovic Courtès
5ff521452b
substitute: Cache and reuse connections while substituting.
That way, when fetching a series of substitutes from the same server(s),
the connection is reused instead of being closed/opened for each
substitutes, which saves on network round trips and TLS handshakes.

* guix/http-client.scm (http-fetch): Add #:keep-alive? and honor it.
* guix/progress.scm (progress-report-port): Add #:close? parameter and
honor it.
* guix/scripts/substitute.scm (at-most): Return the tail as a second
value.
(fetch): Add #:port and #:keep-alive? and honor them.
(%max-cached-connections): New variable.
(open-connection-for-uri/cached, call-with-cached-connection): New
procedures.
(with-cached-connection): New macro.
(process-substitution): Wrap 'fetch' call in 'with-cached-connection'.
Pass #:close? to 'progress-report-port'.
2020-12-08 22:30:08 +01:00
Ludovic Courtès
711df9ef3c
daemon: Run 'guix substitute --substitute' as an agent.
This avoids spawning one substitute process per substitution.

* nix/libstore/build.cc (class Worker)[substituter]: New field.
[outPipe, logPipe, pid]: Remove.
(class SubstitutionGoal)[expectedHashStr, status, substituter]: New fields.
(SubstitutionGoal::timedOut): Adjust to check 'substituter'.
(SubstitutionGoal::tryToRun): Remove references to 'outPipe' and
'logPipe'.  Run "guix substitute --substitute" as an 'Agent'.  Send the
request with 'writeLine'.
(SubstitutionGoal::finished): Likewise.
(SubstitutionGoal::handleChildOutput): Change to fill in
'expectedHashStr' and 'status'.
(SubstitutionGoal::handleEOF): Call 'wakeUp' unconditionally.
(SubstitutionGoal::~SubstitutionGoal): Adjust to check 'substituter'.
* guix/scripts/substitute.scm (process-substitution): Write "success\n"
to stdout upon success.
(%error-to-file-descriptor-4?): New variable.
(guix-substitute): Set 'current-error-port' to file descriptor 4
unless (%error-to-file-descriptor-4?) is false.
Remove "--substitute" arguments.  Loop reading line from stdin.
* tests/substitute.scm <top level>: Call '%error-to-file-descriptor-4?'.
(request-substitution): New procedure.
("substitute, no signature")
("substitute, invalid hash")
("substitute, unauthorized key")
("substitute, authorized key")
("substitute, unauthorized narinfo comes first")
("substitute, unsigned narinfo comes first")
("substitute, first narinfo is unsigned and has wrong hash")
("substitute, first narinfo is unsigned and has wrong refs")
("substitute, two invalid narinfos")
("substitute, narinfo with several URLs"): Adjust to new "guix
substitute --substitute" calling convention.
2020-12-08 22:30:08 +01:00
Ludovic Courtès
79c6614f58
daemon: Use 'Agent' to spawn 'guix substitute --query'.
* nix/libstore/local-store.hh (RunningSubstituter): Remove.
(LocalStore)[runningSubstituter]: Change to unique_ptr<Agent>.
[setSubstituterEnv, didSetSubstituterEnv]: Remove.
[getLineFromSubstituter, getIntLineFromSubstituter]: Take an 'Agent'.
* nix/libstore/local-store.cc (LocalStore::~LocalStore): Remove
reference to 'runningSubstituter'.
(LocalStore::setSubstituterEnv, LocalStore::startSubstituter): Remove.
(LocalStore::getLineFromSubstituter): Adjust to 'run' being an 'Agent'.
(LocalStore::querySubstitutablePaths): Spawn substituter agent if
needed.  Adjust to 'Agent' interface.
(LocalStore::querySubstitutablePathInfos): Likewise.
* nix/libstore/build.cc (SubstitutionGoal::tryToRun): Remove call to
'setSubstituterEnv' and add 'setenv' call for "_NIX_OPTIONS" instead.
(SubstitutionGoal::finished): Remove 'readLine' call for 'dummy'.
* guix/scripts/substitute.scm (%allow-unauthenticated-substitutes?):
Remove second argument to 'make-parameter'.
(process-query): Call 'warn-about-missing-authentication'
when (%allow-unauthenticated-substitutes?) is #t.
(guix-substitute): Wrap body in 'parameterize'.  Set 'guix-warning-port'
too.  No longer exit when 'substitute-urls' returns the empty list.  No
longer print newline initially.
* tests/substitute.scm (test-quit): Parameterize 'current-error-port' to
account for the port changes in 'guix-substitute'.
2020-12-08 22:30:08 +01:00
Ludovic Courtès
e9edaf3639
database: Remove unnecessary module imports.
* guix/store/database.scm: Remove unnecessary imports added in
4b9eecd322.
2020-12-08 21:40:05 +01:00
Julien Lepiller
ccc4d287b7
guix: opam: Add coq support in the importer.
* guix/import/opam.scm (get-opam-repository): Add support for coq
repositories.
(ocaml-name->guix-name): Properly name coq package.
* doc/guix.texi (Invoking guix import): Document it.
2020-12-08 16:53:07 +01:00
Julien Lepiller
a8dccd4bdc
guix: opam: Add --repo argument to importer.
* guix/scripts/import/opam.scm (guix-import-opam): Pass --repo argument
to recursive and non-recursive importers.
* guix/import/opam.scm (get-opam-repository): Select proper repository
location depending on a new repo argument.
(opam->guix-package): Use get-opam-repository in the procedure body.
2020-12-08 16:47:22 +01:00
Julien Lepiller
15ee1b8317
guix: opam: Pass default repository to recursive importer.
* guix/import/opam.scm (opam->guix-package): Rename #:repository key
to #:repo.
(opam-recursive-import): Pass #:repo keyword.
* tests/opam.scm (opam->guix-package): Rename #:repository to #:repo.
2020-12-08 16:40:30 +01:00
Julien Lepiller
59873d94ce
guix: opam: Filter implicit inputs.
* guix/import/opam.scm (opam->guix-package, depends->inputs): Filter out
implicit inputs.
2020-12-08 16:40:19 +01:00
Julien Lepiller
4e110f61ac
guix: opam: Remove stray `pk'.
* guix/import/opam.scm (opam->guix-package): Remove stray `pk'.
2020-12-08 16:40:04 +01:00
Mathieu Othacehe
1d229a34b7
ci: Add "evaluation" method.
* guix/ci.scm (evaluation): New procedure.
2020-12-07 16:15:55 +01:00
Mathieu Othacehe
9087af0323
ci: Add evaluation field to build record.
* guix/ci.scm (<build>): Add "evaluation" field.
2020-12-07 16:15:55 +01:00
Leo Prikler
07340cbebc
profiles: Delete duplicate manifest entries in packages->manifest.
* gnu/profiles.scm (packages->manifest): Delete duplicate entries.
* tests/profiles.scm ("packages->manifest, no duplicates"): New test.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-12-07 12:48:26 +01:00
Leo Prikler
f5d952c5f5
profiles: Remove duplicates in manifest transactions.
Fixes <https://bugs.gnu.org/23874>.
Reported by Ricardo Wurmus <ricardo.wurmus@mdc-berlin.de>.

* guix/profiles.scm (manifest-transaction-effects): Delete duplicates in
install and remove.  Let multiple upgrades and downgrades shadow previous
transactions of the same kind.
* tests/profiles.scm
("manifest-transaction-effects no double install or upgrades")
("manifest-transaction-effects no double downgrade")
("manifest-transaction-effects no double removal"): New tests.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-12-07 12:48:25 +01:00
Tobias Geerinckx-Rice
a81258c124
ui: Handle multiword and empty $PAGER values.
* guix/ui.scm (call-with-paginated-output-port): Empty PAGER values
disable paging.  Non-empty ones are split into command arguments.

Reported by Daniel Brooks <db48x@db48x.net>.
2020-12-05 16:47:59 +01:00
Tobias Geerinckx-Rice
4d0b61a1f6
pull: Accept no non-option arguments.
* guix/scripts/pull.scm (guix-pull): LEAVE if any non-option arguments
were passed.
2020-12-05 16:47:59 +01:00
Mathieu Othacehe
c952a9312a
scripts: discover: Check for cache file existence.
Fixes: https://issues.guix.gnu.org/45045.

* guix/scripts/discover.scm (read-substitute-urls): Check for file existence.
2020-12-05 10:38:52 +01:00
Ludovic Courtès
cde3a69a37
git: 'reference-available?' handles short commit IDs.
Reported by Simon Tournier on #guix.

Until now 'reference-available?' would always return #f when passed a
short commit ID.

* guix/git.scm (reference-available?): Call 'object-lookup-prefix' when
COMMIT is shorter than 40 characters.
2020-12-04 23:45:09 +01:00
Ludovic Courtès
e3065ec117
import: crate: Skip tests when Guile-Semver is missing.
* guix/import/crate.scm: Add comment for the 'module-autoload!' calls.
* tests/crate.scm (have-guile-semver?): New variable.
("crate->guix-package", "cargo-recursive-import")
("cargo-recursive-import-hoors-existing-packages"): Skip when
HAVE-GUILE-SEMVER? is false.
2020-12-04 16:59:26 +01:00
Mathieu Othacehe
79fd9f4026
scripts: substitute: Fix discover option.
The discover option can be unset or set to "yes/no". Handle both cases.

* guix/scripts/substitute.scm (%local-substitute-urls): Fix discover option.
2020-12-04 14:45:26 +01:00
Ricardo Wurmus
2bbe6b300e
import/cran: Do not attempt to generate definitions for failed imports.
* guix/scripts/import/cran.scm (guix-import-cran): Remove failed imports from
list of packages to define.
2020-12-04 12:28:53 +01:00
Ricardo Wurmus
a689c85af4
import/cran: Fix calls to CRAN->GUIX-PACKAGE.
* guix/import/cran.scm (cran->guix-package, latest-bioconductor-release):
Invoke CRAN->GUIX-PACKAGE with #:REPO keyword argument.
2020-12-04 12:27:29 +01:00
raingloom
64f032d73f
build-system: Add chicken-build-system.
* guix/build-system/chicken.scm: New file.
* guix/build/chicken-build-system.scm: New file.
* Makefile.am: Add them.
* doc/guix.texi: Document it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-12-03 16:18:33 +01:00
Ludovic Courtès
fbb380a088
self: Factorize package dependency enumeration.
* guix/self.scm (transitive-package-dependencies): New procedure.
(compiled-guix)[dependencies]: Use it.
2020-12-03 14:34:26 +01:00
Ludovic Courtès
720e87fe91
gnu: guile-semver: Switch to Guile 3.0.
* gnu/packages/guile-xyz.scm (guile-semver)[inputs]: Use GUILE-3.0.
(guile3.0-semver): Define in terms of 'deprecated-package'.
(guile2.2-semver): New variable.
2020-12-03 13:48:53 +01:00
Hartmut Goebel
054e308f5d
import: crate: Use existing package satisfying semver requirement.
If a package satisfying the dependency's semver requirement already exists,
use it. Prior to this change the highest version matching the semver
requirement was used (and imported in case it was not defined as package
already).

When resolving a dependency (now done in `sort-map-dependencies`), first
search for a package matching the semver requirement and only if this fails
reach out for a crate.

* guix/import/crate.scm (crate->guix-package)[find-package-version]: New
  function. [dependency-name+version]: New function.
  [sort-map-dependencies]: Use it instead of lambda function.

* tests/crate.scm (test-doctool-crate, test-doctool-dependencies): New
  variables.
  ("self-test …", "cargo-recursive-import-hoors-existing-packages"): New
  tests.
2020-12-02 22:09:23 +01:00
Hartmut Goebel
45584061a9
import: crate: Trim version for names after left-most non-zero part.
This complies to how versions are matched for caret requirements in crates:
An update is allowed if the new version number does not modify the left-most
non-zero digit in the major, minor, patch grouping.

* guix/import/crate.scm (version->semver-prefix): New function.
  (make-crate-sexp)[format-inputs]: Use it.
  (make-crate-sexp): Use it to pass shorter version to package->definition.
* guix/import/utils.scm (package->definition): Change optional parameter
  APPEND-VERSION? into APPEND-VERSION?/STRING. If it is a string, append its
  value to name.
* tests/crate.scm: Adjust tests accordingly.
2020-12-02 22:09:23 +01:00
Hartmut Goebel
9a48e35be8
import: utils: Trim patch version from names.
This remove the patch version from generated package names. For example
'rust-my-crate-1.1.2' now becomes 'rust-my-crate-1.1'.

* guix/import/utils.scm (package->definition): Trim patch version from
  generated package names.
* tests/crate.scm: (cargo>guix-package, cargo-recursive-import): Likewise.
2020-12-02 22:09:23 +01:00
Martin Becze
50fbb3f032
import: crate: Parameterized importing of dev dependencies.
The recursive crate importer will now include development dependencies only
for the top level package, but not for any of the recursively imported
packages.  Also #:skip-build will be false for the top-most package.

* guix/import/crate.scm (make-crate-sexp): Add the key BUILD?.
  (crate->guix-package): Add the key INCLUDE-DEV-DEPS?.
  (crate-recursive-import): Likewise.
* guix/scripts/import/crate.scm (guix-import-crate): Likewise.
* tests/crate.scm (cargo-recursive-import): Likewise.
2020-12-02 22:09:23 +01:00
Martin Becze
d9feb23e10
import: crate: Memorize crate->guix-package.
This adds memorization to procedures that involve network lookups.
'lookup-crate*' is used on every dependency of a package to get its version
list. It is also used to lookup a package's metadata. 'crate-recursive-import'
is also memorized since creating the same package twice will trigger a lookup
on its dependencies.

* guix/import/crate.scm (lookup-crate*): New procedure.
  (crate->guix-package): Memorize package metadata lookups.
  (crate-recursive-import): Memorize package creation.
2020-12-02 22:09:23 +01:00
Martin Becze
269c1db41b
import: crate: Use guile-semver to resolve module versions.
* guix/import/crate.scm: Add guile-semver as a soft dependency.
  (make-crate-sexp): Don't allow other keys. Add '#:skip-build?' to build
  system args. Pass a VERSION argument to 'cargo-inputs'.
  (crate->guix-package): Use guile-semver to resolve the correct module
  versions. Treat "build" dependencies as normal dependencies.
  (crate-name->package-name): Reuse the procedure 'guix-name' instead of
  duplicating its logic.
* guix/import/utils.scm (package-names->package-inputs): Implement
  handling of (name version) pairs.
* guix/scripts/import/crate.scm (guix-import-crate): Use
  crate-recursive-import instead of duplicate code.
* tests/crate.scm (recursive-import): Change test packages versions to be
  distinguishable. Add version data to the test. Check created symbols, too.

Co-authored-by: Hartmut Goebel <h.goebel@crazy-compilers.com>
2020-12-02 22:09:23 +01:00
Martin Becze
bea3b17739
import: utils: 'recursive-import' accepts an optional version parameter.
This adds a key VERSION to 'recursive-import' and moves the parameter REPO to
a key. This also changes all the places that rely on 'recursive-import'.

* guix/import/utils.scm (recursive-import): Add the VERSION key. Make REPO a
  key.
  (package->definition): Add optional 'append-version?'.
* guix/scripts/import/crate.scm (guix-import-crate): Add the VERSION key.
* guix/import/crate.scm (crate->guix-package): Add the VERSION key.
  (crate-recursive-import): Pass VERSION to recursive-import, remove now
  unnecessary code.
* guix/import/cran.scm (cran->guix-package, cran-recursive-import): Change the
  REPO parameter to a key.
* guix/import/elpa.scm (elpa->guix-package, elpa-recursive-import): Likewise.
* guix/import/gem.scm (gem->guix-package, recursive-import): Likewise.
* guix/import/opam.scm (opam-recurive-import): Likewise.
* guix/import/pypi.scm (pypi-recursive-import): Likewise.
* guix/import/stackage.scm (stackage-recursive-import): Likewise.
* guix/scripts/import/cran.scm (guix-import-cran): Likewise.
* guix/scripts/import/elpa.scm (guix-import-elpa): Likewise.
* tests/elpa.scm (eval-test-with-elpa): Likewise.
* tests/import-utils.scm (recursive-import): Likewise.

Co-authored-by: Hartmut Goebel <h.goebel@crazy-compilers.com>
2020-12-02 22:09:23 +01:00
Martin Becze
23e2cd156f
guix: self: Add guile-semver as a depenedency.
* guix/self.scm (compiled-guix): Add guile-semver as a depenedency.
2020-12-02 22:09:23 +01:00
zimoun
86971616c1
upgrade: Allow several regexps.
Fixes <https://bugs.gnu.org/44928>.
Reported by Luis Felipe <luis.felipe.la@protonmail.com>.

* guix/scripts/upgrade.scm (guix-upgrade): Allow several regexps and remove
"extraneous arguement" check.

Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
2020-12-01 11:34:10 +01:00
John Soo
58be9e0bf1
processes: Add '--format' and the "normalized" format.
* guix/scripts/processes.scm (lock->recutils): New procedure.
(daemon-session->recutils): Use it.
(daemon-sessions->recutils, session-key->recutils)
(session-scalars->normalized-record)
(child-process->normalized-record)
(daemon-sessions->normalized-record): New procedures.
(session-rec-type, lock-rec-type, child-process-rec-type)
(%available-formats): New variables.
(list-formats): New procedure.
(%options, show-help): Add '--format'.
(%default-options): New variable.
(guix-processes): Use 'parse-command-line' instead of 'args-fold*'.
Honor the 'format' value in OPTIONS.
* doc/guix.texi (Invoking guix processes): Document '--format'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-11-29 23:55:57 +01:00
John Soo
e1c81203ca
processes: Put ChildProcess and ChildPID on separate lines.
* guix/scripts/processes.scm (daemon-session->recutils): Put child
process information in separate fields.
* doc/guix.texi (Invoking guix processes): Document change in output of
'guix processes'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-11-29 23:55:57 +01:00
Mathieu Othacehe
35a32fefb4
Make "guile-avahi" dependency optional.
* configure.ac (HAVE_GUILE_AVAHI): New conditional.
* Makefile.am (MODULES): Add "guix/avahi.scm" and "guix/scripts/discover.scm"
if HAVE_GUILE_AVAHI is set.
* guix/scripts/publish.scm: Autoload (guix avahi).
* guix/scripts/substitute.scm: Autoload (guix scripts discovery).
2020-11-29 19:22:05 +01:00
Mathieu Othacehe
44068c7d30
self: Fix guile-avahi lookup.
This is a follow-up of 375cc7dea2.

* guix/self.scm (specification->package): Search for "guile-avahi" in (gnu
package guile-xyz).
2020-11-29 16:43:01 +01:00
Mathieu Othacehe
79f9dee3c4
Use substitute servers on the local network.
* guix/scripts/discover.scm: New file.
* Makefile.am (MODULES): Add it.
* nix/nix-daemon/guix-daemon.cc (options): Add "discover" option,
(parse-opt): parse it,
(main): start "guix discover" process when the option is set.
* guix/scripts/substitute.scm (%local-substitute-urls): New variable,
(substitute-urls): add it.
* gnu/services/base.scm (<guix-configuration>): Add "discover?"
field,
(guix-shepherd-service): honor it.
* doc/guix.texi (Invoking guix-daemon): Document "discover" option,
(Base Services): ditto.
2020-11-29 15:08:26 +01:00
Mathieu Othacehe
276e494b2a
publish: Add advertising support.
* guix/scripts/publish.scm (%options): Add "--advertise" option.
(show-help): Document it.
(service-name): New procedure,
(publish-service-type): new variable.
(run-publish-server): Add "advertise?" and "port" parameters. Use them to publish
the server using Avahi.
(guix-publish): Pass the "advertise?" option to "run-publish-server".
* gnu/services/base.scm (<guix-publish-configuration>): Add "advertise?"
field.
(guix-publish-shepherd-service): Honor it.
2020-11-29 15:08:26 +01:00
Mathieu Othacehe
375cc7dea2
Add Avahi support.
* guix/avahi.scm: New file.
* Makefile.am (MODULES): Add it.
* configure.ac: Add Guile-Avahi dependency.
* doc/guix.texi (Requirements): Document it.
* gnu/packages/package-management.scm (guix)[native-inputs]: Add
"guile-avahi",
[propagated-inputs]: ditto.
* guix/self.scm (specification->package): Add guile-avahi.
(compiled-guix): Ditto.
2020-11-29 15:08:26 +01:00
Marius Bakke
4dadb49779
Merge branch 'staging' 2020-11-28 22:39:12 +01:00
Zhu Zihao
16c7472b33
channels: Expose the default channel in %default-channel.
* guix/channels(%default-guix-channel): New variable taken from the inner of
%default-channels.

(%default-channels): Refactored.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-11-28 00:06:14 +01:00
Marius Bakke
24c86ad0c0
Merge branch 'master' into staging 2020-11-26 23:59:28 +01:00
Ludovic Courtès
5842239a66
deploy: Let key-and-args exceptions through.
Fixes <https://bugs.gnu.org/44825>.
Reported by Christopher Lemmer Webber <cwebber@dustycloud.org>.

* guix/ui.scm (guard*): Export.
* guix/scripts/deploy.scm (deploy-machine*): Use 'guard*' instead of
'guard'.  Add '&exception-with-kind-and-args' case.
2020-11-26 23:39:15 +01:00
Marius Bakke
bff94a5a53
Merge branch 'master' into staging 2020-11-26 01:08:35 +01:00
zimoun
c2cc5f0a00
weather: Fix '--substitute-urls'.
Fixes <https://bugs.gnu.org/44574>.
Reported by Efraim Flashner <efraim@flashner.co.il>.

* guix/scripts/weather.scm (guix-weather): Fix when substitute-urls
is a list.

Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
2020-11-25 11:55:07 +01:00
Marius Bakke
87a027243f
Merge branch 'master' into staging 2020-11-23 23:39:47 +01:00
Mathieu Othacehe
d9e57db724
store: Fix ensure-path docstring.
Suggested by Ludovic Courtès.

* guix/store.scm (ensure-path): Fix the docstring.
2020-11-23 14:10:34 +01:00
Marius Bakke
a485a98ca8
Merge branch 'master' into staging 2020-11-22 23:36:09 +01:00
Efraim Flashner
1ca0c34867
build-system/cargo: Set gettext environment variable when available.
* guix/build/cargo-build-system.scm (configure): When gettext is
available in the build environment set the GETTEXT_SYSTEM variable.
* gnu/packages/crates-io.scm (rust-gettext-rs-0.5, rust-gettext-rs-0.4,
rust-gettext-sys-0.19)[arguments]: Remove phase to help find system gettext.
2020-11-22 19:45:43 +02:00
Efraim Flashner
73dbcc4b5f
build-system/cargo: Set libclang environment variable when available.
* guix/build/cargo-build-system.scm (configure): When clang is available
in the build environment set the LIBCLANG_PATH variable.
* gnu/packages/crates-graphics.scm (rust-aom-sys-0.1,
uust-dav1d-sys-0.3),
* gnu/packages/crates-io.scm (rust-bindgen-0.55, rust-bindgen-0.54,
rust-bindgen-0.53, rust-bindgen-0.52, rust-cexpr-0.4, rust-cexpr-0.3,
rust-cexpr-0.2, rust-clang-sys-1, rust-clang-sys-0.29,
rust-clang-sys-0.26, rust-clang-sys-0.22, rust-clang-sys-0.11,
rust-libpijul-0.12, rust-nettle-7, rust-nettle-sys-2,
rust-sequoia-openpgp-0.9)[arguments]: Remove phases which set an
environment variable to find clang.
[inputs]: Rename instances of libclang with clang.
2020-11-22 19:44:53 +02:00
Efraim Flashner
3dbf3a7f51
build-system/cargo: Set openssl environment variable when available.
* guix/build/cargo-build-system.scm (configure): When openssl is
available set the OPENSSL_DIR variable to discover its location.
* gnu/packages/crates-io.scm (rust-curl-sys-0.4, rust-libgit2-sys-0.10,
rust-libpijul-0.12, rust-libssh2-sys-0.2, rust-native-tls-0.2,
rust-openssl-sys-0.9, rust-openssl-0.7, rust-trust-dns-rustls-0.6),
* gnu/packages/rust-apps.scm (tokei, exa)[arguments]: Remove redundant
setenv for openssl.
2020-11-22 19:44:43 +02:00
Mathieu Othacehe
edfa066dca
scripts: publish: Export procedures.
* guix/scripts/publish.scm (open-server-socket, run-publish-server): Export
those procedures.
(%default-gzip-compression): Export it.
2020-11-22 17:19:12 +01:00
Mathieu Othacehe
2a7e1121d8
guix: store: Add ensure-path.
* guix/store.scm (ensure-path): New procedure.
2020-11-22 17:17:56 +01:00
Danny Milosavljevic
8e7c98963f
linux-initrd: Add special-file->cpio-header*.
* guix/cpio.scm (special-file->cpio-header*): New public procedure.
2020-11-22 11:03:31 +01:00
Danny Milosavljevic
b1dfc64552
linux-initrd: Handle 'block-special and 'char-special cpio headers as well.
* guix/cpio.scm (make-cpio-header): Handle size correctly for all file types.
(mode->type): Add 'block-special, 'char-special.
2020-11-22 11:02:58 +01:00
Timothy Sample
464b1fffb0
lint: Add 'check-haskell-stackage' checker.
* guix/lint.scm (check-haskell-stackage): New procedure.
(%network-dependent-checkers): Add 'haskell-stackage' checker.
* guix/import/hackage.scm (%hackage-url): New variable.
(hackage-source-url, hackage-cabal-url): Use it in place of a
hard-coded string.
* guix/import/stackage.scm (%stackage-url): Make it a parameter.
(stackage-lts-info-fetch): Update accordingly.
* tests/lint.scm ("hackage-stackage"): New test.
2020-11-21 22:11:36 -05:00
Ludovic Courtès
4f156c259f
lint: Add 'patch-headers' checker.
* guix/lint.scm (check-patch-headers): New procedure.
(%local-checkers): Add 'patch-headers' checker.
* tests/lint.scm ("patch headers: no warnings")
("patch headers: missing comment", "patch headers: empty")
("patch headers: patch not found"): New tests.
2020-11-21 12:39:14 +01:00
Ludovic Courtès
e79ecff045
transformations: Show '--help-transform' only where applicable.
Fixes <https://bugs.gnu.org/44773>.
Reported by Florian Pelz <pelzflorian@pelzflorian.de>.

This fixes a regression introduced in
6701f64f73.

* guix/transformations.scm (%transformation-options): Add
"--help-transform".
(show-transformation-options-help): Rename to...
(show-transformation-options-help/detailed): ... this.
(show-transformation-options-help): New public procedure.
* guix/scripts/build.scm (show-build-options-help): Remove
"--help-transform".
(%standard-build-options): Likewise.
(show-help): Call 'show-transformation-options-help'.
* guix/scripts/environment.scm (show-help): Likewise.
* guix/scripts/graph.scm (show-help): Likewise.
* guix/scripts/install.scm (show-help): Likewise.
* guix/scripts/pack.scm (show-help): Likewise.
* guix/scripts/package.scm (show-help): Likewise.
* guix/scripts/upgrade.scm (show-help): Likewise.
2020-11-21 12:39:14 +01:00
Brice Waegeneire
becfa42ea7
scripts: lint: Display result of checkers on stdout.
* guix/scripts/lint.scm (emit-warnings): Use 'current-output-port'
instead of 'current-error-port'.

Signed-off-by: Christopher Baines <mail@cbaines.net>
2020-11-21 10:23:08 +00:00
Marius Bakke
be8a0881f1
build-system/cargo: Do not pass --features to Cargo unless specified.
Fixes <https://bugs.gnu.org/44692>.

* guix/build/cargo-build-system.scm (build): Default to the empty list for
FEATURES.  Check whether the list is empty when building the Cargo arguments.
2020-11-20 09:58:04 +01:00
Marius Bakke
35ed83beae
Merge branch 'master' into staging 2020-11-19 00:04:32 +01:00
Miguel Ángel Arruga Vivas
9b5e1cc11f
guix: refresh: Do not use argument jumping with ngettext.
* guix/scripts/refresh.scm (list-dependents)[lst]: Use ~d for the
singular format string, as the argument jumping would trigger an error
during en@boldquot.mo generation.
2020-11-18 20:58:51 +01:00
Maxim Cournoyer
129b9b16d9
Merge remote-tracking branch 'origin/version-1.2.0' into master
Conflicts:
	gnu/packages/bioinformatics.scm

The python-pysam package fixed in master was kept instead of the update done
in the version-1.2.0 branch.
2020-11-17 18:00:28 -05:00
Maxim Cournoyer
41f27bf870
guix: system: Make disk-image root file system non-volatile by default.
And add a new '--volatile' option to have it volatile otherwise.

* guix/scripts/system.scm (%options)[volatile-root?]: New boolean option.
(%default-options): Set its default value to #f.
(show-help): Add help doc.
* guix/scripts/system.scm (perform-action): Propagate option...
(system-derivation-for-action): ...here.  Use it to set the volatile-root?
field of the image object passed to SYSTEM-IMAGE.
* doc/guix.texi (Invoking guix system): Document it.
2020-11-17 15:20:03 -05:00
Florian Pelz
29ed17d634
pull: Do not suggest running `guix pull --news' on the first run.
* guix/scripts/pull.scm (display-channel-news-headlines): If there
are no news to display, return false instead of <unspecified>.
2020-11-16 13:44:29 +00:00
Ludovic Courtès
98750a9d99
self: Limit the number of threads used when translating manuals.
* guix/self.scm (translate-texi-manuals)[build](parallel-jobs): New
variable.
Use it as first argument to 'n-par-for-each'.
2020-11-16 11:40:53 +01:00
Danny Milosavljevic
b720cf90e7
utils: Add 'cxx-for-target'.
* guix/utils.scm (cxx-for-target): New procedure.
2020-11-16 10:26:46 +01:00
Maxim Cournoyer
630602831d
publish: Harmonize buffer size values and configuration.
This change harmonizes the way we configure the buffer sizes and the socket
options, so that we don't forget to change it at one place like it happened in
commit 5e3d169945.

* guix/scripts/publish.scm (%default-buffer-size)
(%default-socket-options): New variables.
* guix/scripts/publish.scm (configure-socket): New procedure.
(compress-nar): Use %default-buffer-size for the buffer size, increased from
128 to 208 KiB.
(nar-response-port): Likewise, increased from 64 to 208 KiB.
(http-write): Use configure-socket to set socket options.
(open-server-socket): Likewise.
2020-11-16 00:04:32 -05:00
Marius Bakke
4e5e05d409
Merge branch 'master' into staging 2020-11-15 23:45:34 +01:00
Tobias Geerinckx-Rice
5d15733c42
archive: Warn about replacing an ACL symlink.
* guix/scripts/archive.scm (authorize-key): Warn when %ACL-FILE is a
symbolic link and print an additional hint for Guix System users.

Co-authored-by: Ludovic Courtès <ludo@gnu.org>
2020-11-15 23:05:34 +01:00
Holger Peters
521d33cdc6
guix: hg-download: Add hg-predicate.
`hg-predicate' acts for mercurial repositories as `git-predicate' acts
for git-repositories.

* guix/hg-download.scm (hg-predicate): New procedure.

Signed-off-by: Christopher Baines <mail@cbaines.net>
2020-11-14 10:27:00 +00:00
John Soo
0cdc13ce43
guix build: Expose log-url for third parties.
* guix/scripts/build.scm (log-url): Expose it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-11-13 18:11:30 +01:00
John Soo
e783cd51ba
pack: Expose some bindings for third-party use.
* guix/scripts/pack.scm (compressor-name, compressor-extension,
compressor-command, %compressors, %formats): Export.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-11-13 18:10:11 +01:00
Ludovic Courtès
07914def98
Merge branch 'version-1.2.0' 2020-11-12 10:47:25 +01:00
Ludovic Courtès
b73981369e
lint: patch-file-names: Simplify 'search-patch' error handling.
* guix/lint.scm (check-patch-file-names): Remove 'message-condition?'
guard, which is useless since d51bfe242f.
Remove call to 'format' in the 'formatted-message?' case.
2020-11-12 09:29:05 +01:00
Marius Bakke
a9a0d34874
Merge branch 'master' into staging 2020-11-11 00:02:32 +01:00
Ludovic Courtès
1cbda46d4a
publish: Increase TCP buffer size when sending non-cached nars.
This increases throughput tenfold (!) on localhost when downloading
large nars without '--cache'.  This is a followup to
5e3d169945.

Reported by Maxim Cournoyer.

* guix/scripts/publish.scm (http-write): In the
'application/x-nix-archive' case, add call to 'setsockopt'.
2020-11-10 22:56:38 +01:00
Julien Lepiller
6ed2741a35
guix: ocaml: Add package-with-ocaml4.09.
* guix/build-system/ocaml.scm (package-with-ocaml4.09)
(strip-ocaml4.09-variant): New variables.
* gnu/packages/ocaml.scm (ocaml4.09-result, ocaml4.09-csexp)
(ocaml4.09-dune-configurator, ocaml4.09-dune): New variables.
2020-11-10 16:02:59 +01:00
Ludovic Courtès
362529963e
ui: Use the right accessor when reporting '&gexp-input-error'.
* guix/ui.scm (call-with-error-handling): In the 'gexp-input-error?'
case, use 'gexp-error-invalid-input' as the accessor.
2020-11-10 14:40:20 +01:00
Ludovic Courtès
d754757628
publish: Create files in the cache as #o644.
Reported by Ricardo Wurmus <rekado@elephly.net>.

* guix/scripts/publish.scm (compress-nar): Add 'chmod' call to ensure
PORT is #o644, in the uncompressed case.
(bake-narinfo+nar): Likewise for the narinfo file.
* tests/publish.scm ("with cache"): Check permissions on CACHED and NAR.
2020-11-09 23:27:09 +01:00
Ludovic Courtès
464e7437f4
publish: Create files in the cache as #o644.
Reported by Ricardo Wurmus <rekado@elephly.net>.

* guix/scripts/publish.scm (compress-nar): Add 'chmod' call to ensure
PORT is #o644, in the uncompressed case.
(bake-narinfo+nar): Likewise for the narinfo file.
* tests/publish.scm ("with cache"): Check permissions on CACHED and NAR.
2020-11-08 23:39:33 +01:00
Marius Bakke
32787d6524
Merge branch 'master' into staging
Conflicts:
	gnu/local.mk
	gnu/packages/gdb.scm
	gnu/packages/lisp-xyz.scm
	gnu/packages/web-browsers.scm
2020-11-07 21:33:32 +01:00
Ludovic Courtès
db1b18c397
ui: Add missing format argument in 'warn-about-load-error'.
* guix/ui.scm (warn-about-load-error): Add missing argument to 'warning'.
2020-11-06 21:42:39 +01:00
Ludovic Courtès
4db90a6c15
pack: Do not include the host (guix config).
* guix/scripts/pack.scm (store-database)[build]: Import a
synthetic (guix config).
2020-11-05 16:13:50 +01:00
Ludovic Courtès
ca465a9c84
gexp: Warn when importing (guix config) or (ice-9 …).
While importing those modules from the host system is valid, it is often
a mistake that introduces non-reproducibility.  This patch prints a
warning when that happens.

* guix/gexp.scm (gexp-attribute): Add #:validate parameter and honor it.
(gexp-modules)[validate-modules]: New procedure.
Pass it to 'gexp-attribute'.
* tests/gexp.scm ("gexp-modules, warning"): New test.
2020-11-05 16:13:50 +01:00
Ludovic Courtès
18fc84bce8
gexp: Store the source code location in <gexp>.
* guix/gexp.scm (<gexp>)[location]: New field.
(gexp-location): New procedure.
(write-gexp): Print the location of GEXP.
(gexp->derivation): Adjust call to 'make-gexp'.
(gexp): Likewise.
2020-11-05 16:13:50 +01:00
Ludovic Courtès
5e7cf66fb3
publish: Do not path the empty string to 'query-path-info'.
Fixes <https://bugs.gnu.org/44442>.
Regression introduced in 2b2ab7796a.

* guix/scripts/publish.scm (render-nar/cached): Do not call
'bypass-cache?' when ITEM is the empty string.
* tests/publish.scm ("with cache, cache bypass, unmapped hash part"):
New test.
2020-11-04 16:02:53 +01:00
Robert Vollmert
f0bb2662bb
guix import stackage: Default to LTS version that matches GHC.
In particular, this means that 'guix lint' won't warn to update to
versions that won't necessarily fit our package set well.

* guix/import/stackage.scm (%stackage-url): Change to "https",
avoiding redirect log messages.
(%default-lts-version): New variable.
(stackage-lts-info-fetch, stackage->guix-package,
latest-lts-release): Use it.
(lts-info-ghc-version): Remove unused procedure.

Signed-off-by: Timothy Sample <samplet@ngyro.com>
2020-11-03 15:36:59 -05:00
Mathieu Othacehe
a38d861e57
system: reconfigure: Use the disk-installer if provided.
Fixes: <https://issues.guix.gnu.org/44101>.

* gnu/build/bootloader.scm (write-file-on-device): Pass 'no-fail flag instead
of 'no-create. Use a latin-1 transcoder.
* guix/scripts/system/reconfigure.scm (install-bootloader-program): Add a
"disk-installer" argument and use it as a fallback.
(install-bootloader): Adapt accordingly.
* gnu/tests/reconfigure.scm (run-install-bootloader-test): Ditto.
2020-11-03 07:59:59 +01:00
Ludovic Courtès
76ea70bd70
profiles: Add fast path for 'xdg-mime-database' hook.
Partly fixes <https://bugs.gnu.org/44053>.
Reported by Joshua Branson <jbranso@dismail.de>
and Maxim Cournoyer <maxim.cournoyer@gmail.com>.

* guix/profiles.scm (xdg-mime-database): When PKGDIRS contains only one
element, symlink directly to it.  Invoke 'update-mime-database' only
when PKGDIRS contains two or more elements, which is less frequent.
2020-11-02 14:59:34 +01:00
Miguel Ángel Arruga Vivas
582cf9257c
system: Add store-directory-prefix to boot-parameters.
Fixes <http://issues.guix.gnu.org/44196>

* gnu/machine/ssh.scm (roll-back-managed-host): Use
boot-parameters-store-directory-prefix.
* gnu/system.scm (define-module): Export
boot-parameters-store-directory-prefix.
(<boot-parameters>)[store-directory-prefix]: New field. It is used to
generate the correct paths when /gnu/store is installed on a btrfs
subvolume whose name doesn't match the final runtime path, as the
bootloader doesn't have knowledge about the final mounting points.
[boot-parameters-store-directory-prefix]: New accessor.
(read-boot-parameters): Read directory-prefix from store field.
(operating-system-boot-parameters-file): Add directory-prefix to
store field.
* guix/scripts/system.scm (reinstall-bootloader): Use
boot-parameters-store-directory-prefix.
* test/boot-parameters.scm (%default-btrfs-subvolume,
%default-store-directory-prefix): New variables.
(%grub-boot-parameters): Use %default-store-directory-prefix.
(%default-operating-system): Use %default-btrfs-subvolume.
(test-boot-parameters): Add directory-prefix.
(test optional fields): Add test for directory-prefix.
(test os store-directory-prefix): New test.
2020-11-01 02:28:38 +01:00
Ludovic Courtès
31726f32ac
transformations: Raise '&formatted-message' exceptions instead of 'leave'.
* guix/transformations.scm (evaluate-replacement-specs)
(package-git-url, evaluate-git-replacement-specs)
(transform-package-source-git-url)
(transform-package-toolchain): Use 'raise' and 'formatted-message'
instead of 'leave'.
2020-10-31 23:16:43 +01:00
Ludovic Courtès
f68b3ba12d
guix build: Move transformation options to (guix transformations).
* guix/transformations.scm: New file.
* tests/scripts-build.scm: Rename to...
* tests/transformations.scm: ... this.
* Makefile.am (MODULES): Add 'guix/transformations.scm'.
(SCM_TESTS): Adjust to rename.
* guix/scripts/build.scm (numeric-extension?)
(tarball-base-name, <downloaded-file>, download-to-store*)
(compile-downloaded-file, package-with-source)
(transform-package-source, evaluate-replacement-specs)
(transform-package-inputs, transform-package-inputs/graft)
(%not-equal, package-git-url, evaluate-git-replacement-specs)
(transform-package-source-branch, transform-package-source-commit)
(transform-package-source-git-url, package-dependents/spec)
(package-toolchain-rewriting, transform-package-toolchain)
(transform-package-with-debug-info, transform-package-tests)
(%transformations, transformation-procedure, %transformation-options)
(show-transformation-options-help, options->transformation)
(package-transformations): Move to (guix transformations).
* guix/scripts/environment.scm: Adjust accordingly.
* guix/scripts/graph.scm: Likewise.
* guix/scripts/install.scm: Likewise.
* guix/scripts/pack.scm: Likewise.
* guix/scripts/package.scm: Likewise.
* guix/scripts/upgrade.scm: Likewise.
* po/guix/POTFILES.in: Add 'guix/transformations.scm'.
2020-10-31 23:16:43 +01:00
Ludovic Courtès
1ae33664a6
guix build: 'options->transformation' no longer takes a 'store' parameter.
* guix/scripts/build.scm (transform-package-source)
(transform-package-inputs, transform-package-inputs/graft)
(transform-package-source-branch, transform-package-source-commit)
(transform-package-source-git-url, transform-package-toolchain)
(transform-package-with-debug-info, transform-package-tests): Remove
'store' parameter.
(options->transformation, options->derivations): Adjust accordingly.
* guix/scripts/environment.scm (options/resolve-packages): Likewise.
* guix/scripts/graph.scm (guix-graph): Likewise.
* guix/scripts/pack.scm (guix-pack): Likewise.
* guix/scripts/package.scm (transaction-upgrade-entry): Likewise.
(process-actions): Likewise.
* tests/scripts-build.scm ("options->transformation, no transformations")
("options->transformation, with-source, replacement"):
Adjust tests.
("options->transformation, with-source")
("options->transformation, with-source, with version")
("options->transformation, with-source, PKG=URI"): Use 'lower-object' to
compute the store file name of the source.
("options->transformation, with-source, no matches"): Remove
'with-store' and adjust accordingly.
("options->transformation, with-input"): Likewise.
("options->transformation, with-graft"): Likewise.
("options->transformation, with-branch"): Likewise.
("options->transformation, with-commit"): Likewise.
("options->transformation, with-git-url"): Likewise.
("options->transformation, with-git-url + with-branch"): Likewise.
("options->transformation, with-c-toolchain"): Likewise.
("options->transformation, with-c-toolchain twice"): Likewise.
("options->transformation, with-c-toolchain, no effect"): Likewise.
("options->transformation, with-debug-info"): Likewise.
("options->transformation, without-tests"): Likewise.
2020-10-31 23:16:43 +01:00
Ludovic Courtès
e72cc79263
guix build: Remove unnecessary (replacement #f).
* guix/scripts/build.scm (package-with-source): Remove 'replacement'
field, which is innate since d5ec5ed719.
2020-10-31 23:16:43 +01:00
Ludovic Courtès
139c4ac199
guix build: 'package-with-source' no longer takes a 'store' parameter.
* guix/scripts/build.scm (<downloaded-file>): New record type.
(download-to-store*): New variable.
(compile-downloaded-file): New procedure.
(package-with-source): Remove 'store' parameter.  Use 'downloaded-file'
instead of 'download-to-store'.
(transform-package-source): Adjust accordingly.
2020-10-31 23:16:42 +01:00
Eric Bavier
4184998c70
guix: pack: Only wrap executable files.
* guix/scripts/pack.scm (wrapped-package)<build>: Build wrappers for
executable files and symlink others.
* tests/guix-pack-relocatable.sh: Test relocatable example of mixed
executable and non-executable files.
2020-10-30 10:00:35 -05:00
Eric Bavier
a73896425e
guix: pack: Fix offset calculation for store directory mount point.
Fixes wrapping of non-package things, where the target store directory may
differ in length from the original.

* guix/scripts/pack.scm (wrapped-package)<build-wrapper>: Define
WRAPPER_PROGRAM macro with wrapper's file name.
* gnu/packages/aux-files/run-in-namespace.c (main): Offset index by len of
that file name.
2020-10-30 10:00:29 -05:00
zimoun
58db2e6877
scripts: lint: Add '--exclude' option.
* guix/scripts/lint.scm (%options, parse-options): Add '--exclude' option.
(option-checker): New helper function.
* doc/guix.texi (Invoking guix lint): Document it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-10-30 01:14:20 +01:00
zimoun
80c7f02468
scripts: lint: Fix '--no-network' option.
* guix/scripts/lint.scm: (show-help): Add '--no-network' option message.
(%options, parse-options): Fix argument order.
* doc/guix.texi (Invoking guix lint): Document it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-10-30 01:14:20 +01:00
Vagrant Cascadian
159c5943e4
build/maven: Fix typo.
* guix/build/maven/pom: Fix spelling of "with".
2020-10-28 21:11:11 -07:00
Vagrant Cascadian
28680722b2
build/maven: fix-pom-dependencies: Fix typo.
* guix/build/maven/pom (fix-pom-dependencies): Fix spelling of "overrides".
2020-10-28 21:11:06 -07:00
Vagrant Cascadian
05ee7ef8b7
build/maven: fix-pom-dependencies: Fix typo.
* guix/build/maven/pom (fix-pom-dependencies): Fix spelling of "overridden".
2020-10-28 21:11:01 -07:00