On Fri, 2010-11-05 at 08:26 +0100, Tim Lauridsen wrote: > --- > 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):
ACK - I appreciate the better output from skipbroken debug so it's easier to follow. thanks -sv _______________________________________________ Yum-devel mailing list Yum-devel@lists.baseurl.org http://lists.baseurl.org/mailman/listinfo/yum-devel