[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