[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