Commit Graph

258 Commits

Author SHA1 Message Date
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
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
Ludovic Courtès
c39693d760
ui: 'display-search-results' automatically invokes the pager.
* guix/ui.scm (call-with-paginated-output-port): New procedure.
(with-paginated-output-port): New macro.
(display-search-results): Use it instead of displaying a hint.
2020-06-06 23:28:49 +02:00
Vincent Legoll
694e10af63
ui: Fix typos, 80-col & grammar in comments & docstrings.
* guix/ui.scm (load*): Fix comment line length.
(leave-on-EPIPE): Fix typo in docstring.
(substitutable-info): Fix typo in comment.
(indented-string): Fix typo in docstring.
(%package-metrics): Fix typo in comment.
(run-guix): Fix grammar in docstring.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2020-04-17 23:18:32 +02:00
Ludovic Courtès
5c83dd1d64
ui: Clarify "dependencies changed".
Suggested by Leo Famulari <leo@famulari.name>.

* guix/ui.scm (show-manifest-transaction): Change to "dependencies or
package changed".
2020-04-02 11:48:24 +02:00
Ludovic Courtès
8465f1f680
ui: 'show-manifest-transaction' tabulates package lists for install/remove.
It also removes the store file name from the output.

* guix/ui.scm (show-manifest-transaction)[package-strings]: Rewrite to
use 'tabulate'.  Remove 'item' parameter and adjust callers.
2020-03-24 15:44:45 +01:00
Ludovic Courtès
3e5ab0a7a9
ui: 'show-manifest-transaction' tabulates upgraded package lists.
This also changes "1.0.0 → 1.0.0" to "(dependencies changed)", which is
probably less confusing.

* guix/ui.scm (tabulate): New procedure.
(show-manifest-transaction)[upgrade-string]: Rewrite to take lists of
names, versions, and outputs instead of single elements.  Use
'tabulate'.  Adjust callers accordingly.
2020-03-24 15:44:45 +01:00
Ludovic Courtès
7b322d3c4c
ui: Add 'indented-string'.
* guix/scripts/pull.scm (display-news-entry): Remove extra space in
format string for 'indented-string'.
(indented-string): Remove.
(display-new/upgraded-packages)[pretty]: Pass #:initial-indent? to
'indented-string'.
* guix/ui.scm (indented-string): New procedure.
2020-03-23 10:48:17 +01:00
Ludovic Courtès
9b771305df
ui: 'build-notifier' invokes continuation when there's nothing to do.
* guix/ui.scm (build-notifier): Call CONTINUE when there's nothing to
build or download, even when DRY-RUN? is true.
2020-03-22 12:42:52 +01:00
Ludovic Courtès
883a1765a6
ui: 'show-what-to-build' returns two values, for builds and downloads.
* guix/ui.scm (show-what-to-build): Return two values.
2020-03-22 12:42:52 +01:00
Ludovic Courtès
bec3474107
ui: 'show-what-to-build' returns true when there are grafts to build.
* guix/ui.scm (show-what-to-build): Distinguish between 'build/full' and
'build'.  Return true whe 'build/full' is non-empty, thus taking grafts
into account.
2020-03-22 12:42:52 +01:00
Ludovic Courtès
07ce23e011
ui: Add a notification build handler.
* guix/ui.scm (build-notifier): New variable.
2020-03-22 12:42:51 +01:00
Ludovic Courtès
3c1ea8dcef
ui: Restore line wrapping for 'package->recutils'.
Fixes a regression introduced when switching to Guile 3.0.0 whereby
monkey-patching 'wrap*' wouldn't have any effects due to inlining.

* guix/ui.scm (%text-width): Define in terms of the '*line-width*' fluid
when it's defined.
<top level>: Set (@@ (texinfo plain-text) wrap*) only when
'*line-width*' is undefined.
2020-03-11 18:42:08 +01:00
Ludovic Courtès
c2f9ea2b50
Revert "ui: Only display link in capable terminals."
This reverts commit d7545a6b538813e88195d084f75a3e87065c999e.

The commit led to a test failure in 'tests/guix-package-net.sh'.  It
also led to disagreements discussed here:

  https://lists.gnu.org/archive/html/guix-devel/2020-02/msg00353.html

Reverting until these are addressed.
2020-02-28 00:03:34 +01:00
Pierre Neidhardt
9b7f9e6f9b
ui: Don't truncate search output when inside Emacs.
* guix/ui.scm (display-search-results): Loop over all results when
  INSIDE_EMACS is set.
2020-02-24 11:01:52 +01:00
zimoun
d7545a6b53
ui: Only display link in capable terminals.
* guix/ui.scm (display-generation): Display generation path on new line.
* guix/scripts/describe.scm (channel-commit-hyperlink): Add TRANSFORMER argument.
(display-profile-content): Use TRANSFORMER argument to display URL explicitly
when terminal does not support hyperlinks.
2020-02-24 11:01:52 +01:00
Ludovic Courtès
fa99c4bbc7
ui: (size->number "1.M") is correctly parsed.
Reported by Pierre Neidhardt <mail@ambrevar.xyz>.

