Commit Graph

5091 Commits

Author SHA1 Message Date
Ludovic Courtès
4ae762af76
channels: Warn when pulling from a mirror.
* guix/channels.scm (<channel-metadata>)[url]: New field.
(read-channel-metadata): Initialize it.
(read-channel-metadata-from-source): Likewise.
(channel-instance-primary-url): New procedure.
(latest-channel-instances): Compare CHANNEL's URL against it.
* doc/guix.texi (Channels)[Primary URL]: New subsection.
2020-06-17 19:32:43 +02:00
Ludovic Courtès
ba8c09f289
build-system/gnu: Rename "make dist" phase to 'build-dist'.
* guix/build/gnu-dist.scm (%dist-phases): Add BUILD under the name
'build-dist'.
2020-06-17 19:32:43 +02:00
Ludovic Courtès
7488d70c55
build-system/gnu: Simplify 'dist-package'.
* guix/build-system/gnu.scm (dist-package): Use default keyword
arguments in 'substitute-keyword-arguments'.
2020-06-17 19:32:43 +02:00
Ludovic Courtès
dabbddbbaa
build-system/gnu: Remove redundant 'unpack' phase from 'gnu-dist'.
This has become redundant with the standard 'unpack' phase since
17919a5801.

* guix/build/gnu-dist.scm (copy-source): Remove.
(%dist-phases): Remove 'unpack' phase.
2020-06-17 19:32:43 +02:00
Ludovic Courtès
03686f26cc
build-system/gnu: Remove Hydra-specific code from 'gnu-dist'.
* guix/build/gnu-dist.scm (install-dist): Remove code for
'hydra-build-products'.
2020-06-17 19:32:43 +02:00
Ludovic Courtès
2ee1cce324
build-system/gnu: Remove 'autoreconf' phase from 'gnu-dist'.
This has been superseded by the 'bootstrap' phase added in
189be331ac.

* guix/build/gnu-dist.scm (autoreconf): Remove.
(%dist-phases): Remove it.
2020-06-17 19:32:43 +02:00
Ludovic Courtès
8cca3f939a
build-system/gnu: Adjust 'dist-package' to current 'autoconf-wrapper' API.
This is a followup to 464f544739.

* guix/build-system/gnu.scm (dist-package): Do not call 'autoconf-wrapper'.
2020-06-17 19:32:43 +02:00
Ludovic Courtès
94642ab06b
profiles: Add comment at the top of 'manifest' file.
* guix/build/profiles.scm (build-profile): Add comment at the top of
MANIFEST-FILE.
2020-06-17 12:06:33 +02:00
Ludovic Courtès
838ac881ec
time-machine: Add '--disable-authentication'.
* guix/inferior.scm (cached-channel-instance): Add #:authenticate? and
pass it to 'latest-channel-instances'.
* guix/scripts/time-machine.scm (show-help, %options): Add
'--disable-authentication'.
(%default-options): Add 'authenticate-channels?'.
(guix-time-machine): Honor it.
2020-06-16 16:10:47 +02:00
Ludovic Courtès
a9eeeaa6ae
pull: Add '--disable-authentication'.
* guix/channels.scm (latest-channel-instance): Add #:authenticate? and
honor it.
(latest-channel-instances): Likewise.
* guix/scripts/pull.scm (%default-options): Add 'authenticate-channels?'.
(show-help, %options): Add '--disable-authentication'.
(guix-pull): Pass #:authenticate? to 'latest-channel-instances'.
* doc/guix.texi (Invoking guix pull): Document it.
2020-06-16 16:10:47 +02:00
Ludovic Courtès
c3f6f564e9
channels: Automatically add introduction for the official 'guix' channel.
This is useful when people run "guix time-machine -C channels.scm",
where 'channels.scm' misses channel introductions.

* guix/channels.scm (%default-channel-url): New variable.
(%default-channels): Use it.
(ensure-default-introduction): New procedure.
(latest-channel-instance): Call it.
2020-06-16 16:10:47 +02:00
Ludovic Courtès
5bafc70d1e
channels: Make 'validate-pull' call right after clone/pull.
This should come before patching, authentication, etc.

* guix/channels.scm (latest-channel-instance): Add #:validate-pull
parameter and honor it.  Return a single value: the instance.
(ensure-forward-channel-update): Change 'instance' parameter to 'commit'
and adjust accordingly.
(latest-channel-instances): Adjust to 'latest-channel-instance' changes.
* guix/scripts/pull.scm (warn-about-backward-updates): Change 'instance'
parameter to 'commit' and adjust accordingly.
* tests/channels.scm ("latest-channel-instances #:validate-pull"):
Likewise.
2020-06-16 16:10:47 +02:00
Ludovic Courtès
43badf261f
channels: 'latest-channel-instance' authenticates Git checkouts.
Fixes <https://bugs.gnu.org/22883>.

