[yum-commits] output.py yum/__init__.py yum/repos.py yum/yumRepo.py

zpavlas at osuosl.org zpavlas at osuosl.org
Wed Aug 22 09:30:29 UTC 2012


 output.py       |   12 ++++++++++--
 yum/__init__.py |    3 ++-
 yum/repos.py    |    4 ++--
 yum/yumRepo.py  |    7 +++++--
 4 files changed, 19 insertions(+), 7 deletions(-)

New commits:
commit b8844bd2bf640e792f4e5887ccd1f9325d3da368
Author: Zdeněk Pavlas <zpavlas at redhat.com>
Date:   Mon Aug 20 16:25:49 2012 +0200

    Use TextMultiFileMeter as multi_obj
    
    Extend the progress callback API, so we can set multi_objs in urlgrabber.
    Subclass the TextMultiFileMeter and use it as multi-file progress object.

diff --git a/output.py b/output.py
index d29eba8..caac21a 100755
--- a/output.py
+++ b/output.py
@@ -29,7 +29,7 @@ import re # For YumTerm
 
 from weakref import proxy as weakref
 
-from urlgrabber.progress import TextMeter
+from urlgrabber.progress import TextMeter, TextMultiFileMeter
 import urlgrabber.progress
 from urlgrabber.grabber import URLGrabError
 from yum.misc import prco_tuple_to_string
@@ -88,6 +88,11 @@ class YumTextMeter(TextMeter):
         checkSignals()
         TextMeter.update(self, amount_read, now)
 
+class YumTextMultiFileMeter(TextMultiFileMeter):
+    def update_meter(self, meter, now):
+        checkSignals()
+        TextMultiFileMeter.update_meter(self, meter, now)
+
 class YumTerm:
     """A class to provide some terminal "UI" helpers based on curses."""
 
@@ -1697,9 +1702,11 @@ Transaction Summary
         # One of these is a download
         if self.conf.debuglevel < 2 or not sys.stdout.isatty():
             progressbar = None
+            multi_progressbar = None
             callback = None
         else:
             progressbar = YumTextMeter(fo=sys.stdout)
+            multi_progressbar = YumTextMultiFileMeter(fo=sys.stdout)
             callback = CacheProgressCallback()
 
         # setup our failure report for failover
@@ -1710,13 +1717,14 @@ Transaction Summary
         interrupt_callback = self.interrupt_callback
         if hasattr(self, 'prerepoconf'):
             self.prerepoconf.progressbar = progressbar
+            self.prerepoconf.multi_progressbar = multi_progressbar
             self.prerepoconf.callback = callback
             self.prerepoconf.failure_callback = failure_callback
             self.prerepoconf.interrupt_callback = interrupt_callback
         else:
             #  Just in case some API user decides to do self.repos before
             # calling us.
-            self.repos.setProgressBar(progressbar)
+            self.repos.setProgressBar(progressbar, multi_progressbar)
             self.repos.callback = callback
             self.repos.setFailureCallback(failure_callback)
             self.repos.setInterruptCallback(interrupt_callback)
diff --git a/yum/__init__.py b/yum/__init__.py
index 1108443..76473ec 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -684,7 +684,8 @@ class YumBase(depsolve.Depsolve):
             prerepoconf = self.prerepoconf
             del self.prerepoconf
 
-            self.repos.setProgressBar(prerepoconf.progressbar)
+            self.repos.setProgressBar(prerepoconf.progressbar,
+                                      prerepoconf.multi_progressbar)
             self.repos.callback = prerepoconf.callback
             self.repos.setFailureCallback(prerepoconf.failure_callback)
             self.repos.setInterruptCallback(prerepoconf.interrupt_callback)
diff --git a/yum/repos.py b/yum/repos.py
index 97fa71e..6d4c20e 100644
--- a/yum/repos.py
+++ b/yum/repos.py
@@ -271,11 +271,11 @@ class RepoStorage:
                 repo.basecachedir = cachedir
 
 
-    def setProgressBar(self, obj):
+    def setProgressBar(self, obj, multi_obj=None):
         """sets the progress bar for downloading files from repos"""
         
         for repo in self.repos.values():
-            repo.setCallback(obj)
+            repo.setCallback(obj, multi_obj)
 
     def setFailureCallback(self, obj):
         """sets the failure callback for all repos"""
diff --git a/yum/yumRepo.py b/yum/yumRepo.py
index 9ca7ae5..b7b4357 100644
--- a/yum/yumRepo.py
+++ b/yum/yumRepo.py
@@ -317,6 +317,7 @@ class YumRepository(Repository, config.RepoConf):
 
         # callbacks
         self.callback = None  # for the grabber
+        self.multi_callback = None
         self.failure_obj = None
         self.mirror_failure_obj = None
         self.interrupt_callback = None
@@ -432,7 +433,7 @@ class YumRepository(Repository, config.RepoConf):
                         'basecachedir', 'http_headers', 'metadata_cookie',
                         'metadata_cookie_fn', 'quick_enable_disable',
                         'repoMDFile', 'timestamp_check', 'urls', 'mirrorurls',
-                        'yumvar', 'repofile')
+                        'yumvar', 'repofile', 'multi_callback')
         for attr in dir(self):
             if attr.startswith('_'):
                 continue
@@ -530,6 +531,7 @@ class YumRepository(Repository, config.RepoConf):
 
         ugopts = self._default_grabopts()
         self._grabfunc = URLGrabber(progress_obj=self.callback,
+                                    multi_progress_obj=self.multi_callback,
                                     failure_callback=self.failure_obj,
                                     interrupt_callback=self.interrupt_callback,
                                     copy_local=self.copy_local,
@@ -1742,8 +1744,9 @@ Insufficient space in download directory %s
             return fn
         return self._retrieveMD('group', retrieve_can_fail=True)
 
-    def setCallback(self, callback):
+    def setCallback(self, callback, multi_callback=None):
         self.callback = callback
+        self.multi_callback = multi_callback
         self._callbacks_changed = True
 
     def setFailureObj(self, failure_obj):


More information about the Yum-commits mailing list