[Yum-devel] [PATCH] Improve multi-file progress meter

Zdeněk Pavlas zpavlas at redhat.com
Tue Aug 7 12:51:30 UTC 2012


Updates arrive evenly to all active files, but we check their timestamps
against shared last_update_time.  When we get past that check, the 'meter'
argument to MultiFileMeter._do_update_meter() is meaningless.

This patch cycles 'meter' through all active child meter objects.
This seems to give much better output (parallel downloading is visible).
---
 urlgrabber/progress.py |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/urlgrabber/progress.py b/urlgrabber/progress.py
index 9888bef..3466e1a 100644
--- a/urlgrabber/progress.py
+++ b/urlgrabber/progress.py
@@ -493,6 +493,7 @@ class TextMultiFileMeter(MultiFileMeter):
     def __init__(self, fo=sys.stderr, threaded=True):
         self.fo = fo
         MultiFileMeter.__init__(self, threaded)
+        self.index = 0
 
     # files: ###/### ###%  data: ######/###### ###%  time: ##:##:##/##:##:##
 # New output, like TextMeter output...
@@ -527,9 +528,13 @@ class TextMultiFileMeter(MultiFileMeter):
 
             frac = self.re.fraction_read() or 0
             ave_dl = format_number(self.re.average_rate())
+
+            # cycle through active meters
+            self.index = (self.index + 1) % len(self.meters)
+            meter = self.meters[self.index]
             text = meter.text or meter.basename
             if tf > 1:
-                text = '(%u/%u): %s' % (df+1, tf, text)
+                text = '(%u/%u): %s' % (df+1+self.index, tf, text)
 
             # Include text + ui_rate in minimal
             tl = TerminalLine(8, 8+1+8)
-- 
1.7.4.4



More information about the Yum-devel mailing list