Commit Graph

4220 Commits

Author SHA1 Message Date
Ludovic Courtès 5c3d44303e
guix gc: Correctly handle '--delete-generations' with no arguments.
Previously, 'guix gc --delete-generations' would crash: the "" pattern
would be passed to 'matching-generations', which would return #f instead
of returning a list.

Reported by Raghav Gururajan <rvgn@disroot.org>
in <https://bugs.gnu.org/36466>.

* guix/ui.scm (matching-generations): Raise an error when passed an
invalid pattern.
* guix/scripts/gc.scm (delete-old-generations): Check if PATTERN is
true.
(%options): Leave ARG as-is for 'delete-generations'.
(guix-gc): Use 'assq' instead of 'assoc-ref' for 'delete-generations'.
* guix/scripts/package.scm (delete-matching-generations):
Replace (string-null? pattern) with (not pattern).  Remove 'else'
clause.
(%options): Leave ARG as-is for 'delete-generations'.
* guix/scripts/pull.scm (%options): Leave ARG as-is for
'list-generations'.
(process-query): Replace (string-null? pattern) with (not pattern).
* guix/scripts/system.scm (list-generations): Likewise, and remove
'else' clause.
(process-command): Use #f instead of "" when no pattern is given.
2019-07-11 23:13:26 +02:00
Christopher Baines 1d0bde2ee4
discovery: Handle edge case in scheme-files when looking at symlinks.
Previously, this code would cause crashes in Guix (running guix package -s for
example) which could be experienced when Emacs creates temporary files in the
gnu/packages/patches directory when a patch file has been edited, but not
saved.

* guix/discovery.scm (scheme-files): Add else clause to cond used when
handling symlinks.
2019-07-08 17:04:35 +01:00
Carl Dong b6dc08393e
scripts: environment: Add --no-cwd.
* doc/guix.texi (Invoking guix environment): Add --no-cwd.
* guix/scripts/environment.scm (show-help, %options): Add --no-cwd.
(launch-environment/container): Add 'map-cwd?' param; only add mapping
for cwd if #t.  Only change to cwd within container if #t, otherwise
home.
(guix-environment): Error if --no-cwd without --container.  Provide
'(not no-cwd?)' to launch-environment/container as 'map-cwd?'.
* tests/guix-environment.sh: Add test for no-cwd.

Co-authored-by: Mike Gerwitz <mtg@gnu.org>
2019-07-08 10:33:20 -04:00
Carl Dong a655d504aa
scripts: environment: Only rewrite user-specified mappings.
* guix/scripts/environment.scm (launch-environment/container): Only
  apply override-user-mappings to user-mappings and cwd. Do not apply to
  network configuration mapping and inputs.
2019-07-08 10:33:19 -04:00
Ludovic Courtès cdf689471a
channels: Key cached channel derivations by system.
Previously, the channel instance to derivation mapping would be
independent of the system.  Thus, building the same channel instance for
several different systems would always return the derivation that was
first computed.

This is a followup to c3ab921eed.

* guix/channels.scm (channel-instance-derivations)[instance->derivation]:
Pass the current system as a third argument to 'mcached'.
2019-07-08 13:05:55 +02:00
Mark H Weaver 079c93e1c1
self: Ship the (gnu machine …) modules.
This is a followup to commit fa9edf09e9.

