[yum-commits] 4 commits - repoquery.py

James Antill james at osuosl.org
Thu Dec 8 16:22:21 UTC 2011


 repoquery.py |  112 +++++++++++++++++++++++++++++++++++++++++++++++++++--------
 1 file changed, 97 insertions(+), 15 deletions(-)

New commits:
commit be792f304ca24fde66b9eea3a099509591f61928
Author: James Antill <james at and.org>
Date:   Thu Dec 8 11:08:58 2011 -0500

    Speedup --tree-*, by not doing unneeded lookups for non-dot output.

diff --git a/repoquery.py b/repoquery.py
index caa5967..2eb7834 100755
--- a/repoquery.py
+++ b/repoquery.py
@@ -374,6 +374,7 @@ class pkgQuery:
                 kw['dot'] = DotPlot()
         elif 'dot' not in kw.keys() or kw['dot'] is None:
             kw['dot'] = None
+        dot      = kw['dot']
         
         if str(kw['tree_level']).lower() != 'all':
             try: 
@@ -384,6 +385,15 @@ class pkgQuery:
         if not 'output' in kw.keys():
             kw['output'] = 'ascii-tree'
 
+        #  Level means something a bit different for dot, because we have to
+        # lookup it's packages ... but we don't for ascii. *sigh*
+        if dot is None:
+            self._tree_print_req(pkg, req, level)
+            lim = level + 1
+            if str(kw['tree_level']).lower() != 'all' and \
+                int(kw['tree_level']) < int(lim):
+                return
+
         __req2pkgs = {}
         def req2pkgs(ignore, req):
             req = str(req)
@@ -422,14 +432,9 @@ class pkgQuery:
             __req2pkgs[req] = providers
             return providers 
         
-        dot = kw['dot']
-        
         tups = getattr(pkg, prco_type)
         rpkgs, loc_reqs = self._tree_maybe_add_pkgs(all_reqs, tups, req2pkgs)
-        if dot is None:
-            self._tree_print_req(pkg, req, level)
-            lim = level + 1
-        else:
+        if dot is not None:
             dot.addPackage(pkg, rpkgs)
             lim = level + 2
         nlevel = level + 1
@@ -458,6 +463,7 @@ class pkgQuery:
 
     def fmt_tree_obsoletes(self, **kw):
         pkg      = kw.get('pkg', self.pkg)
+        req      = kw.get('req', 'cmd line')
         level    = kw.get('level', 0)
         all_reqs = kw.get('all_reqs', {})
         
@@ -466,6 +472,7 @@ class pkgQuery:
                 kw['dot'] = DotPlot()
         elif 'dot' not in kw.keys() or kw['dot'] is None:
             kw['dot'] = None
+        dot      = kw['dot']
         
         if str(kw['tree_level']).lower() != 'all':
             try: 
@@ -476,6 +483,15 @@ class pkgQuery:
         if not 'output' in kw.keys():
             kw['output'] = 'ascii-tree'
         
+        #  Level means something a bit different for dot, because we have to
+        # lookup it's packages ... but we don't for ascii. *sigh*
+        if dot is None:
+            self._tree_print_req(pkg, req, level)
+            lim = level + 1
+            if str(kw['tree_level']).lower() != 'all' and \
+                int(kw['tree_level']) < int(lim):
+                return
+
         def obs2pkgs():
             if self.yb is None:
                 return []
@@ -505,10 +521,7 @@ class pkgQuery:
         else:
             reason = 'cmd line'
         rpkgs = obs2pkgs()
-        if dot is None:
-            self._tree_print_req(pkg, reason, level)
-            lim = level + 1
-        else:
+        if dot is not None:
             dot.addPackage(pkg, rpkgs)
             lim = level + 2
         all_reqs[pkg] = None
@@ -523,6 +536,7 @@ class pkgQuery:
                 self._tree_print_req(rpkg, '', nlevel)
                 continue
             self.fmt_tree_obsoletes(pkg=rpkg, level=nlevel, all_reqs=all_reqs,
+                                    req = pkg.name,
                                     tree_level = kw['tree_level'],
                                     output = kw['output'],
                                     dot = dot)
@@ -536,6 +550,7 @@ class pkgQuery:
         if kw['output'].lower() == 'dot-tree':
             if 'dot' not in kw.keys() or kw['dot'] is None:
                 kw['dot'] = DotPlot()
+        dot      = kw['dot']
 
         if str(kw['tree_level']).lower() != 'all':
             try: 
@@ -546,6 +561,15 @@ class pkgQuery:
         if not 'output' in kw.keys():
             kw['output'] = 'ascii-tree'
 
+        #  Level means something a bit different for dot, because we have to
+        # lookup it's packages ... but we don't for ascii. *sigh*
+        if dot is None:
+            self._tree_print_req(pkg, req, level)
+            lim = level + 1
+            if str(kw['tree_level']).lower() != 'all' and \
+                int(kw['tree_level']) < int(lim):
+                return
+
         __prov2pkgs = {}
         def prov2pkgs(prov, ignore):
             if str(prov) in __prov2pkgs:
@@ -584,12 +608,8 @@ class pkgQuery:
         
         tups = pkg.provides + filetupes
         rpkgs, loc_reqs = self._tree_maybe_add_pkgs(all_reqs, tups, prov2pkgs)
-        dot = kw['dot']
         
