[Yum-devel] [PATCH] add 'ud' and 'od' modes to transaction members: updated and obsoleted - change the outputs a bit to correspond to this. - add depsolve cases to handle this better
Seth Vidal
skvidal at fedoraproject.org
Mon Oct 18 18:37:29 UTC 2010
---
output.py | 12 +++++++-----
test/testbase.py | 6 ++++--
yum/depsolve.py | 24 ++++++++++++++++++------
yum/transactioninfo.py | 4 ++--
4 files changed, 31 insertions(+), 15 deletions(-)
diff --git a/output.py b/output.py
index cfca45f..5e2f073 100755
--- a/output.py
+++ b/output.py
@@ -1988,15 +1988,17 @@ class DepSolveProgressCallBack:
def pkgAdded(self, pkgtup, mode):
modedict = { 'i': _('installed'),
- 'u': _('updated'),
- 'o': _('obsoleted'),
+ 'u': _('an update'),
'e': _('erased'),
'r': _('reinstalled'),
- 'd': _('downgraded')}
+ 'd': _('a downgrade'),
+ 'o': _('obsoleting'),
+ 'ud': _('updated'),
+ 'od': _('obsoleted'),}
(n, a, e, v, r) = pkgtup
modeterm = modedict[mode]
self.verbose_logger.log(logginglevels.INFO_2,
- _('---> Package %s.%s %s:%s-%s set to be %s'), n, a, e, v, r,
+ _('---> Package %s.%s %s:%s-%s will be %s'), n, a, e, v, r,
modeterm)
def start(self):
@@ -2172,7 +2174,7 @@ def _pkgname_ui(ayum, pkgname, ts_states=None):
if ts_states is None:
# Note 'd' is a placeholder for downgrade, and
# 'r' is a placeholder for reinstall. Neither exist atm.
- ts_states = ('d', 'e', 'i', 'r', 'u')
+ ts_states = ('d', 'e', 'i', 'r', 'u', 'od', 'ud')
matches = []
def _cond_add(po):
diff --git a/test/testbase.py b/test/testbase.py
index f91fbf1..e6744c1 100644
--- a/test/testbase.py
+++ b/test/testbase.py
@@ -128,8 +128,10 @@ class DepSolveProgressCallBack:
def pkgAdded(self, pkgtup, mode):
modedict = { 'i': _('installed'),
'u': _('updated'),
- 'o': _('obsoleted'),
- 'e': _('erased')}
+ 'od': _('obsoleted'),
+ 'o': _('obsoleting'),
+ 'e': _('erased'),
+ 'ud':_('update'),}
(n, a, e, v, r) = pkgtup
modeterm = modedict[mode]
self.verbose_logger.log(logginglevels.INFO_2,
diff --git a/yum/depsolve.py b/yum/depsolve.py
index 886cca8..b3d014f 100644
--- a/yum/depsolve.py
+++ b/yum/depsolve.py
@@ -376,6 +376,16 @@ class Depsolve(object):
self.verbose_logger.log(logginglevels.DEBUG_2, _('Mode for pkg providing %s: %s'),
niceformatneed, needmode)
+ if needmode in ['ud', 'od']: # the thing it needs is being updated or obsoleted away
+ # try to update the requiring package in hopes that all this problem goes away :(
+ self.verbose_logger.log(logginglevels.DEBUG_2, _('Trying to update %s to resolve dep'), requiringPo)
+ txmbrs = self.update(po=requiringPo, requiringPo=requiringPo)
+ if not txmbrs:
+ msg = self._err_missing_requires(requiringPo, requirement)
+ self.verbose_logger.log(logginglevels.DEBUG_2, _('No update paths found for %s. Failure!'), requiringPo)
+ return self._requiringFromTransaction(requiringPo, requirement, errorlist)
+ checkdeps = 1
+
if needmode in ['e']:
self.verbose_logger.log(logginglevels.DEBUG_2, _('TSINFO: %s package requiring %s marked as erase'),
requiringPo, needname)
@@ -384,11 +394,10 @@ class Depsolve(object):
checkdeps = 1
if needmode in ['i', 'u']:
- length = len(self.tsInfo)
- self.update(name=name, epoch=epoch, version=ver, release=rel,
- requiringPo=requiringPo)
+ newupdates = self.update(name=name, epoch=epoch, version=ver, release=rel,
+ requiringPo=requiringPo)
txmbrs = self.tsInfo.getMembersWithState(requiringPo.pkgtup, TS_REMOVE_STATES)
- if len(self.tsInfo) != length and txmbrs:
+ if newupdates and txmbrs:
if txmbrs[0].output_state == TS_OBSOLETED:
self.verbose_logger.log(logginglevels.DEBUG_2, _('TSINFO: Obsoleting %s with %s to resolve dep.'),
requiringPo, txmbrs[0].obsoleted_by[0])
@@ -795,8 +804,11 @@ class Depsolve(object):
dscb_ts_state = 'd'
if dscb_ts_state == 'u' and txmbr.reinstall:
dscb_ts_state = 'r'
- if dscb_ts_state == 'u' and not txmbr.updates:
- dscb_ts_state = 'i'
+ if dscb_ts_state == 'u':
+ if txmbr.output_state == TS_OBSOLETING:
+ dscb_ts_state = 'o'
+ elif not txmbr.updates:
+ dscb_ts_state = 'i'
self.dsCallback.pkgAdded(txmbr.pkgtup, dscb_ts_state)
self.verbose_logger.log(logginglevels.DEBUG_2,
_("Checking deps for %s") %(txmbr,))
diff --git a/yum/transactioninfo.py b/yum/transactioninfo.py
index f34a45e..91bcbcb 100644
--- a/yum/transactioninfo.py
+++ b/yum/transactioninfo.py
@@ -497,7 +497,7 @@ class TransactionData:
txmbr.current_state = TS_INSTALL
txmbr.output_state = TS_UPDATED
txmbr.po.state = TS_UPDATED
- txmbr.ts_state = None # FIXME: should use a real state here.
+ txmbr.ts_state = 'ud'
txmbr.relatedto.append((updating_po, 'updatedby'))
txmbr.updated_by.append(updating_po)
self.add(txmbr)
@@ -529,7 +529,7 @@ class TransactionData:
txmbr.current_state = TS_INSTALL
txmbr.output_state = TS_OBSOLETED
txmbr.po.state = TS_OBSOLETED
- txmbr.ts_state = None # FIXME: should use a real state here.
+ txmbr.ts_state = 'od'
txmbr.relatedto.append((obsoleting_po, 'obsoletedby'))
txmbr.obsoleted_by.append(obsoleting_po)
self.add(txmbr)
--
1.7.2.1
More information about the Yum-devel
mailing list