* guix/channels.scm (<channel>)[introduction]: New field.
(<channel-introduction>): New record type.
(%guix-channel-introduction): New variable.
(%default-channels): Use it.
(<channel-metadata>)[keyring-reference]: New field.
(%default-keyring-reference): New variable.
(read-channel-metadata, read-channel-metadata-from-source): Initialize
the 'keyring-reference' field.
(commit-short-id, verify-introductory-commit)
(authenticate-channel): New procedures.
(latest-channel-instance): Call 'authenticate-channel' when CHANNEL has
an introduction.
* tests/channels.scm (gpg+git-available?, commit-id-string): New
procedures.
("authenticate-channel, wrong first commit signer"):
("authenticate-channel, .guix-authorizations"): New tests.
* doc/guix.texi (Invoking guix pull): Mention authentication.
2020-06-16 16:10:47 +02:00
Ludovic Courtès
1e2b9bf2d4
tests: Move OpenPGP helpers to (guix tests gnupg).
* tests/git-authenticate.scm (key-id): Remove.
(%ed25519-public-key-file, %ed25519-secret-key-file)
(%ed25519bis-public-key-file, %ed25519bis-secret-key-file)
(read-openpgp-packet, key-fingerprint): Move to...
* guix/tests/gnupg.scm: ... here.
2020-06-16 16:10:46 +02:00
Ludovic Courtès
41946b79f1
git-authenticate: 'authenticate-commits' takes a #:keyring parameter.
* guix/git-authenticate.scm (authenticate-commits): Add #:keyring
parameter.
2020-06-16 16:10:46 +02:00
Ludovic Courtès
a450b4343b
git-authenticate: Cache takes a key parameter.
* guix/git-authenticate.scm (authenticated-commit-cache-file)
(cache-authenticated-commit, previously-authenticated-commits): Add
'key' parameter and honor it.
* build-aux/git-authenticate.scm (git-authenticate): Pass
"channels/guix" as the key.
2020-06-16 16:10:46 +02:00
Efraim Flashner
3646a44a14
build-system: cmake: Add substitutable keyword.
* guix/build-system/cmake.scm (cmake-build, cmake-cross-build): Add
substitutable keyword.
2020-06-16 16:40:27 +03:00
Tobias Geerinckx-Rice
38ee8f7dba
pack: Add zstd compressor.
* guix/scripts/pack.scm (%compressors): Add zstd.
* doc/guix.texi (Invoking guix pack): Document it.
2020-06-16 13:35:33 +02:00
Arun Isaac
bd03e99f66
ui: Use package-description-string.
* guix/ui.scm (package->recutils): Use package-description-string instead of
package-description and P_.
2020-06-15 23:31:56 +05:30
Arun Isaac
a1da0904a6
ui: Do not translate package synopsis a second time.
* guix/ui.scm (package->recutils): package-synopsis-string already returns a
translated string. Do not attempt to translate it again.
2020-06-15 23:31:56 +05:30
Arun Isaac
e70a884706
ui: Cut off search early if any regexp does not match.
* guix/ui.scm (relevance): When one of the regexps does not match, cut off
early and return 0. Do not try to match the remaining regexps.
2020-06-15 23:31:56 +05:30
Mathieu Othacehe
53e6195607
ci: Add build-products id field and export accessors.
* guix/ci.scm (build-product?, build-product-id,
build-product-type, build-product-file-size,
build-product-path): Export them,
[id]: new field.
2020-06-15 15:34:19 +02:00
Mathieu Othacehe
9e989d9e36
ci: Add status option to "latest-builds".
* guix/ci.scm (latest-builds): Add "status" option.
2020-06-15 15:33:42 +02:00
Tobias Geerinckx-Rice
c9ea4eecf4
download: Remove usa-mirror.go-parts.com mirror.
It incorrectly redirects 404s (at least) to the commercial home page.

* guix/download.scm (%mirrors): Remove usa-mirror.go-parts.com URLs.
2020-06-15 14:26:44 +02:00
Mathieu Othacehe
bb76f50b9b
ci: Fix buildproducts reading.
This is a follow-up of 4e05bbb093.

* guix/ci.scm (<build>)[products]: Test for vector type, as products can be
"null".
2020-06-15 09:53:02 +02:00
Mathieu Othacehe
ef6f9f16fe
ci: Add job option to "latest-builds".
* guix/ci.scm (latest-builds): Add "job" option.
2020-06-15 09:15:08 +02:00
Mathieu Othacehe
4e05bbb093
ci: Add build products support.
* guix/ci.scm (<build-product>): New json mapping,
(<build)[products]: new field.
2020-06-15 09:15:08 +02:00
Konrad Hinsen
c924e54139
guix repl: Add script execution.
* guix/scripts/repl.scm: Add filename options for script execution.
* doc/guix.texi (Invoking guix repl): Document it.
* tests/guix-repl.sh: Test it.
* Makefile.am: (SH_TESTS): Add it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-06-14 23:02:36 +02:00
Mathieu Othacehe
80f92866e3
scripts: system: Fix "init" command.
This is a follow-up of 7ca533c723. The
introduced "target" variable is shadowing the target argument.

