guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

10/10: git: Make better use of the better progress bar.


From: guix-commits
Subject: 10/10: git: Make better use of the better progress bar.
Date: Thu, 23 Feb 2023 17:54:58 -0500 (EST)

nckx pushed a commit to branch master
in repository guix.

commit 5d10644371abd54d0edcd638691113f0a92de743
Author: Tobias Geerinckx-Rice <me@tobias.gr>
AuthorDate: Sun Feb 19 01:00:00 2023 +0100

    git: Make better use of the better progress bar.
    
    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 <kyle@kyleam.com>
 ;;; Copyright © 2021 Marius Bakke <marius@gnu.org>
 ;;; Copyright © 2022 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2023 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;;
 ;;; 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.)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]