From 5d10644371abd54d0edcd638691113f0a92de743 Mon Sep 17 00:00:00 2001 From: Tobias Geerinckx-Rice Date: Sun, 19 Feb 2023 01:00:00 +0100 Subject: [PATCH] git: Make better use of the better progress bar. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Commit 189525412e3d803f3f77e15ec4a62aaa57f65a2d introduced ‘high-resolution’ Unicode progress bars, but these require more granular calls to reach their full potential. * guix/git.scm (show-progress): Derive the number of PROGRESS-BAR updates from its maximum resolution, rather than hard-coding 100. --- guix/git.scm | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/guix/git.scm b/guix/git.scm index a1e6b3fa9c..4019323327 100644 --- a/guix/git.scm +++ b/guix/git.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2021 Kyle Meyer ;;; Copyright © 2021 Marius Bakke ;;; Copyright © 2022 Maxime Devos +;;; Copyright © 2023 Tobias Geerinckx-Rice ;;; ;;; This file is part of GNU Guix. ;;; @@ -141,11 +142,6 @@ the 'SSL_CERT_FILE' and 'SSL_CERT_DIR' environment variables." (define total (indexer-progress-total-objects progress)) - (define hundredth - (match (quotient total 100) - (0 1) - (x x))) - (define-values (done label) (if (< (indexer-progress-received-objects progress) total) (values (indexer-progress-received-objects progress) @@ -156,14 +152,22 @@ the 'SSL_CERT_FILE' and 'SSL_CERT_DIR' environment variables." (define % (* 100. (/ done total))) - (when (and (< % 100) (zero? (modulo done hundredth))) + ;; TODO: Both should be handled & exposed by the PROGRESS-BAR API instead. + (define width + (max (- (current-terminal-columns) + (string-length label) 7) + 3)) + + (define grain + (match (quotient total (max 100 (* 8 width))) ; assume 1/8 glyph resolution + (0 1) + (x x))) + + (when (and (< % 100) (zero? (modulo done grain))) (erase-current-line (current-error-port)) - (let ((width (max (- (current-terminal-columns) - (string-length label) 7) - 3))) - (format (current-error-port) "~a ~3,d% ~a" + (format (current-error-port) "~a ~3,d% ~a" label (inexact->exact (round %)) - (progress-bar % width))) + (progress-bar % width)) (force-output (current-error-port))) (when (= % 100.)