[Yum-devel] [PATCH] Start meters immediately, and only when asked to. BZ 831904, 831291.

Zdeněk Pavlas zpavlas at redhat.com
Thu Jun 14 11:01:34 UTC 2012


URLgrabber has traditionally delayed starting of meters to first
update, and .update() && .end() need started meters.  Instead of
having to check this every time, start meters immediately.
No metering of requests with progress_obj=None.
---
 urlgrabber/grabber.py |   23 +++++++++++------------
 1 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/urlgrabber/grabber.py b/urlgrabber/grabber.py
index 799f4de..071146c 100644
--- a/urlgrabber/grabber.py
+++ b/urlgrabber/grabber.py
@@ -2047,12 +2047,7 @@ class _ExternalDownloader:
             line = line.split(' ', 5)
             _id, size = map(int, line[:2])
             if len(line) == 2:
-                opts = self.running[_id]
-                m = opts.progress_obj
-                if m:
-                    if not m.last_update_time:
-                        m.start(text = opts.text)
-                    m.update(size)
+                self.running[_id].progress_obj.update(size)
                 continue
             # job done
             opts = self.running.pop(_id)
@@ -2125,8 +2120,9 @@ def parallel_wait(meter = 'text'):
     if meter:
         count = total = 0
         for opts in _async_queue:
-            count += 1
-            total += opts.size
+            if opts.progress_obj:
+                count += 1
+                total += opts.size
         if meter == 'text':
             from progress import TextMultiFileMeter
             meter = TextMultiFileMeter()
@@ -2139,7 +2135,11 @@ def parallel_wait(meter = 'text'):
         key, limit = opts.async
         host_con[key] = host_con.get(key, 0) + 1
         opts.tries = tries
-        opts.progress_obj = meter and meter.newMeter()
+        if meter and opts.progress_obj:
+            opts.progress_obj = meter.newMeter()
+            opts.progress_obj.start(text=opts.text, basename=os.path.basename(opts.filename))
+        else:
+            opts.progress_obj = None
         if DEBUG: DEBUG.info('attempt %i/%s: %s', opts.tries, opts.retry, opts.url)
         dl.start(opts)
 
@@ -2147,9 +2147,8 @@ def parallel_wait(meter = 'text'):
         for opts, size, ug_err in dl.perform():
             key, limit = opts.async
             host_con[key] -= 1
-            if meter:
-                m = opts.progress_obj
-                m.basename = os.path.basename(opts.filename)
+            m = opts.progress_obj
+            if m:
                 if ug_err:
                     m.failure(ug_err.args[1])
                 else:
-- 
1.7.4.4



More information about the Yum-devel mailing list