[yum-commits] Branch 'yum-3_2_X' - yum/rpmtrans.py
James Antill
james at osuosl.org
Fri Jun 17 19:37:12 UTC 2011
yum/rpmtrans.py | 49 ++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 38 insertions(+), 11 deletions(-)
New commits:
commit c3f9223c5fe3109c75cc64c6142064f7a84150d8
Author: James Antill <james at and.org>
Date: Thu Jun 16 11:43:02 2011 -0400
Turn a name into a txmbr, if we can. Helps erase filelog/scriptout and history.
diff --git a/yum/rpmtrans.py b/yum/rpmtrans.py
index 43f9634..400d729 100644
--- a/yum/rpmtrans.py
+++ b/yum/rpmtrans.py
@@ -258,7 +258,7 @@ class RPMTransaction:
# Find out txmbr based on the callback key. On erasures we dont know
# the exact txmbr but we always have a name, so return (name, txmbr)
# tuples so callers have less twists to deal with.
- def _getTxmbr(self, cbkey):
+ def _getTxmbr(self, cbkey, erase=False):
if isinstance(cbkey, TransactionMember):
return (cbkey.name, cbkey)
elif isinstance(cbkey, tuple):
@@ -268,7 +268,23 @@ class RPMTransaction:
assert len(txmbrs) == 1
return (txmbrs[0].name, txmbrs[0])
elif isinstance(cbkey, basestring):
- return (cbkey, None)
+ ret = None
+ # If we don't have a tuple, it's because this is an erase txmbr and
+ # rpm doesn't provide one in that case. So we can "cheat" and look
+ # through all our txmbrs for the name we have, and if we find a
+ # single match ... that must be it.
+ if not erase:
+ return (cbkey, None)
+ for txmbr in self.base.tsInfo.matchNaevr(name=cbkey):
+ if txmbr.output_state not in TS_REMOVE_STATES:
+ continue
+ # If we have more than one match, then we don't know which one
+ # it is ... so just give up.
+ if ret is not None:
+ return (cbkey, None)
+ ret = txmbr
+
+ return (cbkey, ret)
else:
return (None, None)
@@ -489,9 +505,6 @@ class RPMTransaction:
if self.trans_running:
self.display.filelog(txmbr.po, txmbr.output_state)
self._scriptout(txmbr.po)
- # NOTE: We only do this for install, not erase atm.
- # because we don't get pkgtup data for erase (this
- # includes "Updated" pkgs).
pid = self.base.history.pkg2pid(txmbr.po)
state = self.base.history.txmbr2state(txmbr)
self.base.history.trans_data_pid_end(pid, state)
@@ -517,21 +530,35 @@ class RPMTransaction:
pass
def _unInstStop(self, bytes, total, h):
- name, txmbr = self._getTxmbr(h)
+ name, txmbr = self._getTxmbr(h, erase=True)
self.total_removed += 1
self.complete_actions += 1
if name not in self.installed_pkg_names:
- self.display.filelog(name, TS_ERASE)
+ if txmbr is not None:
+ self.display.filelog(txmbr.po, TS_ERASE)
+ else:
+ self.display.filelog(name, TS_ERASE)
action = TS_ERASE
else:
action = TS_UPDATED
-
+
+ # FIXME: Do we want to pass txmbr.po here too?
self.display.event(name, action, 100, 100, self.complete_actions,
self.total_actions)
- self._scriptout(name)
if self.test: return # and we're done
- self.ts_done(name, action)
+
+ if txmbr is not None:
+ self._scriptout(txmbr.po)
+
+ pid = self.base.history.pkg2pid(txmbr.po)
+ state = self.base.history.txmbr2state(txmbr)
+ self.base.history.trans_data_pid_end(pid, state)
+ self.ts_done(txmbr.po, txmbr.output_state)
+ else:
+ self._scriptout(name)
+
+ self.ts_done(name, action)
def _rePackageStart(self, bytes, total, h):
@@ -567,7 +594,7 @@ class RPMTransaction:
# "total" carries fatal/non-fatal status
scriptlet_name = rpm.tagnames.get(bytes, "<unknown>")
- name, txmbr = self._getTxmbr(h)
+ name, txmbr = self._getTxmbr(h, erase=True)
if txmbr is None:
package_name = name
else:
More information about the Yum-commits
mailing list