* guix/self.scm (compiled-guix)[*system-modules*]: Explicitly add all of
gnu/machine/*.
2019-07-06 20:08:35 -04:00
Ludovic Courtès d9e6217f4e
channels: Simplify 'channel-instances->manifest'.
* guix/channels.scm (channel-instances->manifest)[instance->entry]:
Change to take two arguments instead of a tuple.  Turn into a
non-monadic procedure.
Call it via 'map' instead of 'mapm'.
2019-07-06 16:17:24 +02:00
Jakob L. Kreuze 5cbb832fb1
Add 'guix deploy'.
* guix/scripts/deploy.scm: New file.
* Makefile.am (MODULES): Add it.
2019-07-06 02:10:04 -04:00
Jakob L. Kreuze a9b09ed776
ssh: Add 'identity' keyword to 'open-ssh-session'.
* guix/ssh.scm (open-ssh-session): Add 'identity' keyword argument.
2019-07-06 02:09:58 -04:00
Ludovic Courtès 728a4ab101
store: 'run-with-store' gracefully deals with #f store.
This is a followup to dd0ee954c4, which
introduced a failure in tests/graph.scm.

* guix/store.scm (run-with-store): Check whether STORE and NEW-STORE are
true before calling 'store-connection-object-cache' etc.  Fixes a
failure in tests/graph.scm related to %REVERSE-PACKAGE-NODE-TYPE, which
uses #f as the store.
2019-07-05 00:51:17 +02:00
Ludovic Courtès d74392a85c
derivations: Simplify 'substitution-oracle'.
* guix/derivations.scm (substitution-oracle)[valid?, dependencies]:
Remove.
[closure]: New procedure.
Rename parameter from 'drv' to 'inputs-or-drv' and adjust accordingly.
(derivation-build-plan): Pass INPUTS directly to 'substitution-oracle'.
* guix/ui.scm (show-what-to-build)[substitutable-info]: Likewise.
2019-07-05 00:51:17 +02:00
Ludovic Courtès b1510fd8d2
derivations: 'derivation-build-plan' recurses on substituables.
This fixes a bug whereby "guix build texlive -n" would report:

  0.0 MB would be downloaded:
     /gnu/store/…-texlive-20180414

instead of:

  The following derivation would be built:
     /gnu/store/…-texlive-texmf-20180414.drv
  2,595.2 MB would be downloaded:
     /gnu/store/…-texlive-20180414-texmf.tar.xz
     /gnu/store/…-texlive-20180414

where 'texlive-texmf' is a non-substitutable dependency of 'texlive'.

* guix/derivations.scm (dependencies-of-substitutables): New procedure.
(derivation-build-plan): When 'input-substitutable-info' returns true,
append the subset of DEPS that corresponds to SUBSTITUABLES to the first
argument of 'loop'.
* guix/ui.scm (show-what-to-build): Remove half-baked traversal of
DOWNLOAD.
* tests/derivations.scm ("derivation-build-plan and substitutes,
non-substitutable dep"): New test.
2019-07-05 00:51:17 +02:00
Ludovic Courtès dea62932bc
pack: 'squashfs' backend records the profile's search paths.
* guix/scripts/pack.scm (singularity-environment-file): New procedure.
(squashfs-image): Use it, and create /.singularity/env/90-environment.sh.
* gnu/tests/singularity.scm (run-singularity-test)["singularity run,
with environment"]: New test, currently skipped.
* gnu/tests/singularity.scm (build-tarball&run-singularity-test): Add
GUILE-JSON to the profile.
2019-07-04 18:05:02 +02:00
Ludovic Courtès b9fcf0c82a
pack: 'docker' backend records the profile's search paths.
* guix/docker.scm (config): Add #:environment parameter and honor it.
(build-docker-image): Likewise, and pass it to 'config'.
* guix/scripts/pack.scm (docker-image): Import (guix profiles) and (guix
search-paths).  Call 'profile-search-paths' and pass #:environment to
'build-docker-image'.
* gnu/tests/docker.scm (run-docker-test)["Load docker image and run it"]:
Add example that expects (json) to be available.
* gnu/tests/docker.scm (build-tarball&run-docker-test): Replace
%BOOTSTRAP-GUILE by GUILE-2.2 and GUILE-JSON in the environment.
2019-07-04 18:05:02 +02:00
Ludovic Courtès 9d8ab8034e
Add (guix remote).
* guix/remote.scm: New file.
* Makefile.am (MODULES): Add it.
2019-07-04 18:05:02 +02:00
Ludovic Courtès d0ffa321dd
inferior: Add 'read-repl-response'.
* guix/inferior.scm (read-repl-response): New procedure.
(read-inferior-response): Use it.
2019-07-04 18:05:02 +02:00
Ludovic Courtès 92a4087bf4
Add (guix repl).
* guix/scripts/repl.scm: Use (guix repl).
(self-quoting?, machine-repl): Remove.
* guix/repl.scm: New file.
* Makefile.am (MODULES): Add it.
2019-07-04 18:05:02 +02:00
Ludovic Courtès 2ca41030d5
gexp: Add 'lower-gexp' and express 'gexp->derivation' in terms of it.
* guix/gexp.scm (gexp-input-thing, gexp-input-output)
(gexp-input-native?): Export.
(lower-inputs): Return <gexp-input> records instead of tuples.
(lower-reference-graphs): Adjust accordingly.
(<lowered-gexp>): New record type.
(lower-gexp, gexp-input->tuple): New procedure.
(gexp->derivation)[%modules]: Remove.
[requested-graft?]: New variable.
[add-modules]: New procedure.
Rewrite in terms of 'lower-gexp'.
(gexp-inputs): Add TODO comment.
* tests/gexp.scm ("lower-gexp"): New test.
2019-07-04 18:05:02 +02:00
Ludovic Courtès dd0ee954c4
store: 'run-with-store' preserves the functional object cache.
This increases the hit rate of the object cache from 56% to 85% when
running something like 'guix build libreoffice -nd'.

* guix/store.scm (set-store-connection-object-cache!): New procedure.
(run-with-store): Copy 'object-cache' field of the new store into the
original one.
2019-07-03 23:44:19 +02:00
Ludovic Courtès e85a7b7f8c
derivations: 'substitution-oracle' no longer calls 'read-derivation-from-file'.
This is a followup to 5cf4b26d52.

* guix/derivations.scm (substitution-oracle): Use
'derivation-input-derivation' instead of calling
'read-derivation-from-file'.
2019-07-03 23:44:19 +02:00
Ludovic Courtès c14a2b289d
derivations: Avoid another call to 'read-derivation-from-file'.
This is a followup to 5cf4b26d52.

* guix/derivations.scm (derivation-path->base16-hash): Rename to...
(derivation-base16-hash): ... this, and take a <derivation> rather than
a file name.  Use 'mlambdaq' instead of 'mlambda'.
(derivation/masked-inputs): Adjust accordingly.
(invalidate-derivation-caches!): Likewise.
2019-07-03 23:44:19 +02:00
Ludovic Courtès 1653b23564
derivations: 'map-derivation' no longer calls 'read-derivation-from-file'.
This is a followup to 5cf4b26d52.

* guix/derivations.scm (map-derivation)[rewritten-input]: Avoid call to
'read-derivation-from-file'.
2019-07-03 23:44:19 +02:00
Ludovic Courtès e79281be10
derivations: Work around pathological memoization behavior.
This works around <https://bugs.gnu.org/36487>.

* guix/derivations.scm (invalidate-derivation-caches!): Comment out
'hash-clear!' call.
2019-07-03 20:06:31 +02:00
Kyle Meyer 723f5b1dc9
profiles: Adjust packages->manifest pattern for inferior packages.
* guix/profiles.scm (packages->manifest): Add package? predicate to `(package
output)' pattern to avoid incorrectly matching `(inferior-package output)',
which should be handled by a later clause.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2019-07-03 12:03:07 +02:00
Ludovic Courtès 9616b81e98
grafts: 'references-oracle' now takes a derivation input.
That way, if we end up calling 'build-derivations', we'll only build the
outputs that we really need.

* guix/grafts.scm (references-oracle): Rename 'drv' to 'input'.
[output-paths]: Remove.
Adjust accordingly.
(graft-derivation): Adjust call to 'references-oracle'.
2019-07-02 18:33:51 +02:00
Ludovic Courtès 7c9fbf3e3d
derivations: Update 'build-derivations' docstring.
This is a followup to 7c690a4738.

* guix/derivations.scm (build-derivations): Update docstring.
2019-07-02 18:33:51 +02:00
Maxim Cournoyer 4b60ab8c00
import: pypi: Preserve package name case when forming pypi-uri.
Fixes <https://bugs.gnu.org/33046>.

* guix/build-system/python.scm (pypi-uri): Update the host URI to
"files.pythonhosted.org".
* guix/import/pypi.scm (make-pypi-sexp): Preserve the package name case when
the source URL calls for it.
2019-07-02 10:08:00 +09:00
Maxim Cournoyer a537620054
import: pypi: Update the host URI.
* guix/build-system/python.scm (pypi-uri): Update the host URI to
"files.pythonhosted.org".
2019-07-02 10:08:00 +09:00
Maxim Cournoyer d514276b93
import: pypi: Include optional test inputs as native-inputs.
* guix/import/pypi.scm (maybe-inputs): Add INPUT-TYPE argument, and use it.
(test-section?): New predicate.
(parse-requires.txt): Collect the optional test inputs, and return them as the
second element of the returned list.
(parse-wheel-metadata): Likewise.
(guess-requirements): Adapt.
(make-pypi-sexp): Likewise, and include the test inputs requirements as native
inputs in the returned package expression.

* tests/pypi.scm (test-requires.txt): Include a test section in the
test-requires.txt data.
(test-requires.txt-beaker): New variable.
("parse-requires.txt"): Adapt.
("parse-requires.txt - Beaker"): New test.
("parse-wheel-metadata, with extras"): Adapt.
("parse-wheel-metadata, with extras - Jedi"): Adapt.
("pypi->guix-package, no wheel"): Re-indent, and add the expected
native-inputs.
("pypi->guix-package, wheels"): Likewise.
2019-07-02 10:08:00 +09:00
Maxim Cournoyer f801c6215d
import: pypi: Completely mute the output of the "unzip" command.
* guix/import/pypi.scm (guess-requirements): Completely mute the output of the
"unzip" command.
2019-07-02 10:08:00 +09:00
Maxim Cournoyer 73e8373060
import: pypi: Fix typo in docstring.
* guix/import/pypi.scm (guess-requirements): Fix typo.
2019-07-02 10:08:00 +09:00
Maxim Cournoyer f0190a5dcd
import: pypi: Parse wheel METADATA instead of metadata.json.
With newer Wheel releases, there is no more metadata.json file; the METADATA
file should be used instead (see: https://github.com/pypa/wheel/issues/195).

This change updates our PyPI importer so that it uses the latter.

* guix/import/pypi.scm (define-module): Remove unnecessary modules and export
the PARSE-WHEEL-METADATA procedure.
(parse-wheel-metadata): Add procedure.
(guess-requirements): Use it.
* tests/pypi.scm (test-metadata): Test it.
2019-07-02 10:08:00 +09:00
Maxim Cournoyer c799ad7276
import: pypi: Support more types of archives.
This change enables the PyPI importer to look for requirements in a source
archive of a different type than "tar.gz" or "tar.bz2".  Also, scan the source
archive to find a requires.txt file.

* guix/import/pypi.scm: (guess-requirements)[tarball-directory]: Remove procedure.
[guess-requirements-from-source]: Use COMRESSED-FILE? to determine if an
archive type is supported, and some file extension logic that chooses either
"tar" or "unzip" as the extractor.  Search for the requires.txt file in the
archive instead of using a static, expected location.
(guess-requirements): Rename the TARBALL argument to ARCHIVE, to denote the
archive format is no longer bound specifically to the Tar format.
(compute-inputs): Likewise.
* tests/pypi.scm ("pypi->guix-package, no wheel"): Mock the requires.txt at a
non-standard location.
("pypi->guix-package, no usable requirement file."): New test.
2019-07-02 10:07:59 +09:00
Maxim Cournoyer cc9a77cd39
import: pypi: Deduplicate requirements.
* guix/import/pypi.scm (parse-requires.txt): Remove potential duplicates.
2019-07-02 10:07:59 +09:00
Maxim Cournoyer 803fb336d6
import: pypi: Improve parsing of requirement specifications.
The previous solution was fragile and could leave unwanted characters in a
requirement name, such as '[' or ']'.

Partially fixes <https://bugs.gnu.org/33047>.

* guix/import/pypi.scm (use-modules): Export SPECIFICATION->REQUIREMENT-NAME
(%requirement-name-regexp): New variable.
(clean-requirement): Rename to...
(specification->requirement-name): this, which now uses
%requirement-name-regexp to select the requirement name from the requirement
specification.
(parse-requires.txt): Adapt.
2019-07-02 10:07:59 +09:00
Maxim Cournoyer c4797121be
import: pypi: Do not parse optional requirements from source.
* guix/import/pypi.scm: Export PARSE-REQUIRES.TXT.
(clean-requirement): Move procedure to the top level.
(guess-requirements): Move the READ-REQUIREMENTS procedure to the top level,
and rename it to PARSE-REQUIRES.TXT.  Move the CLEAN-REQUIREMENT procedure to
the top level.  Move the COMMENT? functions inside the PARSE-REQUIRES.TXT
procedure.
(parse-requires.txt): Add a SECTION-HEADER? predicate, and use it to prevent
parsing optional requirements.

* tests/pypi.scm (test-requires-with-sections): New variable.
("parse-requires.txt, with sections"): New test.
2019-07-02 10:07:59 +09:00
Maxim Cournoyer 01589acc5e
import: pypi: Do not consider requirements.txt files.
PyPI packages are mandated to have a setup.py file, which contains a listing
of the required dependencies.  The setuptools/distutils machinery embed
metadata in the archives they produce, which contains this information. There
is no need nor gain to collect the requirements from a "requirements.txt"
file, as it is not the true record of dependencies for PyPI packages and may
contain extraneous requirements or not exist at all.

* guix/import/pypi.scm (guess-requirements): Update comment.
[guess-requirements-from-source]: Do not attempt to parse the file
requirements.txt.  Streamline logic.
* tests/pypi.scm (test-requires.txt): Rename from test-requirements, to hint
at the file being tested.
("pypi->guix-package"): Adapt so that the fake package contains a requires.txt
file rather than a requirements.txt file.
("pypi->guix-package, wheels"): Likewise.
2019-07-02 10:07:59 +09:00
Ivan Petkov 022288ba53
guix: import: crate: fix redundant inputs list nesting
* guix/import/crate.scm (maybe-cargo-inputs): Remove one level of lists.
* guix/import/crate.scm (maybe-cargo-development-inputs): Same.
* tests/crate.scm: (crate->guix-package)[package]<#:arguments>: Remove
one level of list nesting.
2019-06-30 09:01:27 -07:00
Tobias Geerinckx-Rice 87a90486ca
download: Remove hydra from content-addressed URL list
* guix/build/download-nar.scm (urls-for-item): Remove
mirror.hydra.gnu.org.
* guix/download.scm (%content-addressed-mirrors): Likewise.
2019-06-29 14:31:23 +02:00
Tobias Geerinckx-Rice 3a8bfebed9
etc: Remove hydra.gnu.org.pub key.
* etc/substitutes/hydra.gnu.org.pub: Delete file.
* guix/self.scm (miscellaneous-files): Don't install it.
* Makefile.am (dist_pkgdata_DATA): Remove it.
* gnu/services/base.scm (%default-authorized-guix-keys): Likewise.
(hydra-key-authorization): Rename to…
(substitute-key-authorization): …this.  Adjust only call site.
2019-06-29 14:27:22 +02:00
Ludovic Courtès 08c95ba28d
ui: 'show-derivation-outputs' accepts <derivation-input> records.
* guix/ui.scm (show-derivation-outputs): Handle <derivation-input>
records.
2019-06-27 11:14:42 +02:00
Ludovic Courtès d38d4ffa10
ui: 'show-what-to-build' accepts derivation inputs.
This is a followup to f8a9f99cd6.

* guix/ui.scm (show-what-to-build)[inputs]: New variables.
[substitutable-info]: Build the derivation list from INPUTS.
Pass INPUTS to 'derivation-build-plan'.
2019-06-27 11:14:42 +02:00
Ludovic Courtès 7c690a4738
derivations: 'build-derivations' can be passed derivation inputs.
* guix/derivations.scm (build-derivations): Accept <derivation-input>
records among DERIVATIONS.
* tests/derivations.scm ("build-derivations with specific output"): Test
it.
2019-06-27 11:14:41 +02:00
Ludovic Courtès fd951cd543
derivations: 'derivation' preserves pointer equality.
* guix/derivations.scm (derivation): Check if FILE is already in
%DERIVATION-CACHE and return it if it is.
2019-06-27 11:14:41 +02:00
Ludovic Courtès 5cf4b26d52
derivations: <derivation-input> now aggregates a <derivation>.
Consequently, the whole graph of <derivation> object is readily
available without having to go through 'read-derivation-from-file',
which could have cache misses if the requested <derivation> object had
been GC'd in the meantime.  This is an important property for the
performance of things like 'derivation-build-plan' that traverse the
derivation graph.

* guix/derivations.scm (<derivation-input>): Replace 'path' field by
'derivation'.
(derivation-input-path): Adjust accordingly.
(derivation-input-key): New procedure.
(derivation-input-output-paths): Adjust accordingly.
(coalesce-duplicate-inputs): Likewise.
(derivation-prerequisites): Use 'derivation-input-key' to compute keys
for INPUT-SET.
(derivation-build-plan): Likewise.
(read-derivation): Add optional 'read-derivation-from-file' parameter.
[make-input-drvs]: Call it.
(write-derivation)[write-input]: Adjust to new <derivation-input>.
(derivation/masked-inputs): Likewise, and remove redundant
'coalesce-duplicate-inputs' call.
(derivation)[input->derivation-input]: Change to consider only the
derivation case.  Update call to 'make-derivation-input'.
[input->source]: New procedure.
Separate sources from inputs.
(map-derivation): Adjust to new <derivation-input>.
* tests/derivations.scm ("parse & export"): Pass a second argument to
'read-derivation'.
("build-expression->derivation and derivation-prerequisites")
("derivation-prerequisites and valid-derivation-input?"): Adjust to new
<derivation-input>.
2019-06-27 11:14:41 +02:00
Ludovic Courtès a250061986
graph: Use 'derivation-input-derivation'.
* guix/scripts/graph.scm (derivation-dependencies): Use
'derivation-input-derivation'.
2019-06-27 11:14:41 +02:00
Ludovic Courtès 9844d0091e
ui: 'show-what-to-build' uses 'derivation-build-plan'.
* guix/ui.scm (show-what-to-build)[build-or-substitutable?]: Remove.
Use 'derivation-build-plan' instead of
'derivation-prerequisites-to-build', passing it all of DRV at once, and
remove 'fold2' shenanigans and postprocessing of BUILD.
2019-06-27 11:14:41 +02:00
Ludovic Courtès ba04f80e2e
derivations: Rewrite and replace 'derivations-prerequisites-to-build'.
The new 'derivation-build-plan' procedure has a more appropriate
signature: it takes a list of <derivation-inputs> instead of taking one
<derivation>.  Its body is also much simpler.

* guix/derivations.scm (derivation-build-plan): New procedure.
(derivation-prerequisites-to-build): Express in terms of
'derivation-build-plan' and mark as deprecated.
* tests/derivations.scm: Change 'derivation-prerequisites-to-build'
tests to 'derivation-build-plan' and adjust accordingly.
2019-06-27 11:14:41 +02:00
Ludovic Courtès c89985d91d
derivations: Add 'derivation-input'.
* guix/derivations.scm (derivation-input): New procedure.
* tests/grafts.scm (make-derivation-input): Remove.
("graft-derivation, unused outputs not depended on"): Use
'derivation-input'.
2019-06-27 11:14:41 +02:00
Ludovic Courtès 4311cf965c
ui: Add 'display-search-results' and use it.
* guix/ui.scm (display-search-results): New procedure.
* guix/scripts/package.scm (find-packages-by-description): Remove
'unzip2' call and return a list of pairs.
(process-query): Change to use 'display-search-results'.
* guix/scripts/system/search.scm (find-service-types): Remove 'unzip2'
call and return a list of pairs.
(guix-system-search): Use 'display-search-results'.
2019-06-27 11:14:41 +02:00