[yum-cvs] yum-utils repoquery.py,1.2,1.3 yum-utils.spec,1.2,1.3
Panu Matilainen
pmatilai at login.linux.duke.edu
Mon May 30 16:24:12 UTC 2005
Update of /home/groups/yum/cvs/yum-utils
In directory login:/tmp/cvs-serv28236
Modified Files:
repoquery.py yum-utils.spec
Log Message:
New version of repoquery:
- support some group queries
- only set caching when non-root
Index: repoquery.py
===================================================================
RCS file: /home/groups/yum/cvs/yum-utils/repoquery.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- repoquery.py 30 May 2005 12:31:19 -0000 1.2
+++ repoquery.py 30 May 2005 16:24:09 -0000 1.3
@@ -1,20 +1,35 @@
#!/usr/bin/python -tt
-# repoquery 0.0.5
-# Licensed under the GPL
-# by pmatilai at welho.com
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Library General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# (c) pmatilai at laiskiainen.org
+
import sys
import signal
import re
import fnmatch
import time
+import os
from optparse import OptionParser
import yum
import yum.config
+version = "0.0.6"
+
flags = { 'EQ':'=', 'LT':'<', 'LE':'<=', 'GT':'>', 'GE':'>=', 'None':' '}
std_qf = {
@@ -115,6 +130,43 @@
def fmtConflicts(self, **kw):
return "\n".join(self._prco("conflicts", **kw))
+class groupQuery:
+ def __init__(self, groupinfo, name, grouppkgs="required"):
+ self.groupInfo = groupinfo
+ self.grouppkgs = grouppkgs
+ self.name = name
+ self.group = groupinfo.group_by_id[name]
+
+ def doQuery(self, method, *args, **kw):
+ return "\n".join(getattr(self, method)(*args, **kw))
+
+ def nevra(self):
+ return ["%s - %s" % (self.group.id, self.group.name)]
+
+ def list(self):
+ pkgs = []
+ for t in self.grouppkgs.split(','):
+ if t == "required":
+ pkgs.extend(self.groupInfo.requiredPkgs(self.name))
+ elif t == "mandatory":
+ pkgs.extend(self.groupInfo.mandatory_pkgs[self.name])
+ elif t == "default":
+ pkgs.extend(self.groupInfo.default_pkgs[self.name])
+ elif t == "optional":
+ pkgs.extend(self.groupInfo.optional_pkgs[self.name])
+ elif t == "all":
+ pkgs.extend(self.groupInfo.allPkgs(self.name))
+ else:
+ raise "Unknown group package type %s" % t
+
+ return pkgs
+
+ def requires(self):
+ return self.groupInfo.requiredGroups(self.name)
+
+ def info(self):
+ return ["%s:\n\n%s\n" % (self.group.name, self.group.description)]
+
class YumBaseQuery(yum.YumBase):
def __init__(self, pkgops = [], sackops = [], options = None):
yum.YumBase.__init__(self)
@@ -141,25 +193,27 @@
qf = self.options.queryformat or std_qf["nevra"]
setattr(self.pkgSack.pc, "qf", qf)
- def doRepoSetup(self):
- for repo in self.repos.listEnabled():
- if repo.repoXML is not None:
- continue
- repo.cache = 1
- repo.dirSetup()
- repo.getRepoXML()
- repo.baseurlSetup()
-
- # yumbase has an abstract log method
+ # dont log anything..
def log(self, level, message):
pass
+ def returnItems(self):
+ if self.options.group:
+ grps = []
+ for name in self.groupInfo.grouplist:
+ grp = groupQuery(self.groupInfo, name,
+ grouppkgs = self.options.grouppkgs)
+ grps.append(grp)
+ return grps
+ else:
+ return self.pkgSack.returnNewestByNameArch()
+
def matchPkgs(self, regexs):
if not regexs:
- return self.pkgSack.returnNewestByNameArch()
+ return self.returnItems()
pkgs = []
- for pkg in self.pkgSack.returnNewestByNameArch():
+ for pkg in self.returnItems():
for expr in regexs:
if pkg.name == expr or fnmatch.fnmatch("%s" % pkg, expr):
pkgs.append(pkg)
@@ -178,6 +232,13 @@
def doQuery(self, method, *args, **kw):
return getattr(self, method)(*args, **kw)
+ def groupmember(self, name, **kw):
+ grps = []
+ for id in self.groupInfo.grouplist:
+ if name in self.groupInfo.allPkgs(id):
+ grps.append(id)
+ return grps
+
def whatprovides(self, name, **kw):
return [self.returnPackageByDep(name)]
@@ -214,35 +275,69 @@
needfiles = 0
needother = 0
+ needgroup = 0
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
signal.signal(signal.SIGINT, signal.SIG_DFL)
parser = OptionParser()
# query options
- parser.add_option("--requires", default=0, action="store_true")
- parser.add_option("--provides", default=0, action="store_true")
- parser.add_option("--whatprovides", default=0, action="store_true")
- parser.add_option("--whatrequires", default=0, action="store_true")
- parser.add_option("--obsoletes", default=0, action="store_true")
- parser.add_option("--conflicts", default=0, action="store_true")
- parser.add_option("--changelog", default=0, action="store_true")
- parser.add_option("--location", default=0, action="store_true")
- parser.add_option("--nevra", default=0, action="store_true")
- parser.add_option("--nvr", default=0, action="store_true")
- parser.add_option("-s", "--source", default=0, action="store_true")
- parser.add_option("--resolve", default=0, action="store_true")
- parser.add_option("--alldeps", default=0, action="store_true")
- parser.add_option("-l", "--list", default=0, action="store_true")
- parser.add_option("-i", "--info", default=0, action="store_true")
- parser.add_option("--qf", "--queryformat", dest="queryformat")
- parser.add_option("--range", default=":", dest="range")
- parser.add_option("", "--repoid", default=[], action="append")
+ parser.add_option("-l", "--list", default=0, action="store_true",
+ help="list files in this package/group")
+ parser.add_option("-i", "--info", default=0, action="store_true",
+ help="list descriptive info from this package/group")
+ parser.add_option("-f", "--file", default=0, action="store_true",
+ help="query which package provides this file")
+ parser.add_option("--qf", "--queryformat", dest="queryformat",
+ help="specify a custom output format for queries")
+ parser.add_option("--groupmember", default=0, action="store_true",
+ help="list which group(s) this package belongs to")
# dummy for rpmq compatibility
- parser.add_option("-q", "--query", default=0, action="store_true")
- parser.add_option("-a", "--all", default=0, action="store_true")
+ parser.add_option("-q", "--query", default=0, action="store_true",
+ help="no-op for rpmquery compatibility")
+ parser.add_option("-a", "--all", default=0, action="store_true",
+ help="query all packages/groups")
+ parser.add_option("--requires", default=0, action="store_true",
+ help="list package dependencies")
+ parser.add_option("--provides", default=0, action="store_true",
+ help="list capabilities this package provides")
+ parser.add_option("--obsoletes", default=0, action="store_true",
+ help="list other packages obsoleted by this package")
+ parser.add_option("--conflicts", default=0, action="store_true",
+ help="list capabilities this package conflicts with")
+ parser.add_option("--changelog", default=0, action="store_true",
+ help="show changelog for this package")
+ parser.add_option("--location", default=0, action="store_true",
+ help="show download URL for this package")
+ parser.add_option("--nevra", default=0, action="store_true",
+ help="show name, epoch, version, release, architecture info of package")
+ parser.add_option("--nvr", default=0, action="store_true",
+ help="show name, version, release info of package")
+ parser.add_option("-s", "--source", default=0, action="store_true",
+ help="show package source RPM name")
+ parser.add_option("--resolve", default=0, action="store_true",
+ help="resolve capabilities to originating package(s)")
+ parser.add_option("--alldeps", default=0, action="store_true",
+ help="check non-explicit dependencies as well")
+ parser.add_option("--whatprovides", default=0, action="store_true",
+ help="query what package(s) provide a capability")
+ parser.add_option("--whatrequires", default=0, action="store_true",
+ help="query what package(s) require a capability")
+ # group stuff
+ parser.add_option("--group", default=0, action="store_true",
+ help="query groups instead of packages")
+ parser.add_option("--grouppkgs", default="required", dest="grouppkgs",
+ help="filter which packages (all,optional etc) are shown from groups")
+ # other opts
+ parser.add_option("", "--repoid", default=[], action="append")
+ parser.add_option("-v", "--version", default=0, action="store_true",
+ help="show program version and exit")
(opts, regexs) = parser.parse_args()
+ if opts.version:
+ print "Repoquery version %s" % version
+ sys.exit(0)
+
if len(regexs) < 1 and not opts.all:
parser.print_help()
sys.exit(0)
@@ -267,7 +362,8 @@
needother = 1
pkgops.append("xchangelog")
if opts.list:
- needfiles = 1
+ if not opts.group:
+ needfiles = 1
pkgops.append("list")
if opts.info:
pkgops.append("info")
@@ -279,14 +375,26 @@
sackops.append("whatrequires")
if opts.whatprovides:
sackops.append("whatprovides")
+ if opts.file:
+ sackops.append("whatprovides")
if opts.location:
sackops.append("location")
+ if opts.groupmember:
+ sackops.append("groupmember")
+ needgroup = 1
+ if opts.group:
+ needgroup = 1
if opts.nevra or (len(pkgops) == 0 and len(sackops) == 0):
pkgops.append("nevra")
repoq = YumBaseQuery(pkgops, sackops, opts)
repoq.doConfigSetup()
+
+ if os.geteuid() != 0:
+ repoq.conf.setConfigOption('cache', 1)
+ repoq.errorlog(0, 'Not running as root, might not be able to import all of cache.')
+
if len(opts.repoid) > 0:
for repo in repoq.repos.findRepos('*'):
if repo.id not in opts.repoid:
@@ -301,6 +409,9 @@
repoq.repos.populateSack(with='filelists')
if needother:
repoq.repos.populateSack(with='otherdata')
+ if needgroup:
+ repoq.doTsSetup()
+ repoq.doGroupSetup()
repoq.extendPkgClass()
repoq.runQuery(regexs)
Index: yum-utils.spec
===================================================================
RCS file: /home/groups/yum/cvs/yum-utils/yum-utils.spec,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- yum-utils.spec 23 May 2005 15:38:31 -0000 1.2
+++ yum-utils.spec 30 May 2005 16:24:09 -0000 1.3
@@ -55,6 +55,7 @@
%{_bindir}/repoquery
%{_bindir}/repo-rss
%{_bindir}/yumdownloader
+%{_bindir}/yum-builddep
%files -n yum-updateonboot
%defattr(-, root, root)
More information about the Yum-cvs-commits
mailing list