Commit Graph

2051 Commits

Author SHA1 Message Date
Efraim Flashner
bc5155b952
Merge remote-tracking branch 'origin/master' into core-updates-frozen 2021-10-31 14:49:47 +02:00
Ludovic Courtès
6f4ca78761
home: import: Avoid duplication of 'manifest->code'.
* guix/scripts/home/import.scm (manifest->code): Remove.
(manifest+configuration-files->code): New procedure.
(import-manifest): Use 'manifest+configuration-files->code' instead of
'manifest->code'.
* tests/home-import.scm (eval-test-with-home-environment): Likewise.
(match-home-environment-transformations): New procedure.
("manifest->code: No services, package transformations"): New test.
2021-10-31 00:51:06 +02:00
Ludovic Courtès
96728c54df
home: import: Factorize triplicated 'version-spec' procedure.
* guix/scripts/package.scm (manifest-entry-version-prefix): New
procedure, moved from...
(export-manifest)[version-spec]: ... here.  Adjust caller.
* tests/home-import.scm (version-spec): Remove.
(eval-test-with-home-environment): Use 'manifest-entry-version-prefix'
instead.
* guix/scripts/home/import.scm (import-manifest): Likewise.
2021-10-31 00:51:06 +02:00
Ludovic Courtès
f3933ae40d
home: import: Clarify "destination directory".
Suggested by Liliana Marie Prikler <liliana.prikler@gmail.com>.

* guix/scripts/home/import.scm (configurations+modules): Rename
'destination-directory' to 'configuration-directory'.  Improve
docstring.
2021-10-31 00:51:06 +02:00
Ludovic Courtès
341fba217f
home: import: Compare procedures with 'eq?'.
'procedure-name' is a debugging aid and cannot be reliably used to
check for procedure equality.

* guix/scripts/home/import.scm (configurations+modules): Remove use of
'procedure-name'.
2021-10-31 00:51:06 +02:00
Xinglu Chen
ea19381bd9
guix home: import: Call ‘local-file’ with ‘name’
Set the name of the file to just the basename of the file passed to
‘local-file’.

* guix/scripts/home/import.scm (basename+remove-dots): New procedure.
(generate-bash-configuration+modules): Use it.
* tests/home-import.scm (match-home-environment-bash-service): Adjust
accordingly.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-10-31 00:51:06 +02:00
Xinglu Chen
40acbaf078
Add tests for ‘guix home import’.
* tests/home-import.scm: New file.
* Makefile.am (SCM_TESTS): Add it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-10-31 00:51:05 +02:00
Xinglu Chen
256bd71264
guix home: import: Delete duplicate modules when importing.
Two different services might require the same module(s), so delete duplicates
when generating the ‘use-modules’ form.

* import.scm (manifest->code): Delete duplicate modules.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-10-31 00:51:05 +02:00
Xinglu Chen
e12e8aad35
guix home: import: Don’t use 'slurp-file-gexp'.
‘slurp-file-gexp’ is not a bound procedure.

* guix/scripts/home/import.scm (generate-bash-configuration+modules): Don’t
  use ‘slurp-file-gexp’.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-10-31 00:51:05 +02:00
Xinglu Chen
3be1a982f3
guix home: import: Fix module name for Bash service.
* guix/scripts/home/import.scm (generate-bash-configuration+modules): Change
(gnu home-services bash) to (gnu home-services shells); add (guix gexp).

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-10-31 00:51:05 +02:00
Xinglu Chen
e4d09d25ae
guix home: import: Allow multiple modules to be imported for each service.
Previously, only one module could be imported for each service, e.g., only
(gnu home-services shell) could be imported when generating the Bash service
declaration.  However, for some services, multiple modules might need to be
imported in order for it to work.

* guix/scripts/home/import.scm (generate-bash-module+configuration): Rename to
...
(generate-bash-configuration+modules): ... this.
(%files-configurations-alist): Rename to ...
(%files+configurations-alist): ... this.
(modules+configurations): Rename to ...
(configurations+modules): ... this.
(manifest->code): Adjust accordingly.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-10-31 00:51:05 +02:00
Xinglu Chen
d5eb05f01e
guix home: import: Make the user to specify a destination directory.
Copy the appropriate the relevant configuration files to the destination
directory, and call ‘local-file’ on them.

Without this, ‘guix home import’ will generate a service declaration like this

  (service
   home-bash-service-type
   (home-bash-configuration
    (bashrc
     (list (slurp-file-gexp
            (local-file "/home/yoctocell/.bashrc"))))))

but when running ‘guix home reconfigure’, the ~/.bashrc file would be moved, so
when running ‘guix home reconfigure’ for the second time, it would read the
~/.bashrc which is itself a symlink to a file the store.

* guix/scripts/home/import.scm (generate-bash-module+configuration): Take
‘destination-directory’ parameter
(modules+configurations): Copy the user’s configuration file to
‘%destination-directory’.
* guix/scripts/home.scm (process-command): Adjust accordingly; create
‘destination’ if it doesn’t exist.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-10-31 00:51:05 +02:00
Ludovic Courtès
98173af522
shell: Error out when an unauthorized guix.scm/manifest.scm is found.
The previous behavior was confusing: a warning would be printed and
'guix shell' would go on starting an empty environment.

Reported by Tobias Geerinckx-Rice <me@tobias.gr>.

* guix/scripts/shell.scm (auto-detect-manifest): Change "not loading"
case from warning to error.
* tests/guix-shell.sh: Adjust accordingly.
2021-10-30 19:12:40 +02:00
Zhu Zihao
bcc4aef0db
environment: Fix broken file-local variable.
* guix/scripts/environment.scm (Local Variables): Add missing eval.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-10-28 00:44:10 +02:00
Ludovic Courtès
409f538d65
shell: Suggest running '--check' once for interactive use.
* guix/scripts/shell.scm (hint-directory, hint-file, record-hint)
(hint-given?): New procedures.
(guix-shell): Record and probe the 'shell-check' hint.
2021-10-26 12:46:28 +02:00
Ludovic Courtès
9e46942c1c
environment: Add '--check'.
* guix/scripts/environment.scm (show-environment-options-help)
(%options): Add '--check'.
* guix/scripts/environment.scm (child-shell-environment)
(validate-child-shell-environment): New procedures.
(guix-environment*): Call 'validate-child-shell-environment' when
'check?' key is in OPTS.
* doc/guix.texi (Invoking guix shell): Shorten footnote about Bash
startup files.  Document '--check' and mention startup files.
(Invoking guix environment): Document '--check'.
2021-10-26 12:46:27 +02:00
Ludovic Courtès
9730692d9f
shell: Maintain a profile cache.
shell: Maintain a profile cache.

With this change, running "guix shell" (no arguments) is equivalent to:

  guix environment -r ~/.cache/guix/profiles/some-root -l guix.scm

This is the cache miss.  On cache hit, it's equivalent to:

  guix environment -p ~/.cache/guix/profiles/some-root

... which can run in 0.1s.

* guix/scripts/shell.scm (options-with-caching): New procedure.
(parse-args): Use it.
(%profile-cache-directory): New variable.
(profile-cache-key, profile-cached-gc-root): New procedures.
(show-help, %options): Add '--rebuild-cache'.
(guix-shell)[cache-entries, entry-expiration]: New procedures.
Add call to 'maybe-remove-expired-cache-entries'.
* doc/guix.texi (Invoking guix shell): Document '--rebuild-cache'.
2021-10-25 19:02:33 +02:00
Ludovic Courtès
3c96158438
environment: Autoload some modules.
This further speeds up the 'guix environment -p PROFILE' case.

* guix/scripts/environment.scm: Autoload a bunch of modules.
2021-10-25 19:02:33 +02:00
Ludovic Courtès
99499a2037
environment: Do not connect to the daemon when '--profile' is used.
This further speeds up the 'guix environment -p PROFILE' case.

