---
output.py | 39 ++++++++++++++++++++++++++++++---------
yum/__init__.py | 20 ++++++++++++++++++--
yum/rpmtrans.py | 24 +++++++++++++++++++++---
3 files changed, 69 insertions(+), 14 deletions(-)
diff --git a/output.py b/output.py
index bc115ca..74fad36 100755
--- a/output.py
+++ b/output.py
@@ -2977,14 +2977,7 @@ class YumCliRPMCallBack(RPMBaseCallback):
"""
process = self.action[action]
- if not hasattr(self, '_max_action_wid'):
- wid1 = 0
- for val in self.action.values():
- wid_val = utf8_width(val)
- if wid1 < wid_val:
- wid1 = wid_val
- self._max_action_wid = wid1
- wid1 = self._max_action_wid
+ wid1 = self._max_action_width()
if type(package) not in types.StringTypes:
pkgname = str(package)
@@ -2996,7 +2989,22 @@ class YumCliRPMCallBack(RPMBaseCallback):
percent = 0
else:
percent = (te_current*100L)/te_total
-
+ self._out_event(te_current, te_total, ts_current, ts_total,
+ percent, process, pkgname, wid1)
+
+ def _max_action_width(self):
+ if not hasattr(self, '_max_action_wid_cache'):
+ wid1 = 0
+ for val in self.action.values():
+ wid_val = utf8_width(val)
+ if wid1 < wid_val:
+ wid1 = wid_val
+ self._max_action_wid_cache = wid1
+ wid1 = self._max_action_wid_cache
+ return wid1
+
+ def _out_event(self, te_current, te_total, ts_current, ts_total,
+ percent, process, pkgname, wid1):
if self.output and (sys.stdout.isatty() or te_current == te_total):
(fmt, wid1, wid2) = self._makefmt(percent, ts_current, ts_total,
progress=sys.stdout.isatty(),
@@ -3068,6 +3076,19 @@ class YumCliRPMCallBack(RPMBaseCallback):
wid2 = pnl
return fmt, wid1, wid2
+ def verify_txmbr(self, base, txmbr, count):
+ " Callback for post transaction when we are in verifyTransaction(). "
+ te_current = count
+ te_total = len(base.tsInfo)
+ # self.event(txmbr.name, count, len(base.tsInfo), count, )
+
+ percent = 100 # (te_current*100L)/te_total
+ process = _('Verifying')
+ pkgname = str(txmbr.po)
+ wid1 = max(utf8_width(process), self._max_action_width())
+ self._out_event(100, 100, te_current, te_total,
+ percent, process, pkgname, wid1)
+
def progressbar(current, total, name=None):
"""Output the current status to the terminal using a simple
diff --git a/yum/__init__.py b/yum/__init__.py
index eccc6b7..5c7e511 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -1667,10 +1667,13 @@ class YumBase(depsolve.Depsolve):
self.plugins.run('posttrans')
# sync up what just happened versus what is in the rpmdb
if not self.ts.isTsFlagSet(rpm.RPMTRANS_FLAG_TEST):
- self.verifyTransaction(resultobject)
+ vTcb = None
+ if hasattr(cb, 'verify_txmbr'):
+ vTcb = cb.verify_txmbr
+ self.verifyTransaction(resultobject, vTcb)
return resultobject
- def verifyTransaction(self, resultobject=None):
+ def verifyTransaction(self, resultobject=None, txmbr_cb=None):
"""Check that the transaction did what was expected, and
propagate external yumdb information. Output error messages
if the transaction did not do what was expected.
@@ -1678,6 +1681,7 @@ class YumBase(depsolve.Depsolve):
:param resultobject: the :class:`yum.misc.GenericHolder`
object returned from the :func:`runTransaction` call that
ran the transaction
+ :param txmbr_cb: the callback for the rpm transaction members
"""
# check to see that the rpmdb and the tsInfo roughly matches
# push package object metadata outside of rpmdb into yumdb
@@ -1689,9 +1693,16 @@ class YumBase(depsolve.Depsolve):
# that there is not also an install of this pkg in the tsInfo
(reinstall)
# for any kind of install add from_repo to the yumdb, and the cmdline
# and the install reason
+
+ def _call_txmbr_cb(txmbr, count):
+ if txmbr_cb is not None:
+ count += 1
+ txmbr_cb(txmbr, count)
+ return count
vt_st = time.time()
self.plugins.run('preverifytrans')
+ count = 0
for txmbr in self.tsInfo:
if txmbr.output_state in TS_INSTALL_STATES:
if not self.rpmdb.contains(po=txmbr.po):
@@ -1701,7 +1712,9 @@ class YumBase(depsolve.Depsolve):
' but is not!' % txmbr.po))
# Note: Get Panu to do te.Failed() so we don't have to
txmbr.output_state = TS_FAILED
+ count = _call_txmbr_cb(txmbr, count)
continue
+ count = _call_txmbr_cb(txmbr, count)
po = self.getInstalledPackageObject(txmbr.pkgtup)
rpo = txmbr.po
po.yumdb_info.from_repo = rpo.repoid
@@ -1770,10 +1783,13 @@ class YumBase(depsolve.Depsolve):
' but is not!' % txmbr.po))
# Note: Get Panu to do te.Failed() so we don't have to
txmbr.output_state = TS_FAILED
+ count = _call_txmbr_cb(txmbr, count)
continue
+ count = _call_txmbr_cb(txmbr, count)
yumdb_item = self.rpmdb.yumdb.get_package(po=txmbr.po)
yumdb_item.clean()
else:
+ count = _call_txmbr_cb(txmbr, count)
self.verbose_logger.log(logginglevels.DEBUG_2, 'What is this?
%s' % txmbr.po)
self.plugins.run('postverifytrans')
diff --git a/yum/rpmtrans.py b/yum/rpmtrans.py
index 9b265f9..24a1f9e 100644
--- a/yum/rpmtrans.py
+++ b/yum/rpmtrans.py
@@ -119,7 +119,11 @@ class RPMBaseCallback:
else:
msg = '%s: %s' % (package, action)
self.logger.info(msg)
-
+
+ def verify_txmbr(self, base, txmbr, count):
+ " Callback for post transaction when we are in verifyTransaction(). "
+ pass
+
class SimpleCliCallBack(RPMBaseCallback):
def __init__(self):
@@ -140,6 +144,10 @@ class SimpleCliCallBack(RPMBaseCallback):
if msgs:
print msgs,
+ def verify_txmbr(self, base, txmbr, count):
+ " Callback for post transaction when we are in verifyTransaction(). "
+ print _("Verify: %u/%u: %s") % (count, len(base.tsInfo), txmbr)
+
# This is ugly, but atm. rpm can go insane and run the "cleanup" phase
# without the "install" phase if it gets an exception in it's callback. The
# following means that we don't really need to know/care about that in the
@@ -157,8 +165,12 @@ class _WrapNoExceptions:
def newFunc(*args, **kwargs):
try:
func(*args, **kwargs)
- except:
- pass
+ except Exception, e:
+ # It's impossible to debug stuff without this:
+ try:
+ print "Error:", "display callback failed:", e
+ except:
+ pass
newFunc.__name__ = func.__name__
newFunc.__doc__ = func.__doc__
@@ -621,3 +633,9 @@ class RPMTransaction:
self.display.errorlog(msg)
# FIXME - what else should we do here? raise a failure and abort?
+ def verify_txmbr(self, txmbr, count):
+ " Callback for post transaction when we are in verifyTransaction(). "
+ if not hasattr(self.display, 'verify_txmbr'):
+ return
+
+ self.display.verify_txmbr(self.base, txmbr, count)
--
1.7.6.4
_______________________________________________
Yum-devel mailing list
[email protected]
http://lists.baseurl.org/mailman/listinfo/yum-devel