* guix/ui.scm (size->number)[unit-pos]: Add #\. to CHAR-SET:DIGIT.
* tests/ui.scm ("size->number, 1.M"): New test.
2020-02-23 12:47:13 +01:00
Ludovic Courtès
a65ffbea50
ui: Fix typo in comment.
Reported by Vincent Legoll <vincent.legoll@gmail.com>.

* guix/ui.scm (call-with-error-handling): Remove "come" in comment.
2020-02-11 17:42:10 +01:00
Ludovic Courtès
a07d5e558b
ui: Do not display error messages with bare format strings.
On Guile 3, with, say, an error in ~/.guile, we'd get:

  $ guix repl
  guix repl: error: Unbound variable: ~S

* guix/ui.scm (call-with-error-handling): Add
'&exception-with-kind-and-args' case.
2020-01-24 23:56:42 +01:00
Ludovic Courtès
abbb98714b
ui: Ignore 'raise-exception' frames when reporting exceptions.
* guix/ui.scm (last-frame-with-source): Check whether FRAME corresponds
to 'raise-exception' and skip it if it does.
2020-01-17 17:11:34 +01:00
Ludovic Courtès
47212fc763
records: Improve reporting of "invalid field specifier" errors.
Previously users would just see:

  error: invalid field specifier

without source location or hints.