-        if dot is None:
-            self._tree_print_req(pkg, req, level)
-            lim = level + 1
-        else:
+        if dot is not None:
             dot.addPackage(pkg, rpkgs)
             lim = level + 2
         nlevel = level + 1
commit daf1e5b310a2e36d5c3186e39ed414640d088baf
Author: James Antill <james at and.org>
Date:   Thu Dec 8 11:00:16 2011 -0500

    Fix adding option setopt.

diff --git a/repoquery.py b/repoquery.py
index 3c01335..caa5967 100755
--- a/repoquery.py
+++ b/repoquery.py
@@ -1256,7 +1256,7 @@ def main(args):
     parser.add_option("--search-fields", action="append", dest="searchfields",
                       default=[],
                       help="search fields to search using --search")
-    group.add_option("", "--setopt", dest="setopts", default=[],
+    parser.add_option("", "--setopt", dest="setopts", default=[],
                      action="append",
                      help="set arbitrary config and repo options")
                       
@@ -1366,7 +1366,7 @@ def main(args):
     repoq = YumBaseQuery(pkgops, sackops, opts)
 
     # go through all the setopts and set the global ones
-    repoq._parseSetOpts(opts.setopts)
+    bad_setopt_tm, bad_setopt_ne = repoq._parseSetOpts(opts.setopts)
 
     if repoq.main_setopts:
         for opt in repoq.main_setopts.items:
commit 798f8cc8dd9ceecd3932c978451d70489ae88a6e
Merge: 80fb837 c38d6dc
Author: James Antill <james at and.org>
Date:   Thu Dec 8 10:53:50 2011 -0500

    Merge branch 'master' of ssh://yum.baseurl.org/srv/projects/yum/git/yum-utils
    
    * 'master' of ssh://yum.baseurl.org/srv/projects/yum/git/yum-utils: (5 commits)
      Sync copy of the GPL with http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
      ...

commit 80fb837b1b192a9d6c0395ea71069b84316fe95b
Author: James Antill <james at and.org>
Date:   Mon Nov 14 10:42:22 2011 -0500

    Add --setopt to repoquery. BZ 753504.

diff --git a/repoquery.py b/repoquery.py
index 61d396e..c1a27d5 100755
--- a/repoquery.py
+++ b/repoquery.py
@@ -1090,6 +1090,44 @@ class YumBaseQuery(yum.YumBase):
                 loc.append("%s/%s" % (repo.urls[0], pkg['relativepath']))
         return loc
 
+    def _parseSetOpts(self, setopts):
+        """parse the setopts list handed to us and saves the results as
+           repo_setopts and main_setopts in the yumbase object"""
+
+        repoopts = {}
+        mainopts = yum.misc.GenericHolder()
+        mainopts.items = []
+
+        bad_setopt_tm = []
+        bad_setopt_ne = []
+
+        for item in setopts:
+            vals = item.split('=')
+            if len(vals) > 2:
+                bad_setopt_tm.append(item)
+                continue
+            if len(vals) < 2:
+                bad_setopt_ne.append(item)
+                continue
+            k,v = vals
+            period = k.find('.')
+            if period != -1:
+                repo = k[:period]
+                k = k[period+1:]
+                if repo not in repoopts:
+                    repoopts[repo] = yum.misc.GenericHolder()
+                    repoopts[repo].items = []
+                setattr(repoopts[repo], k, v)
+                repoopts[repo].items.append(k)
+            else:
+                setattr(mainopts, k, v)
+                mainopts.items.append(k)
+
+        self.main_setopts = mainopts
+        self.repo_setopts = repoopts
+
+        return bad_setopt_tm, bad_setopt_ne
+
 
 def main(args):
 
@@ -1218,6 +1256,9 @@ def main(args):
     parser.add_option("--search-fields", action="append", dest="searchfields",
                       default=[],
                       help="search fields to search using --search")
+    group.add_option("", "--setopt", dest="setopts", default=[],
+                     action="append",
+                     help="set arbitrary config and repo options")
                       
 
     (opts, regexs) = parser.parse_args()
@@ -1324,6 +1365,13 @@ def main(args):
         
     repoq = YumBaseQuery(pkgops, sackops, opts)
 
+    # go through all the setopts and set the global ones
+    repoq._parseSetOpts(opts.setopts)
+
+    if repoq.main_setopts:
+        for opt in repoq.main_setopts.items:
+            setattr(opts, opt, getattr(repoq.main_setopts, opt))
+
     # silence initialisation junk from modules etc unless verbose mode
     initnoise = (not opts.quiet) * 2
     repoq.preconf.releasever = opts.releasever
@@ -1335,6 +1383,20 @@ def main(args):
     repoq.preconf.init_plugins = opts.plugins
     repoq.conf
 
+    for item in  bad_setopt_tm:
+        msg = "Setopt argument has multiple values: %s"
+        repoq.logger.warning(msg % item)
+    for item in  bad_setopt_ne:
+        msg = "Setopt argument has no value: %s"
+        repoq.logger.warning(msg % item)
+    # now set  all the non-first-start opts from main from our setopts
+    if repoq.main_setopts:
+        for opt in repoq.main_setopts.items:
+            if not hasattr(repoq.conf, opt):
+                msg ="Main config did not have a %s attr. before setopt"
+                repoq.logger.warning(msg % opt)
+            setattr(repoq.conf, opt, getattr(repoq.main_setopts, opt))
+
     if opts.repofrompath:
         # setup the fake repos
         for repo in opts.repofrompath:


More information about the Yum-commits mailing list