--- test/skipbroken-tests.py | 19 ++++++++++++++++++- test/testbase.py | 12 +++++++----- yum/__init__.py | 16 ++++++++++------ 3 files changed, 35 insertions(+), 12 deletions(-)
diff --git a/test/skipbroken-tests.py b/test/skipbroken-tests.py index c1d0c1f..9f09e87 100644 --- a/test/skipbroken-tests.py +++ b/test/skipbroken-tests.py @@ -598,7 +598,24 @@ class SkipBrokenTests(DepsolveTests): self.tsInfo.addUpdate(u1, oldpo=i2) self.assertEquals('empty', *self.resolveCode(skip=True)) self.assertResult([i1,i2]) - + + def testDowngrade1(self): + ''' + bar require foolib=2.0 provided by foo-1.2 + foo-1.2 is downgraded to foo-1.1 there only contains foolib=1.0 + so bar requirement is broken and the downgrade should be removed from + transaction + ''' + i1 = self.instPackage('foo', '1.2') + i1.addProvides('foolib', 'EQ', ('0', '2', '0')) + i2 = self.instPackage('bar', '1.0') + i2.addRequires('foolib', 'EQ', ('0', '2', '0')) + d1 = self.repoPackage('foo', '1.1') + d1.addProvides('foolib', 'EQ', ('0', '1', '0')) + self.tsInfo.addDowngrade(d1, oldpo=i1) + self.assertEquals('empty', *self.resolveCode(skip=True)) + self.assertResult([i1, i2]) + def testMissingfileReqIptabes(self): ''' diff --git a/test/testbase.py b/test/testbase.py index 81591ad..d0a15ad 100644 --- a/test/testbase.py +++ b/test/testbase.py @@ -131,15 +131,17 @@ class DepSolveProgressCallBack: def pkgAdded(self, pkgtup, mode): modedict = { 'i': _('installed'), - 'u': _('updated'), - 'od': _('obsoleted'), - 'o': _('obsoleting'), + 'u': _('an update'), 'e': _('erased'), - 'ud':_('update'),} + 'r': _('reinstalled'), + '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): diff --git a/yum/__init__.py b/yum/__init__.py index 234b599..11e019a 100644 --- a/yum/__init__.py +++ b/yum/__init__.py @@ -1057,7 +1057,7 @@ class YumBase(depsolve.Depsolve): # and skip-broken shouldn't care too much about speed. self.rpmdb.transactionReset() self.installedFileRequires = None # Kind of hacky - self.verbose_logger.debug(_("Skip-broken round %i"), count) + self.verbose_logger.debug("SKIPBROKEN: ########### Round %i ################" , count) self._printTransaction() depTree = self._buildDepTree() startTs = set(self.tsInfo) @@ -1114,7 +1114,7 @@ class YumBase(depsolve.Depsolve): self._checkUpdatedLeftovers() # Cleanup updated leftovers rescode, restring = self.resolveDeps() if rescode != 1: - self.verbose_logger.debug(_("Skip-broken took %i rounds "), count) + self.verbose_logger.debug("SKIPBROKEN: took %i rounds ", count) self.verbose_logger.info(_('\nPackages skipped because of dependency problems:')) skipped_list = [p for p in skipped_po] skipped_list.sort() @@ -1228,14 +1228,14 @@ class YumBase(depsolve.Depsolve): TS_AVAILABLE : "available", TS_UPDATED : "updated"} - self.verbose_logger.log(logginglevels.DEBUG_2,"TSINFO: Current Transaction : %i member(s) " % len(self.tsInfo)) + self.verbose_logger.log(logginglevels.DEBUG_2,"SKIPBROKEN: Current Transaction : %i member(s) " % len(self.tsInfo)) for txmbr in sorted(self.tsInfo): - msg = " %-11s : %s " % (state[txmbr.output_state],txmbr.po) + msg = "SKIPBROKEN: %-11s : %s " % (state[txmbr.output_state],txmbr.po) self.verbose_logger.log(logginglevels.DEBUG_2, msg) for po,rel in sorted(txmbr.relatedto): - msg = " %s : %s" % (rel,po) + msg = "SKIPBROKEN: %s : %s" % (rel,po) self.verbose_logger.log(logginglevels.DEBUG_2, msg) - + self.verbose_logger.log(logginglevels.DEBUG_2,"SKIPBROKEN:%s" % (60 * "=")) def _getPackagesToRemove(self,po,deptree,toRemove): ''' @@ -1246,6 +1246,10 @@ class YumBase(depsolve.Depsolve): for pkg in (txmbr.updates + txmbr.obsoletes): toRemove.add(pkg) self._getDepsToRemove(pkg, deptree, toRemove) + # Remove related packages + for (relative, relation) in txmbr.relatedto: + toRemove.add(relative) + self._getDepsToRemove(relative, deptree, toRemove) self._getDepsToRemove(po, deptree, toRemove) def _getDepsToRemove(self,po, deptree, toRemove): -- 1.7.3.2 _______________________________________________ Yum-devel mailing list Yum-devel@lists.baseurl.org http://lists.baseurl.org/mailman/listinfo/yum-devel