* guix/scripts/system.scm (perform-action): Rename "target" variable to
"target*".
2020-06-14 17:42:36 +02:00
Ludovic Courtès
993023a28e
lint: Add 'check-for-collisions' checker.
Suggested by Edouard Klein <edk@beaver-labs.com>.

* guix/profiles.scm (check-for-collisions): Export.
* guix/lint.scm (check-profile-collisions): New procedure.
(%local-checkers): Add 'profile-collisions' checker.
* tests/lint.scm ("profile-collisions: no warnings")
("profile-collisions: propagated inputs collide")
("profile-collisions: propagated inputs collide, store items"): New tests.
* doc/guix.texi (Invoking guix lint): Document it.
2020-06-14 15:34:42 +02:00
Ludovic Courtès
9acac9f9c6
profiles: Fix pathological performance of 'manifest-transitive-entries'.
For packages with lots of propagated inputs,
'manifest-transitive-entries', as called from 'check-for-collisions',
would exhibit pathological behavior.  For example, "guix install cl-ana"
wouldn't complete in 1mn; now, it's down to 20s.

The issue was that manifest entries would never be 'equal?' due to the
delayed field in <manifest-entry>.

* guix/profiles.scm (manifest-transitive-entries): Use a vhash instead
of a set.  Use 'manifest-entry=?' instead of 'equal?' when checking for
equality.
2020-06-14 15:34:41 +02:00
Ludovic Courtès
e66f243e92
ui: Set 'LESS' environment variable unconditionally.
Fixes <https://bugs.gnu.org/41811>.
Reported by Lars-Dominik Braun <lars@6xq.net>.

* guix/ui.scm (call-with-paginated-output-port): Remove (getenv "LESS")
call.
2020-06-14 15:34:38 +02:00
Marius Bakke
8ab70bae52
Merge branch 'staging' 2020-06-13 22:52:25 +02:00
Jan (janneke) Nieuwenhuizen
7ca533c723
image: Make 'find-image' non-monadic.
* gnu/system/image.scm (find-image): Make non-monadic.  Add 'target'
parameter.
* gnu/tests/install.scm (run-install): Update caller,
passing (%current-target-system).
* guix/scripts/system.scm (perform-action): Likewise.
2020-06-13 15:03:55 +02:00
Ricardo Wurmus
8e518d4802
guix: Update to Bioconductor 3.11.
* guix/build-system/r.scm (bioconductor-uri): Use new URL.
* guix/import/cran.scm (%bioconductor-version): Update to 3.11.
2020-06-13 01:19:38 +02:00
Christopher Baines
db6290af7c
lint: check-patch-file-names: Use origin-actual-file-name.
This avoids crashes for the patch-file-names checker where a <origin> is used
for a patch, but without a value for the file-name field. This is currently
the case with the bash package.

* guix/lint.scm (check-patch-file-names): Change origin-file-name to
origin-actual-file-name.
2020-06-12 22:26:47 +01:00
Ludovic Courtès
52c529ff20
git-authenticate: Disallow SHA1 (and MD5) signatures.
* guix/git-authenticate.scm (commit-signing-key): Add
 #:disallowed-hash-algorithms and honor it.
(authenticate-commit)[recent-commit?]: New variable.
Pass #:disallowed-hash-algorithms to 'commit-signing-key'.
* tests/git-authenticate.scm ("signed commits, SHA1 signature"): New test.
2020-06-12 18:56:11 +02:00
Efraim Flashner
205a0ecd5b
download: Add more apache mirrors.
* guix/download.scm (%mirrors): Add more apache mirrors.
2020-06-12 18:28:51 +03:00
Chris Marusich
21887021b9
guix: lint: Support origins in check-patch-file-names.
* guix/lint.scm (check-patch-file-names)[starts-with-package-name?]: New
procedure, extracted from the existing logic.  Using it, add a clause to
the match-lambda to handle origin records.
2020-06-11 22:30:14 -07:00
Marius Bakke
9b043df740
Merge branch 'master' into staging 2020-06-11 23:30:32 +02:00
Ludovic Courtès
03a70e4c19
packages: 'package-grafts' returns grafts for all the relevant outputs.
Fixes <https://bugs.gnu.org/41796>.
Reported by Jakub Kądziołka <kuba@kadziolka.net>.

