[yum-commits] 4 commits - yum/drpm.py yum/__init__.py

zpavlas at osuosl.org zpavlas at osuosl.org
Wed Apr 10 10:22:18 UTC 2013


 yum/__init__.py |    6 ++--
 yum/drpm.py     |   68 +++++++++++++++++++++++++++++---------------------------
 2 files changed, 39 insertions(+), 35 deletions(-)

New commits:
commit 89f8953f699459357c8af59281cb67b622f67870
Author: Zdenek Pavlas <zpavlas at redhat.com>
Date:   Mon Apr 8 17:08:01 2013 +0200

    add a "Finishing delta rebuilds" msg and a progress meter

diff --git a/yum/drpm.py b/yum/drpm.py
index adf7db0..f9e2320 100644
--- a/yum/drpm.py
+++ b/yum/drpm.py
@@ -22,7 +22,7 @@ from yum.Errors import RepoError
 from yum.i18n import exception2msg, _
 from yum.Errors import MiscError
 from yum.misc import checksum, repo_gen_decompress, unlink_f
-from urlgrabber import grabber
+from urlgrabber import grabber, progress
 async = hasattr(grabber, 'parallel_wait')
 from xml.etree.cElementTree import iterparse
 import os, re
@@ -111,6 +111,7 @@ class DeltaInfo:
         self.adderror = adderror
         self.jobs = {}
         self._future_jobs = []
+        self.progress = None
         self.limit = ayum.conf.deltarpm
         if self.limit < 0:
             nprocs = _num_cpus_online()
@@ -240,6 +241,9 @@ class DeltaInfo:
             # so we should never see an unknown pid here.
             assert pid in self.jobs
             po = self.jobs.pop(pid)
+            if self.progress:
+                self.done += po.rpm.size
+                self.progress.update(self.done)
             if code != 0:
                 unlink_f(po.rpm.localpath)
                 self.adderror(po, _('Delta RPM rebuild failed'))
@@ -260,6 +264,18 @@ class DeltaInfo:
     def dequeue_all(self):
         """ De-Queue all delta rebuilds and spawn the rebuild processes. """
 
+        count = total = 0
+        for po in self.jobs.values() + self._future_jobs:
+            count += 1
+            total += po.rpm.size
+        if total:
+            self.verbose_logger.info(_('Finishing delta rebuilds of %d package(s) (%s)'),
+                                     count, progress.format_number(total))
+            if hasattr(progress, 'text_meter_total_size'):
+                progress.text_meter_total_size(0)
+            self.progress = po.repo.callback
+            self.progress.start(text='<locally rebuilding deltarpms>', size=total)
+            self.done = 0
         while self._future_jobs:
             self.dequeue()
 
commit feafbc27627d5757c7194e31749c0b5b570bbc39
Author: Zdenek Pavlas <zpavlas at redhat.com>
Date:   Mon Apr 8 15:44:00 2013 +0200

    don't queue args, only 'po's

diff --git a/yum/drpm.py b/yum/drpm.py
index dec4044..adf7db0 100644
--- a/yum/drpm.py
+++ b/yum/drpm.py
@@ -254,17 +254,9 @@ class DeltaInfo:
     def rebuild(self, po):
         """ Turn a drpm into an rpm, by adding it to the queue and trying to
             service the queue. """
-        args = ()
-        if po.oldrpm: args += '-r', po.oldrpm
-        args += po.localpath, po.rpm.localpath
-
-        self.queue(args, po)
+        self._future_jobs.append(po)
         self.dequeue_max()
 
-    def queue(self, args, callback):
-        """ Queue a delta rebuild up. """
-        self._future_jobs.append((args, callback))
-
     def dequeue_all(self):
         """ De-Queue all delta rebuilds and spawn the rebuild processes. """
 
@@ -297,11 +289,11 @@ class DeltaInfo:
                 return False
             self.wait((self.limit - len(self.jobs)) + 1)
 
-        args, callback = self._future_jobs.pop(0)
-        self._spawn(args, callback)
-
-        return True
+        po = self._future_jobs.pop(0)
+        args = ()
+        if po.oldrpm: args += '-r', po.oldrpm
+        args += po.localpath, po.rpm.localpath
 
-    def _spawn(self, args, callback):
         pid = os.spawnl(os.P_NOWAIT, APPLYDELTA, APPLYDELTA, *args)
-        self.jobs[pid] = callback
+        self.jobs[pid] = po
+        return True
commit cedda3232498f2f3c510ff8baf958fc565e0884c
Author: Zdenek Pavlas <zpavlas at redhat.com>
Date:   Mon Apr 8 15:34:22 2013 +0200

    queue 'po's, not callbacks

