[yum-commits] docs/repoquery.1 repoquery.py

James Antill james at osuosl.org
Thu Aug 18 15:24:20 UTC 2011


 docs/repoquery.1 |    3 ++-
 repoquery.py     |   17 ++++++++++++++---
 2 files changed, 16 insertions(+), 4 deletions(-)

New commits:
commit cbf85c82936ed48dacbc032ad08b1d3fd7ba9a12
Author: James Antill <james at and.org>
Date:   Thu Aug 18 11:24:07 2011 -0400

    Allow --recursive --requires --resolve, as well as --whatrequires.

diff --git a/docs/repoquery.1 b/docs/repoquery.1
index f5a8c5d..b1d0a08 100644
--- a/docs/repoquery.1
+++ b/docs/repoquery.1
@@ -130,7 +130,8 @@ package names).  This is the default.
 When used with --whatrequires, search for dependencies only exactly as given.
 This is effectively the opposite of --alldeps.
 .IP "\fB\-\-recursive\fP"
-When used with --whatrequires, query packages recursively.
+When used with --whatrequires, and --requires --resolve, query packages
+recursively.
 .IP "\fB\-\-archlist=ARCH1[,ARCH2...]\fP"
 Limit the query to packages of given architecture(s). Valid values are all
 architectures known to rpm/yum such as 'i386' and 'src' for
diff --git a/repoquery.py b/repoquery.py
index 7c6ddba..0138251 100755
--- a/repoquery.py
+++ b/repoquery.py
@@ -1008,12 +1008,12 @@ class YumBaseQuery(yum.YumBase):
 
     def fmt_whatrequires(self, name, **kw):
         pkgs = {}
-        done = [] # keep track of names we have already visited
+        done = set() # keep track of names we have already visited
 
         def require_recursive(name):
             if name in done:
                 return
-            done.append(name)
+            done.add(name)
 
             provs = [name]
                     
@@ -1054,10 +1054,21 @@ class YumBaseQuery(yum.YumBase):
 
     def fmt_requires(self, name, **kw):
         pkgs = {}
-        for pkg in self.returnByName(name):
+        done = set()
+        def require_recursive(pkg):
+            if pkg.name in done:
+                return
+            done.add(pkg.name)
+
             for req in pkg.prco("requires"):
                 for res in self.fmt_whatprovides(req):
                     pkgs[(res.name, res.pkg.arch)] = res
+                    if self.options.recursive:
+                        require_recursive(res)
+
+        for pkg in self.returnByName(name):
+            require_recursive(pkg)
+
         return pkgs.values()
 
     def fmt_location(self, name):


More information about the Yum-commits mailing list