[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