[yum-cvs] yum/__init__.py

Seth Vidal skvidal at linux.duke.edu
Mon Dec 17 22:42:16 UTC 2007


 yum/__init__.py |   42 ++++++++++++++++++++++++++++++++++++------
 1 file changed, 36 insertions(+), 6 deletions(-)

New commits:
commit ef2a00922a4cecc402b7c676aa3cf01f803be18b
Author: Seth Vidal <skvidal at fedoraproject.org>
Date:   Mon Dec 17 17:20:23 2007 -0500

    - add support for install by dep and remove by dep to pattern kwarg
      on install() and remove() - this lets us remove one more item from
      the checks and handling in cli.installPkgs() and cli.erasePkgs()

diff --git a/yum/__init__.py b/yum/__init__.py
index 3265211..d3cddf0 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -1953,7 +1953,22 @@ class YumBase(depsolve.Depsolve):
                     parsePackages(self.pkgSack.returnPackages(),[kwargs['pattern']] , casematch=1)
                 pkgs.extend(exactmatch)
                 pkgs.extend(matched)
+                # if we have anything left unmatched, let's take a look for it
+                # being a dep like glibc.so.2 or /foo/bar/baz
+                
+                if len(unmatched) > 0:
+                    arg = unmatched[0] #only one in there
+                    self.verbose_logger.debug('Checking for virtual provide or file-provide for %s', 
+                        arg)
 
+                    try:
+                        mypkgs = self.returnPackagesByDep(arg)
+                    except yum.Errors.YumBaseError, e:
+                        self.logger.critical(_('No Match for argument: %s') % arg)
+                    else:
+                        if mypkgs:
+                            pkgs.extend(self.bestPackagesFromList(mypkgs))
+                        
             else:
                 nevra_dict = self._nevra_kwarg_parse(kwargs)
 
@@ -1990,10 +2005,11 @@ class YumBase(depsolve.Depsolve):
         tx_return = []
         for po in pkgs:
             if self.tsInfo.exists(pkgtup=po.pkgtup):
-                self.verbose_logger.log(logginglevels.DEBUG_1,
-                    'Package: %s  - already in transaction set', po)
-                tx_return.extend(self.tsInfo.getMembers(pkgtup=po.pkgtup))
-                continue
+                if self.tsInfo.getMembersWithState(po.pkgtup, TS_INSTALL_STATES):
+                    self.verbose_logger.log(logginglevels.DEBUG_1,
+                        'Package: %s  - already in transaction set', po)
+                    tx_return.extend(self.tsInfo.getMembers(pkgtup=po.pkgtup))
+                    continue
             
             # make sure this shouldn't be passed to update:
             if self.up.updating_dict.has_key(po.pkgtup):
@@ -2003,8 +2019,9 @@ class YumBase(depsolve.Depsolve):
             
             # make sure it's not already installed
             if self.rpmdb.contains(po=po):
-                self.logger.warning('Package %s already installed and latest version', po)
-                continue
+                if not self.tsInfo.getMembersWithState(po.pkgtup, TS_REMOVE_STATES):
+                    self.logger.warning('Package %s already installed and latest version', po)
+                    continue
 
             
             # make sure we're not installing a package which is obsoleted by something
@@ -2165,6 +2182,19 @@ class YumBase(depsolve.Depsolve):
                 (e,m,u) = self.rpmdb.matchPackageNames([kwargs['pattern']])
                 pkgs.extend(e)
                 pkgs.extend(m)
+                if u:
+                    arg = u[0]
+                    try:
+                        depmatches = self.returnInstalledPackagesByDep(arg)
+                    except yum.Errors.YumBaseError, e:
+                        self.logger.critical(_('%s') % e)
+                        continue
+                    
+                    if not depmatches:
+                        self.logger.critical(_('No Match for argument: %s') % arg)
+                    else:
+                        pkgs.extend(depmatches)
+                
             else:    
                 nevra_dict = self._nevra_kwarg_parse(kwargs)
 



More information about the Yum-cvs-commits mailing list