* guix/scripts/environment.scm (guix-environment*)[store-needed?]: New
variable.
[with-store/maybe]: New macro.
Use it instead of 'with-store', and remove 'with-build-handler' form.
2021-10-25 19:02:33 +02:00
Ludovic Courtès
648a6eb03f
environment: Skip derivation computation when '--profile' is used.
* guix/scripts/environment.scm (guix-environment*): Bypass calls to
'package-derivation' and to 'manifest->derivation' when PROFILE is
true.
2021-10-25 19:02:33 +02:00
Ludovic Courtès
746584e0ca
shell: By default load the local 'manifest.scm' or 'guix.scm' file.
* guix/scripts/shell.scm (parse-args): Add call to 'auto-detect-manifest'.
(authorized-directory-file, authorized-shell-directory?)
(find-file-in-parent-directories, auto-detect-manifest): New procedures.
* tests/guix-shell.sh: Add test.
* doc/guix.texi (Invoking guix shell): Document it.
2021-10-25 19:02:23 +02:00
Ludovic Courtès
80edb7df65
Add 'guix shell'.
* guix/scripts/shell.scm, tests/guix-shell.sh: New files.
* Makefile.am (MODULES): Add 'shell.scm'.
(SH_TESTS): Add 'tests/guix-shell.sh'.
* guix/scripts/environment.scm (show-environment-options-help): New
procedure.
(show-help): Use it.
(guix-environment*): New procedure.
(guix-environment): Use it.
* po/guix/POTFILES.in: Add it.
* doc/guix.texi (Features): Refer to "guix shell"
(Invoking guix package): Likewise.
(Development): Likewise.
(Invoking guix shell): New node.
(Invoking guix environment): Add deprecation warning.
(Debugging Build Failures): Use 'guix shell' in examples.
(Invoking guix container): Refer to 'guix shell'.
(Invoking guix processes, Virtualization Services): Adjust examples to
use 'guix shell'.
* doc/contributing.texi (Building from Git): Refer to 'guix shell'.
* etc/completion/bash/guix: Handle "shell".
2021-10-25 18:58:18 +02:00
Ludovic Courtès
23f99f1a29
profiles: Add 'package->development-manifest'.
* guix/profiles.scm (package->development-manifest): New procedure.
* guix/scripts/environment.scm (input->manifest-entry)
(package-environment-inputs): Remove.
* guix/scripts/environment.scm (options/resolve-packages): Use
'package->development-manifest' instead of 'package-environment-inputs'.
* tests/profiles.scm ("package->development-manifest"): New test.
2021-10-25 15:29:42 +02:00
Ludovic Courtès
fb368f4e76
packages: Add 'package-development-inputs'.
* guix/packages.scm (package-development-inputs): New procedure.
* guix/scripts/environment.scm (package-environment-inputs): Use it.
* tests/packages.scm ("package-development-inputs")
("package-development-inputs, cross-compilation"): New tests.
* doc/guix.texi (package Reference): Document it.
2021-10-25 15:29:39 +02:00
Mathieu Othacehe
e486b2b674
Merge remote-tracking branch 'signed/master' into core-updates 2021-10-18 14:37:26 +00:00
Ludovic Courtès
058ea2672b
refresh: Report suggested input changes with 'info'.
* guix/scripts/refresh.scm (update-package): Define 'field', 'name',
'loc', and 'change-name'.  Use 'info' rather than 'format' to report
suggested input changes.
2021-10-15 23:16:29 +02:00
Mathieu Othacehe
a1eca979fb
Merge remote-tracking branch 'origin/master' into core-updates-frozen. 2021-10-12 17:46:23 +00:00
Mathieu Othacehe
d5073fd113
gnu: Add platform support.
* gnu/platform.scm: New file.
* gnu/platforms/arm.scm: Ditto.
* gnu/platforms/hurd.scm: Ditto.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add them.

Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
2021-10-11 12:05:39 +00:00
Oleg Pykhalov
fee0bced7f
home: services: configuration: Support file-like objects.
* gnu/home/services/configuration.scm (interpose): Operate only with file-like
objects.
(string-or-gexp?): Delete procedure.
(serialize-string-or-gexp): Rename to 'serialize-file-like'.
(text-config?): Call 'file-like' intead of 'string-or-gexp?'.
* guix/scripts/home/import.scm:
(generate-bash-module+configuration): Don't call slurp-file-gexp.
* gnu/home/services/configuration.scm: Move content ...
* gnu/services/configuration.scm: here.
* gnu/home/services/shells.scm: Delete (gnu home services configuration).
* gnu/home/services/xdg.scm: Same.
* gnu/local.mk: Same.
* tests/guix-home.sh:
Test home-bash-service-type and extension with home-bash-extension.
2021-10-09 19:24:19 +03:00
Oleg Pykhalov
0f6a27c2c4
scripts: home: Make sure profile directory exists.
* guix/scripts/home.scm (process-action): Make sure profile directory exists.
2021-10-09 19:24:19 +03:00
Oleg Pykhalov
0e8d2df0f1
Move (gnu home-services) to (gnu home services).
* gnu/home-services.scm (%guix-home-root-directory): Replace
gnu/home-services.scm with "gnu/home/services.scm".
Rename to gnu/home/services.scm.
* gnu/local.mk
(GNU_SYSTEM_MODULES): Rename gnu/home-services.scm to gnu/home/services.scm.
* doc/he-config-bare-bones.scm:
Replace (gnu home-services) with (gnu home services).
* gnu/home.scm: Same.
* gnu/home/services/fontutils.scm: Same.
* gnu/home/services/mcron.scm: Same.
* gnu/home/services/shells.scm: Same.
* gnu/home/services/shepherd.scm: Same.
* gnu/home/services/symlink-manager.scm: Same.
* gnu/home/services/xdg.scm: Same.
* guix/scripts/home.scm: Same.
* guix/self.scm: Same.
2021-10-09 19:24:18 +03:00
Tobias Geerinckx-Rice
a1679b74c9
Revert the #51061 patch series for now.
This reverts commits f63c79bf76
..f86f7e24b39928247729020df0134e2e1c4cde62 for more chillax reviewing.

See <https://issues.guix.gnu.org/51061#32>.
2021-10-08 23:31:34 +02:00
Oleg Pykhalov
ba8ddb3480
gnu: Move (gnu home-services) to (gnu home services).
* gnu/home-services/configuration.scm: Move the content ...
* gnu/home/services/configuration.scm: ... here.
* doc/guix.texi:
Replace (gnu home-services mcron) with (gnu home services mcron).
Replace (gnu home-services) with (gnu home services).
* gnu/home.scm:
Replace (gnu home-services fontutils) with (gnu services fontutils).
Replace (gnu home-services shells) with (gnu home services shells).
Replace (gnu home-services symlink-manager) with
(gnu home services symlink-manager).
Replace (gnu home-services xdg) with (gnu home services xdg).
* gnu/home-services/fontutils.scm: Rename to gnu/services/fontutils.scm.
* gnu/home-services/mcron.scm: Move to gnu/home/services/mcron.scm.
Replace (gnu home-services shepherd) with (gnu home services shepherd).
* gnu/home-services.scm (%service-type-path):
Search home services in "gnu/services".
* gnu/home-services/shells.scm: Replace (gnu home-services configuration) with
(gnu home services configuration).
Rename to gnu/home/services/shells.scm.
Replace (gnu home-services utils) with (gnu home services utils).
* gnu/home-services/shepherd.scm: Move to gnu/home/services/shepherd.scm.
* gnu/home-services/symlink-manager.scm:
Rename to gnu/home/services/symlink-manager.scm.
* gnu/home-services/utils.scm: Rename to gnu/home/services/utils.scm.
* gnu/home-services/xdg.scm: Rename to gnu/home/services/xdg.scm.
* guix/scripts/home/import.scm:
Replace (gnu home-services bash) with (gnu home services bash).
* gnu/home-services.scm: Update documentation string.
* doc/he-config-bare-bones.scm:
Apply new (gnu home-services ...) modules location.
* gnu/local.mk (GNU_SYSTEM_MODULES): Same.
2021-10-08 15:36:18 +03:00
Hartmut Goebel
d780d0a2bb
import: Add hex.pm importer.
hex.pm is a package repository for Erlang and Elixir.

* guix/scripts/import.scm (importers): Add "hexpm".
* guix/scripts/import/hexpm.scm, guix/import/hexpm.scm,
  guix/hexpm-download.scm: New files.
* guix/import/utils.scm (source-spec->object): Add "hexpm-fetch" to list of
  fetch methods.
* guix/upstream.scm (package-update/hexpm-fetch): New function.
  (%method-updates) Add it.
* Makefile.am: Add them.
2021-10-07 22:35:28 +02:00
Ludovic Courtès
3f717a09e7
guix system: Adjust bootloader message to plural "targets".
This is a followup to 2ca982ff41.

* guix/scripts/system.scm (install): Adjust message to plural 'targets'.
2021-10-07 10:47:43 +02:00
Mathieu Othacehe
f743f2046b
publish: Defer narinfo string creation to the http-write.
The "narinfo-string" procedure is expensive in term of IO operations and can
take a while under IO pressure, such a GC collecting. Defer its call to a new
thread created in the http-write procedure.

Fixes: <https://issues.guix.gnu.org/48468>
Partially fixes: <https://issues.guix.gnu.org/49089>