diff --git a/yum/drpm.py b/yum/drpm.py
index d3f296d..dec4044 100644
--- a/yum/drpm.py
+++ b/yum/drpm.py
@@ -239,31 +239,26 @@ class DeltaInfo:
             # urlgrabber spawns child jobs, too.  But they exit synchronously,
             # so we should never see an unknown pid here.
             assert pid in self.jobs
-            callback = self.jobs.pop(pid)
-            callback(code)
+            po = self.jobs.pop(pid)
+            if code != 0:
+                unlink_f(po.rpm.localpath)
+                self.adderror(po, _('Delta RPM rebuild failed'))
+            elif not po.rpm.verifyLocalPkg():
+                self.adderror(po, _('Checksum of the delta-rebuilt RPM failed'))
+            else:
+                os.unlink(po.localpath)
+                po.localpath = po.rpm.localpath # for --downloadonly
             num += 1
         return num
 
     def rebuild(self, po):
         """ Turn a drpm into an rpm, by adding it to the queue and trying to
             service the queue. """
-        # this runs when worker finishes
-        def callback(code):
-            if code != 0:
-                unlink_f(po.rpm.localpath)
-                self.adderror(po, _('Delta RPM rebuild failed'))
-                return
-            if not po.rpm.verifyLocalPkg():
-                self.adderror(po, _('Checksum of the delta-rebuilt RPM failed'))
-                return
-            os.unlink(po.localpath)
-            po.localpath = po.rpm.localpath # for --downloadonly
-
         args = ()
         if po.oldrpm: args += '-r', po.oldrpm
         args += po.localpath, po.rpm.localpath
 
-        self.queue(args, callback)
+        self.queue(args, po)
         self.dequeue_max()
 
     def queue(self, args, callback):
commit a07843942a591755b48b4d4e259f5ebc37fc7406
Author: Zdenek Pavlas <zpavlas at redhat.com>
Date:   Mon Apr 8 15:15:59 2013 +0200

    drop 'adderror' arg from presto.rebuild()

diff --git a/yum/__init__.py b/yum/__init__.py
index a5e21fb..d1ab41a 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -2256,13 +2256,13 @@ much more problems).
             pkgs.append(po)
 
         # download presto metadata and use drpms
-        presto = DeltaInfo(self, pkgs)
+        presto = DeltaInfo(self, pkgs, adderror)
         deltasize = rpmsize = 0
         for po in pkgs:
             if isinstance(po, DeltaPackage):
                 if verify_local(po):
                     # there's .drpm already, use it
-                    presto.rebuild(po, adderror)
+                    presto.rebuild(po)
                     continue
                 deltasize += po.size
                 rpmsize += po.rpm.size
@@ -2300,7 +2300,7 @@ much more problems).
                         urlgrabber.progress.text_meter_total_size(remote_size,
                                                                   local_size[0])
                     if isinstance(po, DeltaPackage):
-                        presto.rebuild(po, adderror)
+                        presto.rebuild(po)
                         return
                     else:
                         presto.dequeue_max()
diff --git a/yum/drpm.py b/yum/drpm.py
index 45d3a80..d3f296d 100644
--- a/yum/drpm.py
+++ b/yum/drpm.py
@@ -106,8 +106,9 @@ def _num_cpus_online(unknown=1):
     return unknown
 
 class DeltaInfo:
-    def __init__(self, ayum, pkgs):
+    def __init__(self, ayum, pkgs, adderror):
         self.verbose_logger = ayum.verbose_logger
+        self.adderror = adderror
         self.jobs = {}
         self._future_jobs = []
         self.limit = ayum.conf.deltarpm
@@ -243,17 +244,17 @@ class DeltaInfo:
             num += 1
         return num
 
-    def rebuild(self, po, adderror):
+    def rebuild(self, po):
         """ Turn a drpm into an rpm, by adding it to the queue and trying to
             service the queue. """
         # this runs when worker finishes
         def callback(code):
             if code != 0:
                 unlink_f(po.rpm.localpath)
-                adderror(po, _('Delta RPM rebuild failed'))
+                self.adderror(po, _('Delta RPM rebuild failed'))
                 return
             if not po.rpm.verifyLocalPkg():
-                adderror(po, _('Checksum of the delta-rebuilt RPM failed'))
+                self.adderror(po, _('Checksum of the delta-rebuilt RPM failed'))
                 return
             os.unlink(po.localpath)
             po.localpath = po.rpm.localpath # for --downloadonly


More information about the Yum-commits mailing list