[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