* guix/packages.scm (input-graft): Add 'output' parameter and honor it.
Add OUTPUT to the cache key.
(input-cross-graft): Likewise.
(fold-bag-dependencies): Operate on inputs instead of nodes.  Turn
VISITED into a vhash instead of a set.  Pass PROC HEAD and OUTPUT
instead of just HEAD.
(bag-grafts): Adjust accordingly.
* tests/packages.scm ("package-grafts, dependency on several outputs"):
New test.
2020-06-11 19:05:05 +02:00
Caleb Ristvedt
8971f626f2
database: separate transaction-handling and retry-handling.
Previously call-with-transaction would both retry when SQLITE_BUSY errors were
thrown and do what its name suggested (start and rollback/commit a
transaction).  This changes it to do only what its name implies, which
simplifies its implementation.  Retrying is provided by the new
call-with-SQLITE_BUSY-retrying procedure.

* guix/store/database.scm (call-with-transaction): no longer restarts, new
  #:restartable? argument controls whether "begin" or "begin immediate" is
  used.
  (call-with-SQLITE_BUSY-retrying, call-with-retrying-transaction,
  call-with-retrying-savepoint): new procedures.
  (register-items): use call-with-retrying-transaction to preserve old
  behavior.

* .dir-locals.el (call-with-retrying-transaction,
  call-with-retrying-savepoint): add indentation information.
2020-06-10 21:54:35 -05:00
Caleb Ristvedt
37545de4a3
database: ensure update-or-insert is run within a transaction
update-or-insert can break if an insert occurs between when it decides whether
to update or insert and when it actually performs that operation.  Putting the
check and the update/insert operation in the same transaction ensures that the
update/insert will only succeed if no other write has occurred in the middle.

* guix/store/database.scm (call-with-savepoint): new procedure.
  (update-or-insert): use call-with-savepoint to ensure the read and the
  insert/update occur within the same transaction.
2020-06-10 21:54:35 -05:00
Caleb Ristvedt
5d6e225528
database: rewrite query procedures in terms of with-statement.
Most of our queries would fail to finalize their statements properly if sqlite
returned an error during their execution.  This resolves that, and also makes
them somewhat more concise as a side-effect.

This also makes some small changes to improve certain queries where behavior
was strange or overly verbose.

* guix/store/database.scm (call-with-statement): new procedure.
  (with-statement): new macro.
  (last-insert-row-id, path-id, update-or-insert, add-references): rewrite to
  use with-statement.
  (update-or-insert): factor last-insert-row-id out of the end of both
  branches.
  (add-references): remove pointless last-insert-row-id call.

* .dir-locals.el (with-statement): add indenting information.
2020-06-10 21:54:35 -05:00
Caleb Ristvedt
3cd92a855e
database: work around guile-sqlite3 bug preventing statement reset
guile-sqlite3 provides statement caching, making it unnecessary for sqlite to
keep re-preparing statements that are frequently used.  Unfortunately it
doesn't quite emulate the semantics of sqlite_finalize properly, because it
doesn't cause a commit if the statement being finalized is the last "active"
statement (see https://notabug.org/guile-sqlite3/guile-sqlite3/issues/12).  We
work around this by wrapping sqlite-finalize with our own version that ensures
sqlite-reset is called, which does The Right Thing™.

* guix/store/database.scm (sqlite-finalize): new procedure that shadows the
  sqlite-finalize from (sqlite3).
2020-06-10 21:54:32 -05:00
Tobias Geerinckx-Rice
35b00d4caa
import: stackage: Fix typo.
* guix/import/stackage.scm (latest-lts-release): Fix spelling of ‘if’.
2020-06-09 22:30:08 +02:00
Marius Bakke
2e08394b3c
import: stackage: Fix typo.
* guix/import/stackage.scm (latest-lts-release): Fix spelling of "included".
2020-06-09 20:43:36 +02:00
Lars-Dominik Braun
7a45b5d5ba
store: Use buffered I/O for all protocol writes
* guix/store.scm (run-gc) Use buffered output port.
(export-path) Same.
(add-file-tree-to-store) Same.
(set-build-options): Same. Add explicit flush.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-06-09 10:43:54 +02:00
Ludovic Courtès
eef859e853
git-authenticate: 'commit-authorized-keys' properly handles orphan commits.
Previously it would trigger a wrong-number-of-arguments error for
'lset-intersection'.

* guix/git-authenticate.scm (commit-authorized-keys): Add case for when
'commit-parents' returns the empty list.
2020-06-09 00:34:52 +02:00
Ludovic Courtès
72357e2170
git: 'commit-difference' really excludes the ancestors of #:excluded.
* guix/git.scm (commit-difference): Initialize VISITED to the closure of
OLD and EXCLUDED, as written in the docstring.
* tests/git.scm ("commit-difference, excluded commits"): Adjust
accordingly.
2020-06-09 00:34:52 +02:00