diff options
author | Ludovic Courtès <ludo@gnu.org> | 2019-03-28 16:17:11 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2019-03-28 23:06:59 +0100 |
commit | 539af7f257eea291b1e6ffbfdcaeee9fde9bffe5 (patch) | |
tree | 27664d01b9dcac4742d09a56ab668b040773aad9 | |
parent | 9f4169f6c8014206ea389e1ded88622fa6cfbe4a (diff) |
pull: Truncate the list of packages displayed on completion.
Previously, if you'd run 'guix pull' after a couple of weeks, it would
fill your screen with package names, which is unhelpful.
* guix/scripts/pull.scm (ellipsis): New procedure.
(display-new/upgraded-packages): Add #:concise?.
[list->enumeration]: New procedure.
Use it instead of 'string-join'.
(display-profile-news): Pass #:concise? #t.
-rw-r--r-- | guix/scripts/pull.scm | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/guix/scripts/pull.scm b/guix/scripts/pull.scm index e06ec2f291..2aaf1cc44a 100644 --- a/guix/scripts/pull.scm +++ b/guix/scripts/pull.scm @@ -181,6 +181,7 @@ Download and deploy the latest version of Guix.\n")) (new (profile-package-alist (generation-file-name profile current)))) (display-new/upgraded-packages old new + #:concise? #t #:heading (G_ "New in this revision:\n")))) (_ #t))) @@ -377,16 +378,33 @@ of packages upgraded in ALIST2." alist2))) (values new upgraded))) +(define* (ellipsis #:optional (port (current-output-port))) + "Return HORIZONTAL ELLIPSIS three dots if PORT's encoding cannot represent +it." + (match (port-encoding port) + ("UTF-8" "…") + (_ "..."))) + (define* (display-new/upgraded-packages alist1 alist2 - #:key (heading "")) + #:key (heading "") concise?) "Given the two package name/version alists ALIST1 and ALIST2, display the list of new and upgraded packages going from ALIST1 to ALIST2. When ALIST1 -and ALIST2 differ, display HEADING upfront." +and ALIST2 differ, display HEADING upfront. When CONCISE? is true, do not +display long package lists that would fill the user's screen." (define (pretty str column) (indented-string (fill-paragraph str (- (%text-width) 4) column) 4)) + (define list->enumeration + (if concise? + (lambda* (lst #:optional (max 12)) + (if (> (length lst) max) + (string-append (string-join (take lst max) ", ") + ", " (ellipsis)) + (string-join lst ", "))) + (cut string-join <> ", "))) + (let-values (((new upgraded) (new/upgraded-packages alist1 alist2))) (unless (and (null? new) (null? upgraded)) (display heading)) @@ -397,8 +415,7 @@ and ALIST2 differ, display HEADING upfront." (format #t (N_ " ~h new package: ~a~%" " ~h new packages: ~a~%" count) count - (pretty (string-join (sort (map first new) string<?) - ", ") + (pretty (list->enumeration (sort (map first new) string<?)) 30)))) (match (length upgraded) (0 #t) @@ -406,7 +423,7 @@ and ALIST2 differ, display HEADING upfront." (format #t (N_ " ~h package upgraded: ~a~%" " ~h packages upgraded: ~a~%" count) count - (pretty (string-join (sort upgraded string<?) ", ") + (pretty (list->enumeration (sort upgraded string<?)) 35)))))) (define (display-profile-content-diff profile gen1 gen2) |