On Sat, 2011-03-05 at 14:03 +0100, Tim Lauridsen wrote:
> ---
>  test/skipbroken-tests.py |   62 
> ++++++++++++++++++++++++++++++++++++++++++++++
>  yum/depsolve.py          |    5 ++-
>  2 files changed, 65 insertions(+), 2 deletions(-)
> 
> diff --git a/test/skipbroken-tests.py b/test/skipbroken-tests.py
> index 31482bc..36a4a6d 100644
> --- a/test/skipbroken-tests.py
> +++ b/test/skipbroken-tests.py
> @@ -1,8 +1,11 @@
>  import unittest
>  import logging
>  import sys
> +import re
>  from testbase import *
>  
> +REGEX_PKG = re.compile(r"(\d*):?(.*)-(.*)-(.*)\.(.*)$")
> +
>  class SkipBrokenTests(DepsolveTests):
>      ''' Test cases to test skip-broken'''
>      
> @@ -20,6 +23,36 @@ class SkipBrokenTests(DepsolveTests):
>          po = FakePackage(name, version, release, epoch, arch, repo=self.repo)
>          self.rpmdb.addPackage(po)
>          return po
> +
> +    def _pkgstr_to_nevra(self, pkg_str):
> +        '''
> +        Get a nevra from from a epoch:name-version-release.arch string
> +        @param pkg_str: package string
> +        '''
> +        res = REGEX_PKG.search(pkg_str)
> +        if res:
> +            (e,n,v,r,a) = res.groups()
> +            if e == "": 
> +                e = "0"
> +            return (n,e,v,r,a)   
> +        else: 
> +            raise AttributeError("Illegal package string : %s" % pkg_str)
> +
> +    def repoString(self, pkg_str):
> +        ''' 
> +        Add an available package from a epoch:name-version-release.arch 
> string
> +        '''
> +        (n,e,v,r,a) = self._pkgstr_to_nevra(pkg_str)
> +        return self.repoPackage(n,v,r,e,a)   
> +                
> +            
> +    def instString(self, pkg_str):
> +        ''' 
> +        Add an installed package from a epoch:name-version-release.arch 
> string
> +        '''
> +        (n,e,v,r,a) = self._pkgstr_to_nevra(pkg_str)
> +        return self.instPackage(n,v,r,e,a)   
> +
>             
>      def testMissingReqNoSkip(self):
>          ''' install fails,  because of missing req.
> @@ -671,6 +704,35 @@ class SkipBrokenTests(DepsolveTests):
>          # uncomment this line and the test will fail and you can see the 
> output
>          # self.assertResult([i1])
>          
> +    def test_conflict_looping(self):
> +        ''' 
> +        Skip-broken is looping
> +        https://bugzilla.redhat.com/show_bug.cgi?id=681806
> +        '''
> +        members = [] # the result after the transaction
> +        # Installed package conflicts with u1
> +        i0 = self.instString('kde-l10n-4.6.0-3.fc15.1.noarch')
> +        i0.addConflicts('kdepim', 'GT', ('6', '4.5.9', '0'))
> +        members.append(i0)
> +        i1 = self.instString('6:kdepim-4.5.94.1-1.fc14.x86_64')
> +        u1 = self.repoString('7:kdepim-4.4.10-1.fc15.x86_64')
> +        self.tsInfo.addUpdate(u1, oldpo=i1)
> +        # u1 should be removed, because of the conflict
> +        members.append(i1)
> +        i2 = self.instString('6:kdepim-libs-4.5.94.1-1.fc14.x86_64')
> +        u2 = self.repoString('7:kdepim-libs-4.4.10-1.fc15.x86_64')
> +        self.tsInfo.addUpdate(u2, oldpo=i2)
> +        members.append(u2)
> +        i3 = self.instString('kdepim-runtime-libs-4.5.94.1-2.fc14.x86_64')
> +        u3 = self.repoString('1:kdepim-runtime-libs-4.4.10-2.fc15.x86_64')
> +        self.tsInfo.addUpdate(u3, oldpo=i3)
> +        members.append(u3)
> +        i4 = self.instString('kdepim-runtime-4.5.94.1-2.fc14.x86_64')
> +        u4 = self.repoString('1:kdepim-runtime-4.4.10-2.fc15.x86_64')
> +        self.tsInfo.addUpdate(u4, oldpo=i4)
> +        members.append(u4)
> +        self.assertEquals('ok', *self.resolveCode(skip=True))
> +        self.assertResult(members)
>      
>      
>      def resolveCode(self,skip = False):
> diff --git a/yum/depsolve.py b/yum/depsolve.py
> index 8f18ccc..388811d 100644
> --- a/yum/depsolve.py
> +++ b/yum/depsolve.py
> @@ -680,11 +680,12 @@ class Depsolve(object):
>          if len(self.tsInfo) != length and txmbrs:
>              return CheckDeps, errormsgs
>  
> -        msg = '%s conflicts with %s' % (name, conflicting_po.name)
> +        msg = '%s conflicts with %s' % (name, str(conflicting_po))
>          errormsgs.append(msg)
>          self.verbose_logger.log(logginglevels.DEBUG_1, msg)
>          CheckDeps = False
> -        self.po_with_problems.add((po,None,errormsgs[-1]))
> +        # report the conflicting po, so skip-broken can remove it
> +        self.po_with_problems.add((po,conflicting_po,errormsgs[-1]))
>          return CheckDeps, errormsgs
>  
>      def _undoDepInstalls(self):


ACK

-sv


_______________________________________________
Yum-devel mailing list
[email protected]
http://lists.baseurl.org/mailman/listinfo/yum-devel

Reply via email to