Ticket #176: repoclosure-obsoletes.diff

File repoclosure-obsoletes.diff, 2.1 kB (added by mschwendt, 3 years ago)

diff against yum-utils 1.1.22

  • repoclosure

    old new  
    2929from yum.misc import getCacheDir 
    3030from optparse import OptionParser 
    3131import rpmUtils.arch 
     32import rpmUtils.updates 
    3233from yum.constants import * 
    3334from yum.packageSack import ListPackageSack 
    3435 
     
    119120 
    120121        mypkgSack = ListPackageSack(pkgs) 
    121122        pkgtuplist = mypkgSack.simplePkgList() 
     123 
     124        self.up = rpmUtils.updates.Updates([],pkgtuplist) 
     125        self.up.rawobsoletes = mypkgSack.returnObsoletes() 
    122126         
    123127        if self.builddeps: 
    124128            pkgs = filter(lambda x: x.arch == 'src', pkgs) 
     
    127131            pkgs = filter(lambda x: x.name == self.pkgonly[0], pkgs) 
    128132 
    129133        for pkg in pkgs: 
     134            if newest: 
     135                thispkgobsdict = self.up.checkForObsolete([pkg.pkgtup]) 
     136                if thispkgobsdict.has_key(pkg.pkgtup): 
     137                    continue 
     138             
    130139            for (req, flags, (reqe, reqv, reqr)) in pkg.returnPrco('requires'): 
    131140                if req.startswith('rpmlib'): continue # ignore rpmlib deps 
    132141             
     
    147156                if newest: 
    148157                    resolved_by_newest = False 
    149158                    for po in resolve_sack:# look through and make sure all our answers are newest-only 
     159                        # 2nd stage handling of obsoletes. If provider is 
     160                        # obsolete, check that a pkg which obsoletes it, 
     161                        # is a provider and newest. 
     162                        thispkgobsdict = self.up.checkForObsolete([po.pkgtup]) 
     163                        if thispkgobsdict.has_key(po.pkgtup): 
     164                            for pkgtup in thispkgobsdict[po.pkgtup]: 
     165                                if pkgtup in pkgtuplist and pkgtup in resolve_sack.simplePkgList(): 
     166                                    resolved_by_newest = True 
     167                                    break 
     168                            continue  # Obsoletes without Provides 
     169 
    150170                        if po.pkgtup in pkgtuplist: 
    151171                            resolved_by_newest = True 
    152172                            break