Ticket #13: yum-3.2.24-update.patch

File yum-3.2.24-update.patch, 4.6 kB (added by bergolth, 2 years ago)

only update packages that are not going to be removed in the current transaction (yum-3.2.24)

  • yum/__init__.py

    old new  
    28482848                    self.tsInfo.addObsoleted(obsoletee, po) 
    28492849                    tx_return.append(txmbr) 
    28502850            else: 
     2851                # naive handling of packages that are already in the transaction set 
     2852                if not self.allowedMultipleInstalls(po): 
     2853                    for tsmember in self.tsInfo.matchNaevr(name = po.name): 
     2854                        self.tsInfo.remove(tsmember.pkgtup) 
     2855 
    28512856                txmbr = self.tsInfo.addInstall(po) 
    28522857                tx_return.append(txmbr) 
    28532858 
     
    29182923                obsoletes = [] 
    29192924 
    29202925            for (obsoleting, installed) in obsoletes: 
    2921                 obsoleting_pkg = self.getPackageObject(obsoleting) 
    2922                 topkg = self._test_loop(obsoleting_pkg, self._pkg2obspkg) 
    2923                 if topkg is not None: 
    2924                     obsoleting_pkg = topkg 
    2925                 installed_pkg =  self.getInstalledPackageObject(installed) 
    2926                 txmbr = self.tsInfo.addObsoleting(obsoleting_pkg, installed_pkg) 
    2927                 self.tsInfo.addObsoleted(installed_pkg, obsoleting_pkg) 
    2928                 if requiringPo: 
    2929                     txmbr.setAsDep(requiringPo) 
    2930                 tx_return.append(txmbr) 
     2926                if not self.tsInfo.getMembersWithState(installed, TS_REMOVE_STATES): 
     2927                    obsoleting_pkg = self.getPackageObject(obsoleting) 
     2928                    topkg = self._test_loop(obsoleting_pkg, self._pkg2obspkg) 
     2929                    if topkg is not None: 
     2930                        obsoleting_pkg = topkg 
     2931                    installed_pkg =  self.getInstalledPackageObject(installed) 
     2932                    txmbr = self.tsInfo.addObsoleting(obsoleting_pkg, installed_pkg) 
     2933                    self.tsInfo.addObsoleted(installed_pkg, obsoleting_pkg) 
     2934                    if requiringPo: 
     2935                        txmbr.setAsDep(requiringPo) 
     2936                    tx_return.append(txmbr) 
    29312937                 
    29322938            for (new, old) in updates: 
    29332939                if self.tsInfo.isObsoleted(pkgtup=old): 
    29342940                    self.verbose_logger.log(logginglevels.DEBUG_2, _('Not Updating Package that is already obsoleted: %s.%s %s:%s-%s'),  
    29352941                        old) 
    29362942                else: 
    2937                     tx_return.extend(self.update(po=self.getPackageObject(new))) 
     2943                    if not self.tsInfo.getMembersWithState(old, TS_REMOVE_STATES): 
     2944                        tx_return.extend(self.update(po=self.getPackageObject(new))) 
    29382945             
    29392946            return tx_return 
    29402947 
     
    30183025        # TODO: we should search the updates and obsoletes list and 
    30193026        # mark the package being updated or obsoleted away appropriately 
    30203027        # and the package relationship in the tsInfo 
    3021          
     3028 
     3029        # check if the packages to upgrade are already in the transaction set 
     3030        for installed_pkg in instpkgs: 
     3031            toerase = self.tsInfo.getMembersWithState(installed_pkg.pkgtup, TS_REMOVE_STATES) 
     3032            if toerase: 
     3033                self.tsInfo.remove(toerase[0]) 
    30223034 
    30233035        # check for obsoletes first 
    30243036        if self.conf.obsoletes: 
     
    31273139         
    31283140        tx_return = [] 
    31293141        pkgs = [] 
    3130          
     3142        tspkgs = [] 
    31313143         
    31323144        if po: 
    31333145            pkgs = [po]   
     3146            tspkgs = self.tsInfo.getMembers(po.pkgtup) 
    31343147        else: 
    31353148            if kwargs.has_key('pattern'): 
    31363149                if kwargs['pattern'][0] == '@': 
     
    31513164                        self.logger.critical(_('No Match for argument: %s') % arg) 
    31523165                    else: 
    31533166                        pkgs.extend(depmatches) 
    3154                  
     3167 
     3168                (e,m,u) = self.tsInfo.matchPackageNames([kwargs['pattern']]) 
     3169                tspkgs.extend(e) 
     3170                tspkgs.extend(m) 
    31553171            else:     
    31563172                nevra_dict = self._nevra_kwarg_parse(kwargs) 
    31573173 
     
    31633179                    if not kwargs.get('silence_warnings', False): 
    31643180                        self.logger.warning(_("No package matched to remove")) 
    31653181 
     3182                tspkgs = self.tsInfo.matchNaevr(name=nevra_dict['name'], 
     3183                           arch=nevra_dict['arch'], epoch=nevra_dict['epoch'], 
     3184                           ver=nevra_dict['version'], rel=nevra_dict['release']) 
     3185 
     3186        # naive handling of packages that are already in the transaction set 
     3187        for txmbr in tspkgs: 
     3188            self.tsInfo.remove(txmbr.pkgtup) 
     3189 
    31663190        for po in pkgs: 
    31673191            txmbr = self.tsInfo.addErase(po) 
    31683192            tx_return.append(txmbr)