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.
This commit is contained in:
Ludovic Courtès 2019-03-28 16:17:11 +01:00
parent 9f4169f6c8
commit 539af7f257
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
1 changed files with 22 additions and 5 deletions

View File

@ -181,6 +181,7 @@ Download and deploy the latest version of Guix.\n"))
(new (profile-package-alist (new (profile-package-alist
(generation-file-name profile current)))) (generation-file-name profile current))))
(display-new/upgraded-packages old new (display-new/upgraded-packages old new
#:concise? #t
#:heading (G_ "New in this revision:\n")))) #:heading (G_ "New in this revision:\n"))))
(_ #t))) (_ #t)))
@ -377,16 +378,33 @@ of packages upgraded in ALIST2."
alist2))) alist2)))
(values new upgraded))) (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 (define* (display-new/upgraded-packages alist1 alist2
#:key (heading "")) #:key (heading "") concise?)
"Given the two package name/version alists ALIST1 and ALIST2, display the "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 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) (define (pretty str column)
(indented-string (fill-paragraph str (- (%text-width) 4) (indented-string (fill-paragraph str (- (%text-width) 4)
column) column)
4)) 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))) (let-values (((new upgraded) (new/upgraded-packages alist1 alist2)))
(unless (and (null? new) (null? upgraded)) (unless (and (null? new) (null? upgraded))
(display heading)) (display heading))
@ -397,8 +415,7 @@ and ALIST2 differ, display HEADING upfront."
(format #t (N_ " ~h new package: ~a~%" (format #t (N_ " ~h new package: ~a~%"
" ~h new packages: ~a~%" count) " ~h new packages: ~a~%" count)
count count
(pretty (string-join (sort (map first new) string<?) (pretty (list->enumeration (sort (map first new) string<?))
", ")
30)))) 30))))
(match (length upgraded) (match (length upgraded)
(0 #t) (0 #t)
@ -406,7 +423,7 @@ and ALIST2 differ, display HEADING upfront."
(format #t (N_ " ~h package upgraded: ~a~%" (format #t (N_ " ~h package upgraded: ~a~%"
" ~h packages upgraded: ~a~%" count) " ~h packages upgraded: ~a~%" count)
count count
(pretty (string-join (sort upgraded string<?) ", ") (pretty (list->enumeration (sort upgraded string<?))
35)))))) 35))))))
(define (display-profile-content-diff profile gen1 gen2) (define (display-profile-content-diff profile gen1 gen2)