[yum-cvs] yum-utils repoquery.py,1.3,1.4

Panu Matilainen pmatilai at login.linux.duke.edu
Tue May 31 17:41:57 UTC 2005


Update of /home/groups/yum/cvs/yum-utils
In directory login:/tmp/cvs-serv11365

Modified Files:
	repoquery.py 
Log Message:
Some fixes to repoquery:
- eliminate duplicates from --whatrequires --alldeps
- catch various exceptions, print errors to stderr unless --quiet specified


Index: repoquery.py
===================================================================
RCS file: /home/groups/yum/cvs/yum-utils/repoquery.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- repoquery.py	30 May 2005 16:24:09 -0000	1.3
+++ repoquery.py	31 May 2005 17:41:55 -0000	1.4
@@ -27,6 +27,8 @@
 
 import yum
 import yum.config
+import yum.Errors
+import repomd.mdErrors
 
 version = "0.0.6"
 
@@ -194,9 +196,13 @@
         setattr(self.pkgSack.pc, "qf", qf)
 
     # dont log anything..
-    def log(self, level, message):
+    def log(self, value, msg):
         pass
 
+    def errorlog(self, value, msg):
+        if not self.options.quiet:
+            print >> sys.stderr, msg
+
     def returnItems(self):
         if self.options.group:
             grps = []
@@ -208,15 +214,38 @@
         else:
             return self.pkgSack.returnNewestByNameArch()
 
+    def returnNewestByName(self, name):
+        pkgs = []
+        try:
+            pkgs = self.pkgSack.returnNewestByName(name)
+        except repomd.mdErrors.PackageSackError, err:
+            self.errorlog(0, err)
+        return pkgs
+
+    def returnPackageByDep(self, depstring):
+        provider = []
+        try:
+            provider.append(yum.YumBase.returnPackageByDep(self, depstring))
+        except yum.Errors.YumBaseError, err:
+            self.errorlog(0, "No package provides %s" % depstring)
+        return provider
+
     def matchPkgs(self, regexs):
         if not regexs:
             return self.returnItems()
     
         pkgs = []
+        notfound = {}
+
         for pkg in self.returnItems():
             for expr in regexs:
                 if pkg.name == expr or fnmatch.fnmatch("%s" % pkg, expr):
                     pkgs.append(pkg)
+                else:
+                    notfound[expr] = None
+
+        for expr in notfound.keys():
+            self.errorlog(0, 'No match found for %s' % expr)
 
         return pkgs
 
@@ -240,25 +269,25 @@
         return grps
 
     def whatprovides(self, name, **kw):
-        return [self.returnPackageByDep(name)]
+        return self.returnPackageByDep(name)
 
     def whatrequires(self, name, **kw):
-        pkgs = []
+        pkgs = {}
         provs = [name]
                 
         if self.options.alldeps:
-            for pkg in self.pkgSack.returnNewestByName(name):
+            for pkg in self.returnNewestByName(name):
                 provs.extend(pkg._prco("provides"))
 
         for prov in provs:
             for pkg in self.pkgSack.searchRequires(prov):
-                pkgs.append(pkg)
-        return pkgs
+                pkgs[pkg.pkgtup] = pkg
+        return pkgs.values()
 
     def requires(self, name, **kw):
         pkgs = {}
         
-        for pkg in self.pkgSack.returnNewestByName(name):
+        for pkg in self.returnNewestByName(name):
             for req in pkg._prco("requires"):
                 for res in self.whatprovides(req):
                     pkgs[res.name] = res
@@ -266,7 +295,7 @@
 
     def location(self, name):
         loc = []
-        for pkg in self.pkgSack.returnNewestByName(name):
+        for pkg in self.returnNewestByName(name):
             repo = self.repos.getRepo(pkg.simple['repoid'])
             loc.append("%s/%s" % (repo.urls[0], pkg['relativepath']))
         return loc
@@ -332,6 +361,8 @@
     parser.add_option("", "--repoid", default=[], action="append")
     parser.add_option("-v", "--version", default=0, action="store_true",
                       help="show program version and exit")
+    parser.add_option("--quiet", default=0, action="store_true", 
+                      help="quiet (no output to stderr)")
 
     (opts, regexs) = parser.parse_args()
     if opts.version:




More information about the Yum-cvs-commits mailing list