challenge: Do nothing when passed zero arguments.

Previously, 'guix challenge' without arguments would list live store
items that had been locally built.  This was deemed confusing,
especially since 'list-live' is an expensive operation.

* guix/scripts/challenge.scm (guix-challenge): Warn and exit with 0 when
FILES is empty.
* doc/guix.texi (Invoking guix challenge): Update accordingly.
This commit is contained in:
Ludovic Courtès 2022-06-19 15:50:50 +02:00
parent 4745be8514
commit e7ab3d33ae
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 25 additions and 18 deletions

View file

@ -14941,7 +14941,9 @@ any given store item.
The command output looks like this: The command output looks like this:
@smallexample @smallexample
$ guix challenge --substitute-urls="https://@value{SUBSTITUTE-SERVER-1} https://guix.example.org" $ guix challenge \
--substitute-urls="https://@value{SUBSTITUTE-SERVER-1} https://guix.example.org" \
openssl git pius coreutils grep
updating substitutes from 'https://@value{SUBSTITUTE-SERVER-1}'... 100.0% updating substitutes from 'https://@value{SUBSTITUTE-SERVER-1}'... 100.0%
updating substitutes from 'https://guix.example.org'... 100.0% updating substitutes from 'https://guix.example.org'... 100.0%
/gnu/store/@dots{}-openssl-1.0.2d contents differ: /gnu/store/@dots{}-openssl-1.0.2d contents differ:
@ -14968,18 +14970,20 @@ updating substitutes from 'https://guix.example.org'... 100.0%
@dots{} @dots{}
6,406 store items were analyzed: 5 store items were analyzed:
- 4,749 (74.1%) were identical - 2 (40.0%) were identical
- 525 (8.2%) differed - 3 (60.0%) differed
- 1,132 (17.7%) were inconclusive - 0 (0.0%) were inconclusive
@end smallexample @end smallexample
@noindent @noindent
In this example, @command{guix challenge} first scans the store to In this example, @command{guix challenge} queries all the substitute
determine the set of locally-built derivations---as opposed to store servers for each of the fives packages specified on the command line.
items that were downloaded from a substitute server---and then queries It then reports those store items for which the servers obtained a
all the substitute servers. It then reports those store items for which result different from the local build (if it exists) and/or different
the servers obtained a result different from the local build. from one another; here, the @samp{local hash} lines indicate that a
local build result was available for each of these packages and shows
its hash.
@cindex non-determinism, in package builds @cindex non-determinism, in package builds
As an example, @code{guix.example.org} always gets a different answer. As an example, @code{guix.example.org} always gets a different answer.
@ -15035,19 +15039,21 @@ whether @code{@value{SUBSTITUTE-SERVER-1}} and other substitute servers obtain t
same build result as you did with: same build result as you did with:
@example @example
$ guix challenge @var{package} guix challenge @var{package}
@end example @end example
@noindent
where @var{package} is a package specification such as
@code{guile@@2.0} or @code{glibc:debug}.
The general syntax is: The general syntax is:
@example @example
guix challenge @var{options} [@var{packages}@dots{}] guix challenge @var{options} @var{argument}@dots{}
@end example @end example
@noindent
where @var{argument} is a package specification such as
@code{guile@@2.0} or @code{glibc:debug} or, alternatively, a store file
name as returned, for example, by @command{guix build} or @command{guix
gc --list-live}.
When a difference is found between the hash of a locally-built item and When a difference is found between the hash of a locally-built item and
that of a server-provided substitute, or among substitutes provided by that of a server-provided substitute, or among substitutes provided by
different servers, the command displays it as in the example above and different servers, the command displays it as in the example above and

View file

@ -537,8 +537,9 @@ (define-command (guix-challenge . args)
(current-terminal-columns (terminal-columns))) (current-terminal-columns (terminal-columns)))
(let ((files (match files (let ((files (match files
(() (()
(filter (cut locally-built? store <>) (warning
(live-paths store))) (G_ "no arguments specified, nothing to do~%"))
(exit 0))
(x (x
files)))) files))))
(set-build-options store (set-build-options store