* guix/records.scm (expand): Add optional 'parent-form' parameter and
pass it to 'syntax-violation' when it is true.
(make-syntactic-constructor): Pass S as a third argument to
'report-invalid-field-specifier'.
* guix/ui.scm (report-load-error): For 'syntax-error', show SUBFORM or
FORM in the message.
* tests/records.scm ("define-record-type* & wrong field specifier"): Add
a 'subform' parameter and adjust test accordingly.
("define-record-type* & wrong field specifier, identifier"): New test.
* tests/guix-system.sh: Add test.
2020-01-16 18:30:57 +01:00
Ludovic Courtès
5a2639f9cb
Avoid warnings for the 'delete' binding of (guix build utils).
On Guile 3, importing (guix build utils) leads to warnings such as:

  WARNING: (gnu packages embedded): imported module (guix build utils) overrides core binding `delete'

* gnu/packages/embedded.scm: Select 'alist-replace' from (guix build utils).
* guix/ui.scm: Hide 'delete' from (guix build utils).
2020-01-15 18:40:43 +01:00
Ludovic Courtès
09edf136ef
ui: It's 2020 now!
* guix/ui.scm (show-version-and-exit): Change year to 2020.
2020-01-02 19:42:59 +01:00
Ludovic Courtès
3f8e890d91
ui: 'with-profile-lock' keeps going upon ENOLCK.
* guix/build/syscalls.scm (call-with-file-lock/no-wait): Really pass
ARGS to HANDLER.  Return #f when HANDLER is called.
* guix/ui.scm (profile-lock-handler): Emit a mere warning upon ENOLCK.
2019-11-29 15:54:20 +01:00
Ludovic Courtès
55e1dfa4dd
ui: Factorize 'with-profile-lock'.
* guix/ui.scm (profile-lock-handler, profile-lock-file): New
procedures.
(with-profile-lock): New macro.
* guix/scripts/package.scm (process-actions): Use 'with-profile-lock'
instead of 'with-file-lock/no-wait'.
* guix/scripts/pull.scm (guix-pull): Likewise.
2019-11-29 15:54:20 +01:00
Ludovic Courtès
2d6bd5edbc
pull, describe: Emit hyperlinks for commit identifiers.
* guix/scripts/pull.scm (%vcs-web-views): New variable.
(channel-commit-hyperlink): New procedure.
(display-news-entry): Add 'channel' parameter.  When
'supports-hyperlinks?' returns true, call 'channel-commit-hyperlink'.
(display-profile-content): Likewise, and define CHANNEL.
(display-channel-specific-news): Pass CHANNEL to 'display-news-entry'.
* guix/ui.scm (hyperlink): Make public.
2019-11-28 18:43:54 +01:00
Ludovic Courtès
055f052574
ui: 'display-generation' emits a hyperlink for the generation.
* guix/ui.scm (supports-hyperlinks?): Make 'port' optional.
(display-generation): Use 'file-hyperlink' for the heading when
'supports-hyperlinks?' returns true.
2019-11-28 13:30:53 +01:00
Ludovic Courtès
fa983b8257
ui: Add 'file-hyperlink'.
* guix/ui.scm (file-hyperlink): New procedure.
(location->hyperlink): Use it.
2019-11-28 13:30:53 +01:00
Ludovic Courtès
7f3bbfaf8e
ui: Adjust SRFI-34 exception handling to Guile 2.9.5.
* guix/ui.scm (report-load-error, warn-about-load-error)
(read/eval): Match (or 'srfi-34 '%exception) instead of just 'srfi-34 to
match what Guile 2.9.5 does.
2019-11-27 00:03:03 +01:00
Ludovic Courtès
edd25a8cac
ui: Emit hyperlinks for 'license' in package search results.
* guix/ui.scm (package->recutils): When HYPERLINKS is true, call
'hyperlink' for the 'license' field.
2019-11-09 00:36:10 +01:00
Ludovic Courtès
7f0f38b54c
ui: Produce hyperlinks for the 'location' field of search results.
This affects the output of 'guix show', 'guix search', and 'guix system
search'.

* guix/ui.scm (hyperlink, supports-hyperlinks?, location->hyperlink):
New procedures.
(package->recutils): Add #:hyperlinks? and honor it.
(display-search-results): Pass #:hyperlinks? to PRINT.
* guix/scripts/system/search.scm (service-type->recutils): Add
 #:hyperlinks? and honor it.
2019-11-09 00:36:10 +01:00
Ludovic Courtès
8b4615ab54
ui: 'show-what-to-build' colorizes store file names.
* guix/ui.scm (colorize-store-file-name): New procedure.
(show-what-to-build)[colorize-store-item]: New variable.
Use it throughout.
2019-10-01 10:50:24 +02:00
Ludovic Courtès
a725504a3a
ui: Add 'current-message-language'.
* guix/ui.scm (%default-message-language): New variable.
(current-message-language): New procedure.
2019-09-23 10:38:44 +02:00
zimoun
d2cdef6560
ui: 'relevance' connects regexps with a logical and.
Fixes <https://bugs.gnu.org/36763>.
Previously, the logical and connecting the regexps did not output the expected
results (introduced in 8874faaaac665100a095ef25e39c9a389f5a397f).

* guix/ui.scm (relevance)
[score]: Change its arguments.
[regexp->score]: New procedure.
* tests/ui.scm ("package-relevance"): Add test.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2019-09-19 23:24:04 +02:00
Ludovic Courtès
723bdb8ef0
ui: 'warn-about-load-error' provides hints for unbound variables.
* guix/ui.scm (warn-about-load-error): Add 'unbound-variable' clause.
* tests/guix-build.sh: Add test.
2019-07-20 01:32:17 +02:00
Ludovic Courtès
a2a94b6e58
ui: 'warn-about-load-error' warns about file/module name mismatches.
* guix/discovery.scm (scheme-modules): Rename the inner 'file' to
'relative'.  Pass FILE as an addition argument to WARN.
* guix/ui.scm (warn-about-load-error): Add 'module' argument (actually,
what was called 'file' really contained a module name.)  Call
'check-module-matches-file' in the catch-all error case.
(check-module-matches-file): New procedure.
* tests/guix-build.sh: Test it.
2019-07-20 01:32:17 +02:00
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
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
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 f8a9f99cd602ce1dc5307cb0c21ae718ad8796bb.

* 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
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
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
Ludovic Courtès
8874faaaac
ui: 'relevance' considers regexps connected with a logical and.
* guix/ui.scm (relevance)[score]: Change to return 0 when one of REGEXPS
doesn't match.
* tests/ui.scm ("package-relevance"): New test.
2019-06-27 11:14:40 +02:00
Ludovic Courtès
1b5ee3bdaa
Add (guix diagnostics).
* guix/ui.scm (warning, info, report-error, leave)
(location->string, guix-warning-port, program-name)
(highlight-argument, %highlight-argument, define-diagnostic)
(%warning-color, %info-color, %error-color)
(print-diagnostic-prefix): Move to...
* guix/diagnostics.scm: ... here.  New file.
* Makefile.am (MODULES): Add it.
2019-06-03 23:18:47 +02:00
Chris Marusich
387e6b9e34
ui: Make package outputs searchable.
* guix/ui.scm (relevance): Allow the "field" procedure of a metric to
return a list, and handle that case appropriately.  Update docstring.
(%package-metrics): Add a metric for package outputs.
* guix/scripts/package.scm (find-packages-by-description): Update
docstring.
* tests/guix-package.sh: Add a test case to verify that package outputs are
included in search results.

Co-authored-by: Tobias Geerinckx-Rice <me@tobias.gr>
2019-05-09 00:10:34 -07:00
Ludovic Courtès
3dae43a929
ui: Highlight heading of generation lists.
* guix/ui.scm (display-generation): Highlight the "Generation" heading.
2019-04-14 23:40:52 +02:00
Ludovic Courtès
c1c5d68a94
colors: Add 'highlight'.
* guix/colors.scm (%highlight-color): New variable.
(highlight): New procedure.
* guix/ui.scm (%highlight-argument)[highlight]: Remove.
(%highlight-color): Remove.
2019-04-14 23:40:52 +02:00