[Yum-devel] [PATCH] - Make downgrade testcase - fix test DepsolveProgressCallback to handle downgrade - fix skip-broken code to handle downgrades - prefix all skipbroken debug message with 'SKIPBROKEN:' for easier filtering
tim.lauridsen at gmail.com
tim.lauridsen at gmail.com
Mon Nov 8 18:11:07 UTC 2010
On Fri, Nov 5, 2010 at 8:26 AM, Tim Lauridsen <tim.lauridsen at gmail.com>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):
> --
> 1.7.3.2
>
> Anybody, please review this :)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.baseurl.org/pipermail/yum-devel/attachments/20101108/3579e635/attachment.html>
More information about the Yum-devel
mailing list