Message ID | 87im1cnnjb.fsf_-_@gmail.com |
---|---|
State | Accepted |
Headers | show |
Series | [bug#30053,1/3] Improve appearance of tabular output. | expand |
Hi Maxim, Maxim Cournoyer <maxim.cournoyer@gmail.com> writes: > [...] > --- > Sample count: 567 > Total time: 20.913633405 seconds (12.747006885 seconds in GC) > > Without the change 'guix package -A' runs in about 2 seconds. With the > change it runs in about 12 seconds here. I cannot replicate this. Without the patch on master (7e0da2f): --8<---------------cut here---------------start------------->8--- $ time ./pre-inst-env guix package -A > /dev/null real 0m5.473s user 0m6.698s sys 0m0.094s --8<---------------cut here---------------end--------------->8--- And with the patch: --8<---------------cut here---------------start------------->8--- $ time ./pre-inst-env guix package -A > /dev/null real 0m5.778s user 0m6.862s sys 0m0.061s --8<---------------cut here---------------end--------------->8--- Perhaps there's something else going on there? I'm on x86-64, if that's useful. > Danny's suggestion to use 'guix package -A | columns -t' works too, but > it's not convenient nor discoverable. Definitely agree, though in my opinion neither that nor this *really* make `guix package --list-installed` pretty. I'm sure I could put together an alias but it goes a long way toward making Guix look polished to have it built-in. > > Any opinions? Otherwise I might throw a coin, as I'm 50/50 on this. > > > > > > Thanks, > > Maxim -- Sarah
Hello, Sarah Morgensen <iskarian@mgsn.dev> writes: > Hi Maxim, > > Maxim Cournoyer <maxim.cournoyer@gmail.com> writes: > >> [...] >> --- >> Sample count: 567 >> Total time: 20.913633405 seconds (12.747006885 seconds in GC) >> >> Without the change 'guix package -A' runs in about 2 seconds. With the >> change it runs in about 12 seconds here. > > I cannot replicate this. Without the patch on master (7e0da2f): > > $ time ./pre-inst-env guix package -A > /dev/null > > real 0m5.473s > user 0m6.698s > sys 0m0.094s > > > And with the patch: > > $ time ./pre-inst-env guix package -A > /dev/null > > real 0m5.778s > user 0m6.862s > sys 0m0.061s I tested on a different machine after tweakwing the code slightly today, and the results were not as bad as those I reported earlier. Buffering the output helped a lot. > Perhaps there's something else going on there? I'm on x86-64, if that's > useful. > >> Danny's suggestion to use 'guix package -A | columns -t' works too, but >> it's not convenient nor discoverable. > > Definitely agree, though in my opinion neither that nor this *really* > make `guix package --list-installed` pretty. I'm sure I could put > together an alias but it goes a long way toward making Guix look > polished to have it built-in. Thanks for sharing your opinion! I ended up pushing it to the repo a bit earlier today; after I found it was running acceptably fast and set an upper limit to the maximum column width so that the output would remain compact enough. You should have it available to try on your next 'guix pull', if you haven't already :-). Thanks, Maxim
From 43a99413e4a59ed32887b8b0552353637f2b7304 Mon Sep 17 00:00:00 2001 From: Steve Sprang <scs@stevesprang.com> Date: Tue, 9 Jan 2018 14:20:12 -0800 Subject: [PATCH 3/4] ui: Improve output appearance when listing generations. * guix/ui.scm (display-profile-content-diff): Use pretty-print-table to format output. (display-profile-content): Likewise. --- guix/ui.scm | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/guix/ui.scm b/guix/ui.scm index 26a437e904..1428c254b3 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -16,6 +16,7 @@ ;;; Copyright © 2019, 2021 Simon Tournier <zimon.toutoune@gmail.com> ;;; Copyright © 2020 Arun Isaac <arunisaac@systemreboot.net> ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com> +;;; Copyright © 2018 Steve Sprang <scs@stevesprang.com> ;;; ;;; This file is part of GNU Guix. ;;; @@ -1889,10 +1890,10 @@ DURATION-RELATION with the current time." (define (equal-entry? first second) (string= (manifest-entry-item first) (manifest-entry-item second))) - (define (display-entry entry prefix) + (define (make-row entry prefix) (match entry (($ <manifest-entry> name version output location _) - (format #t " ~a ~a\t~a\t~a\t~a~%" prefix name version output location)))) + (list (format #f " ~a ~a" prefix name) version output location)))) (define (list-entries number) (manifest-entries (profile-manifest (generation-file-name profile number)))) @@ -1903,8 +1904,8 @@ DURATION-RELATION with the current time." equal-entry? (list-entries new) (list-entries old))) (removed (lset-difference equal-entry? (list-entries old) (list-entries new)))) - (for-each (cut display-entry <> "+") added) - (for-each (cut display-entry <> "-") removed) + (pretty-print-table (append (map (cut make-row <> "+") added) + (map (cut make-row <> "-") removed))) (newline))) (display-diff profile gen1 gen2)) @@ -1932,15 +1933,17 @@ already taken." (define (display-profile-content profile number) "Display the packages in PROFILE, generation NUMBER, in a human-readable way." - (for-each (match-lambda - (($ <manifest-entry> name version output location _) - (format #t " ~a\t~a\t~a\t~a~%" - name version output location))) - - ;; Show most recently installed packages last. - (reverse - (manifest-entries - (profile-manifest (generation-file-name profile number)))))) + + (define entry->row + (match-lambda + (($ <manifest-entry> name version output location _) + (list (string-append " " name) version output location)))) + + (let* ((manifest (profile-manifest (generation-file-name profile number))) + (entries (manifest-entries manifest)) + (rows (map entry->row entries))) + ;; Show most recently installed packages last. + (pretty-print-table (reverse rows)))) (define (display-generation-change previous current) (format #t (G_ "switched from generation ~a to ~a~%") previous current)) -- 2.32.0