* guix/scripts/publish.scm (render-narinfo): Defer the narinfo string creation
to the http-write procedure.
(compression->sexp, sexp->compression): New procedures.
("X-Nar-Compression"): Use them.
("X-Narinfo-Compressions"): New custom header.
(strip-headers): Add the x-nar-path header.
(http-write): Add narinfo on-the-fly creation support. It happens in a
separated thread to prevent blocking the main thread.
2021-10-05 18:55:55 +00:00
Efraim Flashner
6a544b2130
scripts: home: Support dry-run.
* guix/scripts/home.scm (%options): Add option for dry-run.
2021-10-04 11:26:43 +03:00
Pierre Langlois
20bc9ecc20
scripts: home: Wire and document --expression flag.
* guix/scripts/home.scm (show-help): Add --expression option.
(%options): Likewise.
* doc/guix.texi (Invoking guix home): Document it.
2021-10-02 21:21:19 +01:00
Ludovic Courtès
2bec19199e
style: Really honor '--input-simplification=always'.
* guix/scripts/style.scm (simplify-package-inputs): Use (const #t) when
POLICY is 'always.
2021-09-30 00:06:30 +02:00
Andrew Tropin
badf788f15
home-services: Add missing imports and function definition.
* gnu/home-services/configuration.scm: Add missing imports.
* gnu/home-services/utils.scm (list->human-readable-list): Add new function.
* gnu/home-services/configuration.scm: Add missing imports.
* gnu/home-services/xdg.scm: Fix ensure-list function.
* guix/scripts/home/import.scm: Add missing imports.

Signed-off-by: Oleg Pykhalov <go.wigust@gmail.com>
2021-09-28 13:50:21 +03:00
Oleg Pykhalov
6ae4644984
Merge branch 'wip-guix-home' 2021-09-27 17:27:12 +03:00
Ludovic Courtès
5b32ad4f6f
graph: Add '--max-depth'.
* guix/graph.scm (export-graph): Add #:max-depth and honor it, adding
'depths' argument to 'loop'.
* guix/scripts/graph.scm (%options, show-help): Add '--max-depth'.
(%default-options): Add 'max-depth'.
(guix-graph): Pass #:max-depth to 'export-graph'.
* tests/graph.scm ("package DAG, limited depth"): New test.
* doc/guix.texi (Invoking guix graph): Document it.
2021-09-21 15:15:52 +02:00
Marius Bakke
5c3cb22c9b
Merge branch 'master' into core-updates-frozen
Conflicts:
	gnu/packages/bioinformatics.scm
	gnu/packages/chez.scm
	gnu/packages/docbook.scm
	gnu/packages/ebook.scm
	gnu/packages/gnome.scm
	gnu/packages/linux.scm
	gnu/packages/networking.scm
	gnu/packages/python-web.scm
	gnu/packages/python-xyz.scm
	gnu/packages/tex.scm
	gnu/packages/version-control.scm
	gnu/packages/xml.scm
	guix/build-system/dune.scm
	guix/build-system/go.scm
	guix/build-system/linux-module.scm
	guix/packages.scm
2021-09-17 01:25:52 +02:00
Xinglu Chen
08c7e7df15
scripts: import: Increase column width for pretty-printer.
Previously, the max column width for the pretty-printer was 50, which caused
generated package definitions to include unnecessary newlines, e.g.,

  (home-page
    "https://gitlab.com/ttyperacer/terminal-typeracer")

instead of

  (home-page "https://gitlab.com/ttyperacer/terminal-typeracer")

* guix/scripts/import.scm (guix-import): Set max expression width to 80 when
pretty-printing.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-09-14 11:50:58 +02:00
Andrew Tropin
879abff4fd
scripts: home: Add import subcommand.
* guix/scripts/home/import.scm: New file.
* Makefile.am (MODULES): Add it.

Signed-off-by: Oleg Pykhalov <go.wigust@gmail.com>
2021-09-09 20:26:51 +03:00
Andrew Tropin
89e05a6955
scripts: Add 'guix home'.
* guix/scripts/home.scm: New file.
* Makefile.am (MODULES): Add it.

Signed-off-by: Oleg Pykhalov <go.wigust@gmail.com>
2021-09-09 20:26:51 +03:00
zimoun
b8b56badd3
system: Add hint for action typo.
* guix/scripts/system.scm (actions): New variable.
(define-command): Add hint for action typo.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-09-07 15:59:34 +02:00
zimoun
1cf866c863
import: Add hint for importer typo.
* guix/scripts/import.scm (define-command): Add hint.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-09-07 15:59:34 +02:00
Ludovic Courtès
d9dfbf886d
Merge branch 'master' into core-updates-frozen 2021-09-07 14:19:08 +02:00
Christopher Baines
9540323458
weather: Don't look for exported package replacements twice.
* guix/scripts/weather.scm (all-packages): Delete duplicates, so that exported
replacements aren't included twice.
2021-09-03 10:08:27 +01:00
Ludovic Courtès
e53d8a84c6
publish: Simplify 'narinfo-string'.
This is a followup to 222f4661ed, which
was intended to improve performance of 'narinfo-string'.

* guix/scripts/publish.scm (narinfo-string): Remove 'catch' and
'read-derivation-from-file' call when rendering "Deriver".
2021-09-03 10:41:55 +02:00
zimoun
be13e2be08
import: go: Improve error handling.
* guix/import/go.scm (go-module->guix-package*): Handle errors, remove
memoize.
(go-module-recursive-import): Remove 'guard', add memoize.
* guix/scripts/import/go.scm (guix-import-go): Adjust.
* tests/go.scm: Adjust.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-09-01 23:41:42 +02:00
Mathieu Othacehe
222f4661ed
publish: Do not render the narinfo "System" field.
This has been discussed here: https://issues.guix.gnu.org/50040.

* guix/scripts/publish.scm (narinfo-string): Do not render the "System" field
that is expensive to compute and currently unused.
2021-08-31 13:33:30 +02:00
Marius Bakke
c4133c43c7
Merge branch 'master' into core-updates-frozen
Conflicts:
	gnu/packages/algebra.scm
	gnu/packages/games.scm
	gnu/packages/golang.scm
	gnu/packages/kerberos.scm
	gnu/packages/mail.scm
	gnu/packages/python.scm
	gnu/packages/ruby.scm
	gnu/packages/scheme.scm
	gnu/packages/tex.scm
	gnu/packages/tls.scm
	gnu/packages/version-control.scm
2021-08-12 00:30:27 +02:00
Maxim Cournoyer
2ca982ff41
gnu: bootloader: Support multiple targets.
Fixes <https://issues.guix.gnu.org/40997>.

* gnu/bootloader.scm (<bootloader-configuration>): New 'targets' field.
(%bootloader-configuration-target): New procedure.
(bootloader-configuration-target): Add deprecation warning.
(bootloader-configuration-targets): New procedure.
* guix/scripts/system.scm (install): Access targets via
bootloader-configuration-targets.
(perform-action)[bootloader-target]: Remove unused argument and update doc.
Access targets via bootloader-configuration-targets and fix indentation.
(process-action): Access targets via bootloader-configuration-targets.
Do not provide the unused BOOTLOADER-TARGET argument when applying
`perform-action'.
* guix/scripts/system/reconfigure.scm (install-bootloader-program): Rename
DEVICE argument to DEVICES.  Adjust doc and comment.  Apply `installer' and
`disk-installer' for every DEVICES.
(install-bootloader): Access targets via bootloader-configuration-targets and
rename variable from DEVICE to DEVICES.
* gnu/tests/install.scm: Adjust accordingly.
* tests/guix-system.sh: Likewise.
* gnu/tests/reconfigure.scm (run-install-bootloader-test): Adjust the DEVICES
argument so that it is a list.
* doc/guix.texi: Update doc.
2021-08-29 01:05:26 -04:00
Alice BRENON
fc29c80b96
guix: opam: More flexibility in the importer.
* guix/scripts/import/opam.scm: Pass all instances of --repo as a list
  to the importer.
* guix/import/opam.scm (opam-fetch): Stop expecting "expanded"
  repositories and call get-opam-repository instead to keep values
  "symbolic" as long as possible and factorize.
  (get-opam-repository): Use the same repository source as CLI opam does
  (i.e. HTTP-served index.tar.gz instead of git repositories).
  (find-latest-version): Be more flexible on the repositories structure
  instead of expecting packages/PACKAGE-NAME/PACKAGE-NAME.VERSION/.
* tests/opam.scm: Update the call to opam->guix-package since repo is
  now expected to be a list and remove the mocked get-opam-repository
  deprecated by the support for local folders by the actual
  implementation.
* doc/guix.texi: Document the new semantics and valid arguments for the
  --repo option.

Signed-off-by: Julien Lepiller <julien@lepiller.eu>
2021-08-21 00:05:21 +02:00
Maxime Devos
467e874a86
guix: Add ContentDB importer.
* guix/import/contentdb.scm: New file.
* guix/scripts/import/contentdb.scm: New file.
* tests/contentdb.scm: New file.
* Makefile.am (MODULES, SCM_TESTS): Register them.
* po/guix/POTFILES.in: Likewise.
* doc/guix.texi (Invoking guix import): Document it.

Signed-off-by: Leo Prikler <leo.prikler@student.tugraz.at>
2021-08-20 12:41:54 +02:00
Mathieu Othacehe
53a487e871
scripts: publish: Remove leftover comment.
* guix/scripts/publish.scm (render-narinfo/cached): Remove leftover comment.
2021-08-10 12:00:45 +02:00
Mathieu Othacehe
dc8451c1cd
scripts: publish: Remove unused argument. 2021-08-10 11:51:26 +02:00
Ludovic Courtès
7bd5f72918
inferior: 'cached-channel-instance' no longer calls 'show-what-to-build'.
This allows the user of 'cached-channel-instance' to install the build
handler of its choice.  In particular, it allows "guix time-machine" to
install a build notifier with the right options instead of using the
defaults that 'cached-channel-instance' would pass to
'show-what-to-build*'.

* guix/inferior.scm (cached-channel-instance): Remove call to
'show-what-to-build*'.
(inferior-for-channels): Wrap body in 'with-build-handler'.
* guix/scripts/time-machine.scm (guix-time-machine): Use
'with-build-handler'.
2021-08-09 18:14:37 +02:00
Brice Waegeneire
613a9c7cb3
import: gem: Fix typo.
* guix/scripts/import/gem.scm (%options): Fix typo.
2021-08-15 08:44:02 +02:00
Sarah Morgensen
15452f319c
import: Use PARSE-COMMAND-LINE for options.
* guix/scripts/import/go.scm (guix-import-go)[parse-options]: Use
PARSE-COMMAND-LINE instead of ARGS-FOLD*.
* guix/scripts/import/egg.scm (guix-import-egg)[parse-options]:
Likewise.
* guix/scripts/import/gem.scm (guix-import-gem)[parse-options]:
Likewise.
* guix/scripts/import/gnu.scm (guix-import-gnu)[parse-options]:
Likewise.
* guix/scripts/import/cpan.scm (guix-import-cpan)[parse-options]:
Likewise.
* guix/scripts/import/cran.scm (guix-import-cran)[parse-options]:
Likewise.
* guix/scripts/import/elpa.scm (guix-import-elpa)[parse-options]:
Likewise.
* guix/scripts/import/json.scm (guix-import-json)[parse-options]:
Likewise.
* guix/scripts/import/opam.scm (guix-import-opam)[parse-options]:
Likewise.
* guix/scripts/import/pypi.scm (guix-import-pypi)[parse-options]:
Likewise.
* guix/scripts/import/crate.scm (guix-import-crate)[parse-options]:
Likewise.
* guix/scripts/import/texlive.scm (guix-import-texlive)[parse-options]:
Likewise.
* guix/scripts/import/hackage.scm (guix-import-hackage)[parse-options]:
Likewise.
* guix/scripts/import/stackage.scm (guix-import-stackage)[parse-options]:
Likewise.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-08-04 17:22:19 +02:00
Ludovic Courtès
0e47fcced4
Merge branch 'master' into core-updates 2021-07-18 19:50:01 +02:00
Maxim Cournoyer
11f0698243
pack: Streamline how files are included in tarballs.
Thanks to Guillem Jover <guillem@debian.org> on the OFTC's #debian-dpkg
channel for helping with troubleshooting.

Letting GNU Tar recursively walk the complete files hierarchy side-steps the
risks associated with providing a list of file names:

1. Duplicated files in the archive (recorded as hard links by GNU Tar)
2. Missing parent directories.

The above would cause dpkg to malfunction, for example by aborting early and
skipping triggers when there were missing parent directories.

* guix/scripts/pack.scm (self-contained-tarball/builder): Do not call
POPULATE-SINGLE-PROFILE-DIRECTORY, which creates extraneous files such as
/root.  Instead, call POPULATE-STORE and INSTALL-DATABASE-AND-GC-ROOTS
individually to more precisely generate the file system.  Replace the list of
files by the current directory, "." and streamline the way options are passed.
* gnu/system/file-systems.scm (reduce-directories): Remove procedure.
* tests/file-systems.scm ("reduce-directories"): Remove test.
2021-07-18 02:10:49 -04:00
Maxim Cournoyer
b019496fc3
pack/deb: Add default section and priority fields to the control file.
These fields, while optional per dpkg, are required by other tools such as
reprepro, commonly used to generate apt repositories.

* guix/scripts/pack.scm (debian-archive): Set the control file section field
to 'misc' and the priority field to 'optional'.
2021-07-18 02:02:34 -04:00
Maxim Cournoyer
aeded14b83
pack: Allow embedding custom control files in deb packs.
* guix/scripts/pack.scm (self-contained-tarball/builder)
[extra-options]: New argument.
(self-contained-tarball, squashfs-image, docker-image)
(debian-archive): Likewise.  Remove two TODO comments.  Document
EXTRA-OPTIONS.  Use the custom control files when provided.
(%deb-format-options): New variable.
(show-deb-format-options, show-deb-format-options/detailed): New procedures.
(%options): Register new options.
(show-help): Augment with new usage.
(guix-pack): Validate and propagate new argument values.
* doc/guix.texi (Invoking guix pack)[deb]: Document how to list advanced
options.  Add an example.
* tests/pack.scm (deb archive...): Provide extra-options to the debian-archive
procedure, and validate that the provided files are embedded in the pack.
2021-07-18 02:02:34 -04:00
Hartmut Goebel
f3b20baa4d
substitute: Fix handling of short option "-h".
The short option was listed in the help-text, but not recognized.
2021-07-16 19:36:11 +02:00
Steve Sprang
481d660527
package: Improve output appearance when listing packages.
* guix/scripts/package.scm (process-query): Use pretty-print-table when
listing installed and available packages.

Modified-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
2021-07-15 16:09:53 -04:00
Ludovic Courtès
f23803af20
Add 'guix style'.
* guix/scripts/style.scm, tests/style.scm: New files.
* Makefile.am (MODULES, SCM_TESTS): Add them.
* po/guix/POTFILES.in: Add 'guix/scripts/style.scm'.
* doc/guix.texi (Invoking guix style): New node.
(package Reference): Reference it.
(Invoking guix lint): Likewise.
2021-07-11 00:49:15 +02:00
Maxim Cournoyer
82daab4281
pack: Add support for the deb format.
* .dir-locals.el (scheme-mode)[gexp->derivation]: Define indentation rule.
* guix/scripts/pack.scm (debian-archive): New procedure.
(%formats): Register the new deb format.
(show-formats): Add it to the usage string.
* tests/pack.scm (%ar-bootstrap): New variable.
(deb archive with symlinks): New test.
* doc/guix.texi (Invoking guix pack): Document it.
* NEWS: Add news entry.
2021-06-29 14:53:21 -04:00
Maxim Cournoyer
4f3bdc8f21
pack: Prevent duplicate files in tar archives.
Tar translate duplicate files in the archive into hard links.  These can cause
problems, as not every tool support them; for example dpkg doesn't.

* gnu/system/file-systems.scm (reduce-directories): New procedure.
(file-prefix?): Lift the restriction on file prefix.  The procedure can be
useful for comparing relative file names.  Adjust doc.
(file-name-depth): New procedure, extracted from ...
(btrfs-store-subvolume-file-name): ... here.
* guix/scripts/pack.scm (self-contained-tarball/builder): Use
reduce-directories.
* tests/file-systems.scm ("reduce-directories"): New test.
2021-06-29 14:53:21 -04:00
Maxim Cournoyer
6b0e55cde9
pack: Improve naming of the packs store file names.
Instead of just naming them by their pack type, add information from the
package(s) they contain to make it easier to differentiate them.

* guix/scripts/pack.scm (define-with-source): New macro.
(manifest->friendly-name): Extract procedure from ...
(docker-image): ... here, now defined via the above macro.  Adjust REPOSITORY
argument value accordingly.
(guix-pack): Derive NAME using MANIFEST->FRIENDLY-NAME.
2021-06-29 14:53:21 -04:00
Maxim Cournoyer
f72aa3834b
pack: Fix typo.
* guix/scripts/pack.scm (self-contained-tarball/builder): Fix typo.
2021-06-29 14:53:21 -04:00
Maxim Cournoyer
7708c0b5e3
pack: Factorize base tar options.
* guix/docker.scm (%tar-determinism-options): Move to a new module and rename
to `tar-base-options'.  Adjust references accordingly.
* guix/build/pack.scm: New file.
* Makefile.am (MODULES): Register it.
* guix/scripts/pack.scm (self-contained-tarball/builder): Use it.
2021-06-29 14:53:21 -04:00
Maxim Cournoyer
91e8372838
pack: Extract builder code from self-contained-tarball.
This is made to allow reusing it for the debian-archive pack format, added in
a subsequent commit.

* guix/scripts/pack.scm (self-contained-tarball/builder): New procedure,
containing the build code extracted from self-contained-tarball.
(self-contained-tarball): Use the above procedure.
2021-06-29 14:53:20 -04:00
Maxime Devos
5ef96ecaae
weather: Handle zero requested store items gracefully.
This can happen if the weather information of a package
is requested for an unsupported system.  For example,
try "guix weather icecat --system=aarch64-linux".

* guix/scripts/weather.scm
  (report-server-coverage): Do not divide by zero when zero
  store items are requested from a server.

Fixes: <https://issues.guix.gnu.org/49263>
Reported-By: Jack Hill <jackhill@jackhill.us>
Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
2021-06-29 20:11:56 +02:00
Ludovic Courtès
05528dcd48
Revert "guix build: Autoload (gnu packages)."
This reverts commit fd62b4cf88, which
would lead 'GUIX_PACKAGE_PATH' to be ignored for instance when using
'guix build -f file.scm', as shown by 'tests/guix-build.sh'.
2021-06-29 00:10:54 +02:00
Ludovic Courtès
fd62b4cf88
guix build: Autoload (gnu packages).
* guix/scripts/build.scm: Autoload (gnu packages).
2021-06-29 00:00:14 +02:00
Ludovic Courtès
f386a993ef
pull: Use SRFI-71 instead of SRFI-11.
* guix/scripts/pull.scm (display-new/upgraded-packages): Use SRFI-71 'let'.
2021-06-29 00:00:14 +02:00
Ludovic Courtès
0ba4f0caa4
pull: Autoload (gnu ...) modules.
This reduces startup time for 'guix pull --help' and similar.

* guix/scripts/pull.scm: Autoload (gnu ...) modules.
2021-06-29 00:00:13 +02:00
Ludovic Courtès
7fe195f3b7
guix substitute: Adjust comment about GnuTLS bug.
* guix/scripts/substitute.scm (call-with-cached-connection): Adjust
comment.
2021-06-25 23:44:15 +02:00
Ludovic Courtès
7916201c4d
reconfigure: Use 'formatted-message'.
* guix/scripts/system/reconfigure.scm (ensure-forward-reconfigure): Use
'formatted-message'.
* guix/scripts/deploy.scm (deploy-machine*): Handle it.
2021-06-25 15:12:05 +02:00
Ludovic Courtès
1b4931555b
deploy: Leave on hard error.
Previously, the error message would be displayed, followed by a
backtrace ending in &non-continuable.

* guix/scripts/deploy.scm (deploy-machine*): Call 'leave' rather than
'report-error' when C is a &message.
2021-06-25 15:12:05 +02:00
Marius Bakke
6f9a80b331
Merge branch 'master' into core-updates
Note: this merge actually changes the 'curl' and 'python-attrs' derivations,
as part of solving caf4a7a277 and
12964df69a respectively.

4604d43c0e (gnu: gnutls@3.6.16: Fix cross-compilation.) was ignored because it
cannot currently be tested.

 Conflicts:
	gnu/local.mk
	gnu/packages/aidc.scm
	gnu/packages/boost.scm
	gnu/packages/curl.scm
	gnu/packages/nettle.scm
	gnu/packages/networking.scm
	gnu/packages/python-xyz.scm
	gnu/packages/tls.scm
2021-06-19 17:38:47 +02:00
Ludovic Courtès
ee61777a32
profiles: Add 'load-profile'.
* guix/profiles.scm (%precious-variables): New variable.
(purify-environment, load-profile): New procedures.
* guix/scripts/environment.scm (%precious-variables)
(purify-environment, create-environment): Remove.
(launch-environment): Call 'load-profile' instead of 'create-environment'.
* tests/profiles.scm ("load-profile"): New test.
2021-06-18 14:18:07 +02:00
Christopher Baines
4985a42724
Start enabling substitutes from bordeaux.guix.gnu.org.
In addition to substitutes from ci.guix.gnu.org.  There are more changes that
can be made in the future, but these changes seem like a good start.

* config-daemon.ac (guix_substitute_urls): Add https://bordeaux.guix.gnu.org.
* guix/scripts/substitute.scm (%default-substitute-urls): Add
http://bordeaux.guix.gnu.org.
* guix/store.scm (%default-substitute-urls): Add bordeaux.guix.gnu.org.
* doc/guix.texi: Adjust accordingly.
* doc/contributing.texi: Adjust accordingly.
2021-06-18 11:25:41 +01:00
Maxim Cournoyer
375d5d03c9
pack: Fix the system value passed to build-docker-image.
Before this change, the system value would be passed as x86_64 when using a
i686-linux emulated system, e.g.:

  $ guix environment --system=i686-linux --ad-hoc  guile -- \
      guile -c '(display (utsname:machine (uname))) (newline)'
  x86_64

This change uses the Guile builtin %host-type variable, which doesn't have
this problem:

  $ guix environment --system=i686-linux --ad-hoc guile -- \
      guile -c '(display %host-type) (newline)'
  i686-unknown-linux-gnu

* guix/scripts/pack.scm (docker-image)[#:system] Use %host-type as a fall-back
when target is not defined.

Co-authored-by: Ludovic Courtès <ludo@gnu.org>
2021-06-16 21:44:33 -04:00
Ludovic Courtès
0294cfc25a
guix package: Do not say "nothing to do" upon rollback & co.
Previously, "guix package --switch-generations=4" or similar would print
"nothing to do".

* guix/scripts/package.scm (process-actions): Do not warn about "nothing
to do" when one of %ACTIONS is requested.
2021-06-13 23:57:45 +02:00
Marius Bakke
8d59c262ad
Merge branch 'master' into core-updates
Conflicts:
	gnu/local.mk
	gnu/packages/algebra.scm
	gnu/packages/bioinformatics.scm
	gnu/packages/curl.scm
	gnu/packages/docbook.scm
	gnu/packages/emacs-xyz.scm
	gnu/packages/maths.scm
	gnu/packages/plotutils.scm
	gnu/packages/python-web.scm
	gnu/packages/python-xyz.scm
	gnu/packages/radio.scm
	gnu/packages/readline.scm
	gnu/packages/tls.scm
	gnu/packages/xml.scm
	gnu/packages/xorg.scm
2021-06-06 21:16:32 +02:00
Mathieu Othacehe
a068ed6a5f
scripts: substitute: Cache connection when looking for narinfos.
The process-substitution procedure is opening two distinct connections. The
first one when looking for narinfo by calling lookup-narinfo and the other one
when fetching nar files.

Cache the connection when looking for narinfos so that process-substitution
only opens one connection.

* guix/scripts/substitute.scm (lookup-narinfo): Cache connection by using
open-connection-for-uri/cached.
2021-06-06 18:54:29 +02:00
Xinglu Chen
bdc298ecee
import: Add CHICKEN egg importer.
* guix/import/egg.scm: New file.
* guix/scripts/import/egg.scm: New file.
* tests/egg.scm: New file.
* Makefile.am (MODULES, SCM_TESTS): Register them.
* po/guix/POTFILES.in: Likewise.
* guix/scripts/import.scm (importers): Add egg importer.
* doc/guix.texi (Invoking guix import, Invoking guix refresh): Document it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-06-03 13:05:18 +02:00
Ludovic Courtès
82d8ab01f5
maint: Require Guile 3.0.
* configure.ac: Require Guile 3.0.
* doc/guix.texi (Requirements): Adjust accordingly.
* gnu/packages/package-management.scm (guile2.2-guix): Remove.
* guix/lint.scm (exception-with-kind-and-args?): Remove 'cond-expand'.
* guix/scripts/deploy.scm (deploy-machine*): Likewise.
* guix/store.scm (call-with-store): Likewise.
* guix/swh.scm (http-get*, http-post*): Likewise.
* guix/ui.scm (without-compiler-optimizations, guard*)
(call-with-error-handling): Likewise.
2021-06-01 23:26:07 +02:00
Mathieu Othacehe
0b8fa24bbd
publish: Add keep-alive support when sending nar.
The default Guile web server implementation supports the keep alive
mechanism. However, in our custom http-write implementation, the connection
is unconditionally close after sending nar files.

To prevent that, when supported, add the client port to the server poll set so
that further requests can be handled without closing the connection.

* guix/scripts/publish.scm (nar-response-port): Rename it into ...
(nar-compressed-port): ... this procedure. Operate directly on a given PORT.
(http-write): Add keep-alive support when sending nar files.
* guix/scripts/substitute.scm (process-substitution): Pass the download size
to the progress-report-port procedure so that it doesn't block reading from
the input port when keep-alive is supported.
2021-06-01 09:10:32 +02:00
Mathieu Othacehe
2acc114a96
publish: Preserve the request connection header.
The Guile web server is reading the response connection header to decide
whether to close the connection. However, as the request connection header is
not forwarded to the response, this mechanism cannot work.

* guix/scripts/publish.scm (add-extra-headers): New procedure.
(make-request-handler): Use it to forward the request connection header to the
response.
2021-06-01 09:10:32 +02:00
Ludovic Courtès
a44fa3742c
guix build: Emit "nothing to do" warning only when needed.
This is a followup to 681af1fb78.

* guix/scripts/build.scm (guix-build): Emit "nothing to do" warning only
when both DRV and ITEMS are null.
2021-05-28 23:04:43 +02:00
Ludovic Courtès
f8c4437f0f
guix package: Do not warn about "missing arguments" when there's nothing to do.
In some cases, running "guix upgrade" can trigger this warning, and
"missing arguments" is misleading then.

Reported by flatwhatson on #guix.

* guix/scripts/package.scm (process-actions): Change warning to "nothing
to do".
2021-05-28 23:04:43 +02:00
Ludovic Courtès
681af1fb78
scripts: Commands warn when passed zero arguments.
This is a followup to 3f8326237d.

* guix/scripts/archive.scm (export-from-store): Warn then FILES is
empty.
* guix/scripts/build.scm (guix-build): Likewise.
* guix/scripts/copy.scm (warn-if-empty): New procedure.
(send-to-remote-host, retrieve-from-remote-host): Call it.
* guix/scripts/edit.scm (guix-edit): Warn when SPECS is empty.
* guix/scripts/environment.scm (guix-environment): Warn when MANIFEST
has zero entries.
* guix/scripts/graph.scm (guix-graph): Warn then ITEMS is empty.
* guix/scripts/package.scm (process-actions): Warn when FILES and TRANS
are both empty.
2021-05-28 11:36:02 +02:00
Ludovic Courtès
7243a8c7ec
deploy: Error out when the FILE argument is missing.
* guix/scripts/deploy.scm (guix-deploy): Error out when FILE is false.
2021-05-28 11:36:02 +02:00
Marius Bakke
4ea6852c5f
Merge branch 'master' into core-updates 2021-05-22 17:21:57 +02:00
Mathieu Othacehe
7003b2db52
scripts: discover: Report Avahi errors.
Fixes: <https://issues.guix.gnu.org/48561>.

* guix/scripts/discover (guix-discover): Report Avahi errors.
2021-05-22 14:04:19 +02:00
Mathieu Othacehe
0471024acc
scripts: challenge: Fix regression.
This is a follow-up of 3cde5231aa that fixes the
challenge test.

When dealing with uncompressed NAR, the file size is false. Propagate it to
progress-reporter/file as it used to be the case.

* guix/scripts/challenge.scm (call-with-nar): Accept false size.
2021-05-20 11:44:35 +02:00
Ludovic Courtès
938ffcbb05
publish: Add '--negative-ttl'.
* guix/scripts/publish.scm (show-help, %options): Add '--negative-ttl'.
(render-narinfo, render-narinfo/cached, make-request-handler): Add #:negative-ttl
and honor it.
(run-publish-server): Add #:narinfo-negative-ttl and honor it.
(guix-publish): Honor '--negative-ttl'.
* tests/publish.scm ("negative TTL", "no negative TTL"): New tests.
2021-05-16 23:28:11 +02:00
Ludovic Courtès
25487c3fe6
Merge branch 'master' into core-updates 2021-05-15 22:55:24 +02:00
Zheng Junjie
d456232712
import: go: Fix goproxy option argument's format.
Commit a8b927a562 Added new procedure go-module-available-versions use
'string-append' to GOPROXY, but 'string->symbol' let GOPROXY is a symbol (it
must be a string), which would lead to wrong-type-arg errors in the
'string-append' procedure.

* guix/scripts/import/go.scm (%options)[goproxy]: Remove call to
'string->symbol'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-05-14 14:47:16 +02:00
Ludovic Courtès
3cde5231aa
challenge: Be defensive in the size passed to the progress reporter.
Possibly fixes <https://bugs.gnu.org/48045>.
Reported by Bone Baboon <bone.baboon@disroot.org>.

* guix/scripts/challenge.scm (call-with-nar): Rename second value
returned by 'http-fetch' to match reality.  Change second argument to
'progress-reporter/file'.
2021-05-13 00:19:58 +02:00
Maxim Cournoyer
b7cbca221f
Merge branch 'version-1.3.0' 2021-05-11 22:42:59 -04:00
Roel Janssen
ce3d05cc08
guix: scripts system: Increase the size for generating Docker container images.
* guix/scripts/system.scm: Override the default of 256.
2021-05-10 09:43:12 +02:00
Ludovic Courtès
8a154c2915
describe: Gracefully handle profiles that lack provenance info.
Fixes <https://bugs.gnu.org/48313>.

Previously, 'current-channels' would return the empty list when
'current-profile' is true but the profile lacks provenance info.

* guix/describe.scm (current-channels)[build-time-metadata]: New
procedure.  Call it when 'manifest-entry-channel' returns #f for all of
ENTRIES.
* guix/scripts/describe.scm (guix-describe): When PROFILE is true, pass
third argument to 'display-profile-info'.
2021-05-09 23:46:46 +02:00
Marius Bakke
f034264204
Merge branch 'master' into core-updates
Conflicts:
	gnu/local.mk
	gnu/packages/bioinformatics.scm
	gnu/packages/django.scm
	gnu/packages/gtk.scm
	gnu/packages/llvm.scm
	gnu/packages/python-web.scm
	gnu/packages/python.scm
	gnu/packages/tex.scm
	guix/build-system/asdf.scm
	guix/build/emacs-build-system.scm
	guix/profiles.scm
2021-05-09 21:29:46 +02:00
Ludovic Courtès
5b0afe2420
weather: '--display-missing' shows the system type of missing items.
* guix/scripts/weather.scm (store-item-system): New procedure.
(report-server-coverage): Use it to print the system type of each
missing item.
2021-05-08 14:55:50 +02:00
Timothy Sample
fbc2a52a32
download: Use Disarchive as a last resort.
This is a fixed version of 66b14dccdd,
which was reverted in e74250c3c5.

* guix/download.scm (%disarchive-mirrors): New variable.
(%disarchive-mirror-file): New variable.
(built-in-download): Add 'disarchive-mirrors' keyword argument and
pass its value along to the 'builtin:download' derivation.
(url-fetch): Pass '%disarchive-mirror-file' to 'built-in-download'.
* guix/scripts/perform-download.scm (perform-download): Read
Disarchive mirrors from the environment and pass them to
'url-fetch'.
* guix/build/download.scm (disarchive-fetch/any): New procedure.
(url-fetch): Add 'disarchive-mirrors' keyword argument, use it to
make a list of URIs, and use the new procedure to fetch the file if
all other methods fail.
* build-aux/build-self.scm (build-program)[select?]: Exclude '(guix
build download)'.
* guix/self.scm (compiled-guix)[*core-modules*]: Add 'guile-json' to
the list of extensions.
2021-04-29 11:24:48 -04:00
Timothy Sample
e74250c3c5
Revert "download: Use Disarchive as a last resort."
This reverts commit 66b14dccdd, which broke
'guix pull'.
2021-04-28 00:24:28 -04:00
Timothy Sample
66b14dccdd
download: Use Disarchive as a last resort.
* guix/download.scm (%disarchive-mirrors): New variable.
(%disarchive-mirror-file): New variable.
(built-in-download): Add 'disarchive-mirrors' keyword argument and
pass its value along to the 'builtin:download' derivation.
(url-fetch): Pass '%disarchive-mirror-file' to 'built-in-download'.
* guix/scripts/perform-download.scm (perform-download): Read
Disarchive mirrors from the environment and pass them to
'url-fetch'.
* guix/build/download.scm (disarchive-fetch/any): New procedure.
(url-fetch): Add 'disarchive-mirrors' keyword argument, use it to
make a list of URIs, and use the new procedure to fetch the file if
all other methods fail.
2021-04-27 21:27:02 -04:00
Ludovic Courtès
69ffe875c3
http-client, substitute: Gracefully handle GnuTLS EAGAIN/EINTR.
Partly fixes <https://bugs.gnu.org/47867>.
Reported by Florian Pelz <pelzflorian@pelzflorian.de>.

In GnuTLS up to 3.7.1 included, GNUTLS_E_AGAIN and GNUTLS_E_INTERRUPTED
are not handled by 'write_to_session_record_port' and could be thrown at
the caller.  This patch works around that by dropping connections
altogether and restarting when this happens.

* guix/http-client.scm (false-if-networking-error): Swallow ERROR/AGAIN
and ERROR/INTERRUPTED.
* guix/scripts/substitute.scm (call-with-cached-connection): Likewise.
2021-04-25 14:36:40 +02:00
Ludovic Courtès
c59cc2383d
import: Remove Nix importer.
This importer has suffered from bitrot and no longer works with current
Nix and Nixpkgs.  See <https://bugs.gnu.org/32339> and
<https://bugs.gnu.org/36255>.

* guix/import/snix.scm, guix/scripts/import/nix.scm,
tests/snix.scm: Remove.
* Makefile.am (MODULES, SCM_TESTS): Remove them.
* guix/scripts/import.scm (importers): Remove "nix".
* build-aux/test-env.in: Remove NIXPKGS variable.
* configure.ac: Remove '--with-nixpkgs' option.
* doc/guix.texi (Invoking guix import): Remove bit about "guix import
nix".
* etc/completion/fish/guix.fish: Likewise.
2021-04-25 14:34:09 +02:00
Ludovic Courtès
02d62978f4
http-client, substitute: Gracefully handle GnuTLS EAGAIN/EINTR.
Partly fixes <https://bugs.gnu.org/47867>.
Reported by Florian Pelz <pelzflorian@pelzflorian.de>.

In GnuTLS up to 3.7.1 included, GNUTLS_E_AGAIN and GNUTLS_E_INTERRUPTED
are not handled by 'write_to_session_record_port' and could be thrown at
the caller.  This patch works around that by dropping connections
altogether and restarting when this happens.

* guix/http-client.scm (false-if-networking-error): Swallow ERROR/AGAIN
and ERROR/INTERRUPTED.
* guix/scripts/substitute.scm (call-with-cached-connection): Likewise.
2021-04-24 19:08:13 +02:00
Ludovic Courtès
d95168321f
import: Remove Nix importer.
This importer has suffered from bitrot and no longer works with current
Nix and Nixpkgs.  See <https://bugs.gnu.org/32339> and
<https://bugs.gnu.org/36255>.

* guix/import/snix.scm, guix/scripts/import/nix.scm,
tests/snix.scm: Remove.
* Makefile.am (MODULES, SCM_TESTS): Remove them.
* guix/scripts/import.scm (importers): Remove "nix".
* build-aux/test-env.in: Remove NIXPKGS variable.
* configure.ac: Remove '--with-nixpkgs' option.
* doc/guix.texi (Invoking guix import): Remove bit about "guix import
nix".
* etc/completion/fish/guix.fish: Likewise.
2021-04-20 12:13:16 +02:00
Efraim Flashner
fcc39864db
Merge remote-tracking branch 'origin/master' into core-updates
Conflicts:
	gnu/local.mk
	gnu/packages/boost.scm
	gnu/packages/chez.scm
	gnu/packages/compression.scm
	gnu/packages/crates-io.scm
	gnu/packages/docbook.scm
	gnu/packages/engineering.scm
	gnu/packages/gcc.scm
	gnu/packages/gl.scm
	gnu/packages/gtk.scm
	gnu/packages/nettle.scm
	gnu/packages/python-check.scm
	gnu/packages/python-xyz.scm
	gnu/packages/radio.scm
	gnu/packages/rust.scm
	gnu/packages/sqlite.scm
	guix/build-system/node.scm
2021-04-16 14:39:48 +03:00
Mark H Weaver
e18e2e458f
scripts: system: Default to -v3 when building a system.
This is a followup to 8f9052d543.

* guix/scripts/system.scm (verbosity-level): Change the default
from 2 to 3 when building a system.
2021-04-11 22:13:17 -04:00
Maxim Cournoyer
83f8b6d32c
import: go: Append version to symbol name in the pinned version mode.
This allows importing packages with complicated version specific dependency
chains without the package symbol names colliding.

* doc/guix.texi (Invoking guix import): Document the --pin-versions option.
Mention that a specific version can be imported.  Remove the experimental
warning.
* guix/import/go.scm (go-module->guix-package-name)[version]: Add optional
argument.  Rewrite the character translation in terms of string-map.
(go-module->guix-package): Conditionally use dependencies whose symbol include
their version, based no the value of the PIN-VERSIONS? argument.
* guix/import/utils.scm (package->definition): Add a new case where the full
version string is appended to the package symbol.
* guix/scripts/import.scm (guix-import): Correctly print forms starting
with '(define-public [...]'.
* guix/scripts/import/go.scm (guix-import-go): Conditionally include the
version in the package symbols defined.
2021-04-09 23:02:37 -04:00
Maxim Cournoyer
a8b927a562
import: go: Add an option to use pinned versions.
The ability to pin versions is handy when having to deal to packages that
bootstrap themselves through a chain of former versions.  Not using pinned
versions in these case could introduce dependency cycles.

* guix/build-system/go.scm (guix)
(%go-version-rx): Rename to...
(%go-pseudo-version-rx): ... this.  Simplify the regular expression, which in
turns makes it more robust.
* guix/build-system/go.scm (go-version->git-ref): Adjust following the above
rename.
(go-pseudo-version?): New predicate.
(go-module-latest-version): Rename to ...
(go-module-version-string): ... this.  Rename goproxy-url argument to just
goproxy.  Add a VERSION keyword argument, update docstring and adjust to have
it used.
(go-module-available-versions): New procedure.
(%go.mod-require-directive-rx): Document regexp.
(parse-go.mod): Harmonize the way dependencies are recorded to a list of lists
rather than a list of pairs, as done for other importers.  Rewrite to directly pass
multiple values rather than a record object.  Filter the replaced modules in a
functional style.
(go-module->guix-package): Add docstring.
[version, pin-versions?]: New arguments.  Rename the GOPROXY-URL argument to
GOPROXY.  Adjust to the new returned value of fetch-go.mod, which is a string.
Fail when the provided version doesn't exist.  Return a list dependencies and
their versions when in pinned versions mode, else just the dependencies.
(go-module-recursive-import)[version, pin-versions?]: New arguments.
Honor the new arguments and guard against network errors.
* guix/scripts/import/go.scm (%default-options): Register a default value for
the goproxy argument.
(show-help): Document that a version can be specified.  Remove the --version
argument and add a --pin-versions argument.
(%options)[version]: Remove option.
[pin-versions]: Add option.
(guix-import-go): Adjust so the version provided from the module name is
honored, along the new pin-versions? argument.
* tests/go.scm: Adjust and add new tests.
2021-04-09 22:41:32 -04:00
Ludovic Courtès
2d73086262
daemon: 'guix substitute' replies on FD 4.
This avoids the situation where error messages would unintentionally go
to stderr and be wrongfully interpreted as a reply by the daemon.

Fixes <https://bugs.gnu.org/46362>.
This is a followup to ee3226e9d5.

* guix/scripts/substitute.scm (display-narinfo-data): Add 'port'
parameter and honor it.
(process-query): Likewise.
(process-substitution): Likewise.
(%error-to-file-descriptor-4?, with-redirected-error-port): Remove.
(%reply-file-descriptor): New variable.
(guix-substitute): Remove use of 'with-redirected-error-port'.  Define
'reply-port' and pass it to 'process-query' and 'process-substitution'.
* nix/libstore/build.cc (SubstitutionGoal::handleChildOutput): Swap
'builderOut' and 'fromAgent'.
* nix/libstore/local-store.cc (LocalStore::getLineFromSubstituter):
Likewise.
* tests/substitute.scm <top level>: Set '%reply-file-descriptor'
rather than '%error-to-file-descriptor-4?'.
2021-04-09 17:46:38 +02:00
zimoun
4056ba3645
scripts: show: Replace 'args-fold*' by 'parse-command-line'.
* guix/scripts/show.scm (define-command): Replace 'args-fold*' by
'parse-command-line'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-04-01 14:58:55 +02:00
zimoun
0fac33a8ea
scripts: search: Replace 'args-fold*' by 'parse-command-line'.
* guix/scripts/search.scm (define-command): Replace 'args-fold*' by
'parse-command-line'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-04-01 14:58:55 +02:00
zimoun
f1bf6d3dbd
scripts: repl: Replace 'args-fold*' by 'parse-command-line'.
* guix/scripts/repl.scm (define-command): Replace 'args-fold*' by
'parse-command-line'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-04-01 14:58:54 +02:00
zimoun
ec3090e0c2
scripts: publish: Replace 'args-fold*' by 'parse-command-line'.
* guix/scripts/publish.scm (define-command): Replace 'args-fold*' by
'parse-command-line'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-04-01 14:58:54 +02:00
zimoun
f4070b153d
scripts: edit: Replace 'args-fold*' by 'parse-command-line'.
* guix/scripts/edit.scm (define-command): Replace 'args-fold*' by
'parse-command-line'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-04-01 14:58:54 +02:00
zimoun
d8382d1ef6
scripts: download: Replace 'args-fold*' by 'parse-command-line'.
* guix/scripts/download.scm (define-command): Replace 'args-fold*' by
'parse-command-line'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-04-01 14:58:54 +02:00
zimoun
8e4ca1b1d0
scripts: discover: Replace 'args-fold*' by 'parse-command-line'.
* guix/scripts/discover.scm (define-command): Replace 'args-fold*' by
'parse-command-line'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-04-01 14:58:54 +02:00
zimoun
946f563d91
scripts: describe: Replace 'args-fold*' by 'parse-command-line'.
* guix/scripts/describe.scm (define-command): Replace 'args-fold*' by
'parse-command-line'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2021-04-01 14:58:54 +02:00
Ludovic Courtès
8f9052d543
scripts: Scripts that defaulted to -v2 now default to -v3.
This is a followup to e45ef9a648.

* guix/scripts/archive.scm (%default-options): Change 'verbosity' to 3.
* guix/scripts/build.scm (%default-options): Likewise.
* guix/scripts/copy.scm (%default-options): Likewise.
2021-03-31 16:08:05 +02:00
Ludovic Courtès
1fa4aff1fb
substitute: Emit a single newline upon completion.
The immediate effect is that, with '--verbosity=1', only two lines are
displayed for each substitute, instead of two lines followed by an empty
line.

* guix/scripts/substitute.scm (process-substitution): Emit a single
newline upon completion when PRINT-BUILD-TRACE? is true.
2021-03-31 15:57:46 +02:00
zimoun
55c25ee4c5
scripts: import: cran: Add missing help for 'style' option.
* guix/scripts/import/cran.scm (show-help): Add help message for 'style'
option.

Signed-off-by: Christopher Baines <mail@cbaines.net>
2021-03-29 19:53:50 +01:00
Mathieu Othacehe
e733f66b5b
Fix substitutes server discovery.
This is a follow-up of bc3896db25.

* guix/scripts/substitute.scm (%local-substitute-urls): Test for "true"
instead of "yes".
2021-03-29 16:57:10 +02:00
Efraim Flashner
2aab587f84
Merge remote-tracking branch 'origin/master' into core-updates 2021-03-24 20:50:44 +02:00
Ludovic Courtès
9da5ec7099
substitute: Choose compression method based on past CPU usage.
This stems from the observation that substitute download can be
CPU-bound when high-speed networks are in use:

  https://lists.gnu.org/archive/html/guix-devel/2020-12/msg00177.html

* guix/narinfo.scm (decompresses-faster?): New procedure.
(narinfo-best-uri): Add #:fast-decompression?.
* guix/scripts/substitute.scm (%prefer-fast-decompression?): New
variable.
(call-with-cpu-usage-monitoring): New procedure.
(with-cpu-usage-monitoring): New macro.
(display-narinfo-data, process-substitution): Pass #:fast-decompression?
to 'narinfo-best-uri'.
(process-substitution): Wrap 'restore-file' call in
'with-cpu-usage-monitoring'.  Set '%prefer-fast-decompression?'.
2021-03-21 23:41:01 +01:00
Ludovic Courtès
065d832fc2
guix package: Autoload Guile-JSON and (guix describe).
* guix/scripts/build.scm: Autoload (guix import json).
* guix/scripts/package.scm: Autoload (guix import json) and (guix
describe).
2021-03-19 13:23:27 +01:00
Ludovic Courtès
4f04155232
guix describe: Autoload Guile-JSON.
* guix/scripts/describe.scm: Autoload (json).
2021-03-19 13:23:27 +01:00
Christopher Baines
806125e52f
weather: Only show request statistics when requests were made.
This avoids the script crashing if all data is fetched from the cache.

* guix/scripts/weather.scm (report-server-coverage): Only show request
statistics when some requests have been made.
2021-03-17 23:12:31 +00:00
Christopher Baines
c37f78a9f5
scripts: weather: Provide more representative request statistics.
Previously, the "seconds per request" and "requests per second" statistics
really reported (cache lookups + requests) per second.  By looking at the
actual number of requests made within lookup-narinfos, a more representative
value can be reported.

* guix/scripts/weather.scm (let/time): Allow for multiple return values.
(report-server-coverage): Alter the reporting of request statistics.
2021-03-17 20:46:21 +00:00
Christopher Baines
b48204259a
scripts: substitute: Tweak error reporting in process-substitution.
The call-with-connection-error-handling was added in
20c08a8a45, but that error handling was
previously inside of open-connection-for-uri/maybe, which is related
to (call-)with-cached-connection which was used in process-substitution, but
only actually used with call-with-cached-connection when used in
fetch-narinfos.

There's some handling for similar errors within with-networking, which is used
within process-substitution.

* guix/scripts/substitute.scm (process-substitution): Remove
call-with-connection-error-handling call.
2021-03-17 20:41:13 +00:00
Christopher Baines
c37e3b92ad
scripts: substitute: Add back some error handling.
In f50f5751ff, the way fetch was called within
process-substitution was changed.  As call-with-cached-connection actually
includes important error handling for the opening of a HTTP request, this
change removed some error handling.  This commit adds that back.

Fixes <https://bugs.gnu.org/47157>.

* guix/scripts/substitute.scm (call-with-cached-connection): New procedure.
(with-cached-connection): New syntax rule.
(process-substitution): Retry once for some errors when making HTTP requests
to fetch substitutes.
2021-03-17 20:41:10 +00:00
zimoun
f1c4df15c3
time-machine: Fail when unrecognized option.
* guix/scripts/time-machine (parse-args): Fail when unrecognized option.

Co-authored-by: Ludovic Courtès <ludo@gnu.org>
2021-03-11 23:19:53 +01:00
Katherine Cox-Buday
02e2e093e8
import: Add Go importer.
This patch adds a 'guix import go' command.

* doc/guix.texi (Requirements): Mention Guile-Lib dependency.
(Invoking guix import): Document 'guix import go'.
* gnu/packages/package-management.scm (guix)[inputs, propagated-inputs]:
Add GUILE-LIB.
* guix/self.scm (compiled-guix)[guile-lib]: New variable.
[dependencies]: Add it.
(specification->package): Add "guile-lib".
* guix/build-system/go.scm (go-version->git-ref): New procedure.
* guix/import/go.scm, guix/scripts/import/go.scm, tests/go.scm: New files.
* guix/scripts/import.scm: Declare subcommand guix import go
* po/guix/POTFILES.in: Add 'guix/scripts/import/go.scm'.
* Makefile.am (MODULES): Add 'guix/import/go.scm' and
'guix/scripts/import/go.scm'.
(SCM_TESTS): Add 'tests/go.scm'.

Co-Authored-By: Helio Machado <0x2b3bfa0@gmail.com>
Co-Authored-By: Francois Joulaud <francois.joulaud@radiofrance.com>
Co-Authored-By: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Co-Authored-by: Ludovic Courtès <ludo@gnu.org>
2021-03-10 18:01:48 +01:00
Mathieu Othacehe
8898eaec57
Revert "inferior: Break cached-channel-instance into two procedures."
This reverts commit 7d63b77551 because it raises
some concerns, see:
https://lists.gnu.org/archive/html/guix-devel/2021-03/msg00124.html.
2021-03-10 13:08:32 +01:00
Mathieu Othacehe
7d63b77551
inferior: Break cached-channel-instance into two procedures.
Break cached-channel-instance into two different procedures:
channels->cached-profile and instances->cached-profile operating respectively
on channels and channels instances.

* guix/inferior.scm (cached-channel-instance): Rename it into ...
(cached-profile): ... this new procedure.
(channels->cached-profile, instances->cached-profile): New procedures.
* guix/scripts/time-machine.scm (guix-time-machine): Adapt accordingly.
2021-03-10 08:49:48 +01:00
Christopher Baines
f5ffb3bd9c
weather: Call lookup-narinfos with a custom progress reporter.
This means there's a useful progress bar when running guix weather.

* guix/scripts/weather.scm (report-server-coverage): Pass
 #:make-progress-reporter to lookup-narinfos.
2021-03-09 20:19:36 +00:00
Christopher Baines
fd5b77503e
guix: substitutes: Make progress reporting configurable.
Rather than always outputting to (current-error-port) in
lookup-narinfos (which is called from within lookup-narinfos/diverse), take a
procedure which should return a progress reporter, and defer any output to
that.

As this is now general purpose code, make the default behaviour to output
nothing. Maintain the current behaviour of the substitute script by moving the
progress reporter implementation there, and passing it in when calling
lookup-narinfos/diverse.

These changes should be generally useful, but I'm particularly looking at
getting guix weather to do progress reporting differently, with this new
flexibility.

* guix/substitutes.scm (fetch-narinfos): Take a procedure to make a
progress-reporter, and use that rather than the hardcoded behaviour.
(lookup-narinfos): Add #:make-progress-reporter keyword argument, and pass
this through to fetch-narinfos.
(lookup-narinfos/diverse): Add a #:make-progress-reporter keyword argument,
and pass this through to lookup-narinfos.
* guix/scripts/substitute.scm (process-query): Pass a progress-reporter to
lookup-narinfos/diverse.
2021-03-09 20:19:33 +00:00
Brice Waegeneire
236a882942
scripts: system: Activate system when switching generations.
Fixes <https://bugs.gnu.org/38884>.

* guix/scripts/system.scm (switch-to-system-generation): Load the
activate script for that generation.

squash! scripts: system: Activate system when switching generations.
2021-03-09 06:56:17 +01:00
Christopher Baines
a8448da0f4
Merge branch 'master' into core-updates 2021-03-06 00:18:30 +00:00
Christopher Baines
112692c0d5
guix: Split (guix substitutes) from (guix scripts substitute).
This means there's a module for working with substitutes, rather than all the
code sitting in the script. The need for this can be seen with the weather and
challenge scripts, that now don't have to use code from the substitute script,
but can instead use the substitute module.

The separation here between the actual functionality of the substitute script
and the underlying functionality used both there and elsewhere should make
maintenance easier moving forward.

This commit just moves code, none of the code should have been changed
significantly.

* guix/scripts/substitute.scm (%narinfo-cache-directory, %narinfo-ttl,
%narinfo-negative-ttl, %narinfo-transient-error-ttl, %unreachable-hosts): Move
variables to guix/substitutes.scm.
(narinfo-cache-file, cached-narinfo, cache-narinfo!, narinfo-request,
read-to-eof, call-with-connection-error-handling, fetch-narinfos,
lookup-narinfos, lookup-narinfos/diverse): Move procedures to
guix/substitutes.scm.
* guix/substitutes.scm: New file.
* Makefile.am: Add it.
* guix/narinfo.scm: Remove redundant module.
* guix/scripts/challenge.scm: Change (guix scripts substitute) to (guix
substitutes).
* guix/scripts/weather.scm: Change (guix scripts substitute) to (guix
substitutes).
2021-03-05 21:06:03 +00:00
Tobias Geerinckx-Rice
d0f4283c44
pull: Expand help text for --{url,commit,branch}.
* guix/scripts/pull.scm (show-help): Document that ‘--url’, ‘--commit’,
and ‘--branch’ affect only the ‘guix’ channel (for now?).
2021-03-05 19:07:31 +01:00
Ludovic Courtès
90ea8b16eb
profiles: 'package->manifest-entry' preserves transformations by default.
Previously, transformations applied from a manifest (rather than via
"guix install") would be lost.  This change fixes that and simplifies
things.

Reported by zimoun at
<https://lists.gnu.org/archive/html/guix-devel/2021-02/msg00153.html>.

* guix/profiles.scm (default-properties): New procedure.
(package->manifest-entry): Use it for #:properties.
* guix/scripts/pack.scm (guix-pack)[with-transformations]: Remove.
Remove caller.
* guix/scripts/package.scm (transaction-upgrade-entry): Remove calls to
'manifest-entry-with-transformations'.
* tests/guix-package.sh: Add test.
* tests/transformations.scm ("options->transformation + package->manifest-entry"):
New test.
2021-03-05 12:49:27 +01:00
Ludovic Courtès
9ce78f27a0
environment: Allow compilation with Guile 2.2.
Fixes <https://bugs.gnu.org/46826>.
Reported by cage <cage-dev@twistfold.it>.

* guix/scripts/environment.scm (guix-environment): Move 'manifest'
definition before expression.
2021-03-01 17:45:50 +01:00
Ludovic Courtès
ee3226e9d5
substitute: Ensure backtraces go to file descriptor 4.
Fixes <https://bugs.gnu.org/46362>.
Reported by Zhu Zihao <all_but_last@163.com>.

Previously, backtraces due to uncaught exceptions would always to go
file descriptor 2; the daemon would read it and error out with something
like:

  error: got unexpected path `Backtrace:' from substituter

This patch fixes that by ensuring backtraces are properly displayed on
file descriptor 4.

* guix/scripts/substitute.scm (with-redirected-error-port): New macro.
(guix-substitute): Use 'with-redirected-error-port' instead of 'parameterize'.
2021-02-24 23:44:10 +01:00
Ludovic Courtès
e2572aa950
substitute: Do not unwind stack traces upon uncaught exceptions.
This is similar to commit a168c3e4f8.

* guix/scripts/substitute.scm (with-networking): Use
'with-throw-handler' instead of 'catch'.
2021-02-24 23:44:10 +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
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
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
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
宋文武
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
Danny Milosavljevic
abd318ff4b
Merge branch 'master' into core-updates 2021-02-11 19:12:36 +01: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
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
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
Christopher Baines
e740cc6140
Merge branch 'master' into core-updates 2021-02-03 09:57:35 +00: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
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
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
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
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
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
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
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
Maxim Cournoyer
01f0707207
Merge branch 'staging' into 'core-updates'.
Conflicts:

	gnu/local.mk
	gnu/packages/cmake.scm
	gnu/packages/curl.scm
	gnu/packages/gl.scm
	gnu/packages/glib.scm
	gnu/packages/guile.scm
	gnu/packages/node.scm
	gnu/packages/openldap.scm
	gnu/packages/package-management.scm
	gnu/packages/python-xyz.scm
	gnu/packages/python.scm
	gnu/packages/tls.scm
	gnu/packages/vpn.scm
	gnu/packages/xorg.scm
2021-01-13 23:45:53 -05: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
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
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
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