[yum-cvs] yum-utils Makefile, 1.2, 1.2.2.1 package-cleanup.py, 1.8, 1.8.2.1 repoclosure.py, 1.8, 1.8.2.1 repomanage.py, 1.2, 1.2.2.1 repoquery.py, 1.20.2.2, 1.20.2.3 yum-utils.spec, 1.8.2.1, 1.8.2.2 yumdownloader.py, 1.5, 1.5.2.1

Panu Matilainen pmatilai at login.linux.duke.edu
Wed Dec 7 16:41:23 UTC 2005


Update of /home/groups/yum/cvs/yum-utils
In directory login:/tmp/cvs-serv22927

Modified Files:
      Tag: yum-2_4_X
	Makefile package-cleanup.py repoclosure.py repomanage.py 
	repoquery.py yum-utils.spec yumdownloader.py 
Log Message:
- Update from HEAD:
  * add repoquery manpage
  * package-cleanup can take alternative conf file
  * repoclosure can optionally check only newest packages
  * repomanage has option to keep N newest packages and can skip gpg checking
  * repoquery shows directories in package listing, better whatrequires
    operation and can take alternative conf file
  * yumdownloader supports private cache
  * new plugin for handling kernel-module-foo-`uname -r` style kernel module
    packages
- Mark as 0.4.0


Index: Makefile
===================================================================
RCS file: /home/groups/yum/cvs/yum-utils/Makefile,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- Makefile	30 May 2005 15:47:55 -0000	1.2
+++ Makefile	7 Dec 2005 16:41:21 -0000	1.2.2.1
@@ -1,3 +1,4 @@
+SUBDIRS = docs
 PKGNAME = yum-utils
 VERSION=$(shell awk '/Version:/ { print $$2 }' ${PKGNAME}.spec)
 RELEASE=$(shell awk '/Release:/ { print $$2 }' ${PKGNAME}.spec)
@@ -15,6 +16,8 @@
 	install -m 755 yumdownloader.py $(DESTDIR)/usr/bin/yumdownloader
 	install -m 755 yum-builddep.py $(DESTDIR)/usr/bin/yum-builddep
 
+	for d in $(SUBDIRS); do make DESTDIR=`cd $(DESTDIR); pwd` -C $$d install; [ $$? = 0 ] || exit 1; done
+
 archive:
 	@rm -rf ${PKGNAME}-%{VERSION}.tar.gz
 	@rm -rf /tmp/${PKGNAME}-$(VERSION) /tmp/${PKGNAME}

Index: package-cleanup.py
===================================================================
RCS file: /home/groups/yum/cvs/yum-utils/package-cleanup.py,v
retrieving revision 1.8
retrieving revision 1.8.2.1
diff -u -r1.8 -r1.8.2.1
--- package-cleanup.py	13 Jul 2005 10:32:53 -0000	1.8
+++ package-cleanup.py	7 Dec 2005 16:41:21 -0000	1.8.2.1
@@ -37,7 +37,7 @@
 
 def initYum(opts):
     my = yum.YumBase()
-    my.doConfigSetup()
+    my.doConfigSetup(opts.conffile)
     my.log = Logger(threshold=my.conf.getConfigOption('debuglevel'), 
     file_object =sys.stdout)
     if opts.orphans:
@@ -262,6 +262,8 @@
       help="Number of kernel packages to keep on the system (default 2)")
     parser.add_option("--keepdevel",default=False,dest="keepdevel",action="store_true",
       help="Do not remove kernel-devel packages when removing kernels")
+    parser.add_option("-c", dest="conffile", action="store",
+                default='/etc/yum.conf', help="config file location")
 
     (opts, args) = parser.parse_args()
     if not exactlyOne((opts.problems,opts.leaves,opts.kernels,opts.orphans)): 

Index: repoclosure.py
===================================================================
RCS file: /home/groups/yum/cvs/yum-utils/repoclosure.py,v
retrieving revision 1.8
retrieving revision 1.8.2.1
diff -u -r1.8 -r1.8.2.1
--- repoclosure.py	23 Jun 2005 04:53:53 -0000	1.8
+++ repoclosure.py	7 Dec 2005 16:41:21 -0000	1.8.2.1
@@ -29,7 +29,7 @@
 from optparse import OptionParser
 import rpmUtils.arch
 from yum.constants import *
-
+from repomd.packageSack import ListPackageSack
 
 
 def evrTupletoVer(tuple):
@@ -62,7 +62,8 @@
         help="Use a temp dir for storing/accessing yum-cache")
     parser.add_option("-q", "--quiet", default=0, action="store_true", 
                       help="quiet (no output to stderr)")
-        
+    parser.add_option("-n", "--newest", default=0, action="store_true",
+                      help="check only the newest packages in the repos")
     (opts, args) = parser.parse_args()
     return (opts, args)
 
@@ -100,10 +101,18 @@
         for repo in self.repos.listEnabled():
             self.repos.populateSack(which=[repo.id], with='filelists')
 
-    def getBrokenDeps(self):
+    def getBrokenDeps(self, newest=False):
         unresolved = {}
         resolved = {}
-        for pkg in self.pkgSack:
+        if newest:
+            pkgs = self.pkgSack.returnNewestByNameArch()
+        else:
+            pkgs = self.pkgSack
+
+        mypkgSack = ListPackageSack(pkgs)
+        pkgtuplist = mypkgSack.simplePkgList()
+        
+        for pkg in pkgs:
             for (req, flags, (reqe, reqv, reqr)) in pkg.returnPrco('requires'):
                 if req.startswith('rpmlib'): continue # ignore rpmlib deps
             
@@ -119,8 +128,22 @@
                     if not unresolved.has_key(pkg):
                         unresolved[pkg] = []
                     unresolved[pkg].append((req, flags, ver))
-                else:
-                    resolved[(req,flags,ver)] = 1
+                    continue
+                    
+                if newest:
+                    resolved_by_newest = False
+                    for po in resolve_sack:# look through and make sure all our answers are newest-only
+                        if po.pkgtup in pkgtuplist:
+                            resolved_by_newest = True
+                            break
+
+                    if resolved_by_newest:                    
+                        resolved[(req,flags,ver)] = 1
+                    else:
+                        if not unresolved.has_key(pkg):
+                            unresolved[pkg] = []
+                        unresolved[pkg].append((req, flags, ver))                        
+                        
         return unresolved
     
     
@@ -159,8 +182,12 @@
     if not opts.quiet:
         print 'Checking Dependencies'
 
-    baddeps = my.getBrokenDeps()
-    num = len(my.pkgSack)
+    baddeps = my.getBrokenDeps(opts.newest)
+    if opts.newest:
+        num = len(my.pkgSack.returnNewestByNameArch())
+    else:
+        num = len(my.pkgSack)
+        
     repos = my.repos.listEnabled()
 
     if not opts.quiet:

Index: repomanage.py
===================================================================
RCS file: /home/groups/yum/cvs/yum-utils/repomanage.py,v
retrieving revision 1.2
retrieving revision 1.2.2.1
diff -u -r1.2 -r1.2.2.1
--- repomanage.py	13 Jun 2005 04:53:16 -0000	1.2
+++ repomanage.py	7 Dec 2005 16:41:21 -0000	1.2.2.1
@@ -27,7 +27,7 @@
 import types
 import string
 import getopt
-
+from yum import misc
 from exceptions import Exception
 
 
@@ -68,14 +68,12 @@
         fdno = os.open(package, os.O_RDONLY)
     except OSError, e:
         raise Error, "Error opening file %s" % package
-    ts.setVSFlags(~(rpm.RPMVSF_NOMD5|rpm.RPMVSF_NEEDPAYLOAD))
     try:
         hdr = ts.hdrFromFdno(fdno)
     except rpm.error, e:
         raise Error, "Error opening package %s" % package
     if type(hdr) != rpm.hdr:
         raise Error, "Error opening package %s" % package
-    ts.setVSFlags(0)
     os.close(fdno)
     return hdr
     
@@ -141,10 +139,14 @@
     options['output'] = 'new'
     options['passed'] = []
     options['space'] = 0
+    options['keep'] = 1 # number of newest items to keep 
+                        # (defaults to single newest but it could be newest N)
+    options['nocheck'] = 0
     try:
-        gopts, argsleft = getopt.getopt(args, 'onhs', ['space', 'new', 'old', 'help'])
+        gopts, argsleft = getopt.getopt(args, 'onhsck:', ['keep=','space', 
+                                              'nocheck', 'new', 'old', 'help'])
     except getopt.error, e:
-        errorprint(_('Options Error: %s.') % e)
+        errorprint('Options Error: %s.' % e)
         usage()
         sys.exit(1)
     
@@ -171,6 +173,10 @@
                     options['passed'].append('new')
             elif arg in ['-s', '--space']:
                 options['space'] = 1
+            elif arg in ['-k', '--keep']:
+                options['keep'] = int(a)
+            elif arg in ['-c', '--nocheck']:
+                options['nocheck'] = 1
                 
             
     except ValueError, e:
@@ -190,20 +196,38 @@
         directory = argsleft[0]
     
     return options, directory
+
+def sortByEVR(evr1, evr2):
+    """sorts a list of evr tuples"""
     
+    rc = compareEVR(evr1, evr2)
+    if rc == 0:
+        return 0
+    if rc < 0:
+        return -1
+    if rc > 0:
+        return 1
+
+
 def main(args):
     options, mydir = parseargs(args)
     rpmList = []
     rpmList = getFileList(mydir, '.rpm', rpmList)
     verfile = {}
-    naver = {}
+    pkgdict = {} # hold all of them - put them in (n,a) = [(e,v,r),(e1,v1,r1)]
+    
+    keepnum = options['keep']*(-1) # the number of items to keep
     
     if len(rpmList) == 0:
         errorprint('No files to process')
         sys.exit(1)
     
-    
+
     ts = rpm.TransactionSet()
+    if options['nocheck']:
+        ts.setVSFlags(~(rpm._RPMVSF_NOPAYLOAD))
+    else:
+        ts.setVSFlags(~(rpm.RPMVSF_NOMD5|rpm.RPMVSF_NEEDPAYLOAD))
     for pkg in rpmList:
         try:
             hdr = returnHdr(ts, pkg)
@@ -215,38 +239,48 @@
         (n,a,e,v,r) = pkgtuple
         del hdr
         
+        if not pkgdict.has_key((n,a)):
+            pkgdict[(n,a)] = []
+        pkgdict[(n,a)].append((e,v,r))
+        
         if not verfile.has_key(pkgtuple):
             verfile[pkgtuple] = []
         verfile[pkgtuple].append(pkg)
         
-        if not naver.has_key((n,a)):
-            naver[(n,a)] = (e,v,r)
-            continue
-        
-        (e2, v2, r2) = naver[(n,a)] # the current champion
-        rc = compareEVR((e,v,r), (e2,v2,r2))
-        if rc == 0:
-            continue
-        if rc < 0:
-            continue
-        if rc > 0:
-            naver[(n,a)] = (e,v,r)
-    
+        for natup in pkgdict.keys():
+            evrlist = pkgdict[natup]
+            if len(evrlist) > 1:
+                evrlist = misc.unique(evrlist)
+                evrlist.sort(sortByEVR)
+                pkgdict[natup] = evrlist
+                
     del ts
+
     # now we have our dicts - we can return whatever by iterating over them
-    # just print newests
     
     outputpackages = []
     if options['output'] == 'new':
-    
-        for (n,a) in naver.keys():
-            (e,v,r) = naver[(n,a)]
-            for pkg in verfile[(n,a,e,v,r)]:
-                outputpackages.append(pkg)
+        for (n,a) in pkgdict.keys():
+            evrlist = pkgdict[(n,a)]
+            
+            if len(evrlist) < abs(keepnum):
+                newevrs = evrlist
+            else:
+                newevrs = evrlist[keepnum:]
+            
+            for (e,v,r) in newevrs:
+                for pkg in verfile[(n,a,e,v,r)]:
+                    outputpackages.append(pkg)
    
     if options['output'] == 'old':
-        for (n,a,e,v,r) in verfile.keys():
-            if (e,v,r) != naver[(n,a,)]:
+        for (n,a) in pkgdict.keys():
+            evrlist = pkgdict[(n,a)]
+            
+            if len(evrlist) < abs(keepnum):
+                continue
+ 
+            oldevrs = evrlist[:keepnum]
+            for (e,v,r) in oldevrs:
                 for pkg in verfile[(n,a,e,v,r)]:
                     outputpackages.append(pkg)
     
@@ -264,6 +298,8 @@
       -o --old - print the older packages
       -n --new - print the newest packages
       -s --space - space separated output, not newline
+      -k --keep - newest N packages to keep - defaults to 1
+      -c --nocheck - do not check package payload signatures/digests
       -h --help - duh
     By default it will output the full path to the newest packages in the path.
         """

Index: repoquery.py
===================================================================
RCS file: /home/groups/yum/cvs/yum-utils/repoquery.py,v
retrieving revision 1.20.2.2
retrieving revision 1.20.2.3
diff -u -r1.20.2.2 -r1.20.2.3
--- repoquery.py	17 Sep 2005 08:52:35 -0000	1.20.2.2
+++ repoquery.py	7 Dec 2005 16:41:21 -0000	1.20.2.3
@@ -185,8 +185,9 @@
 
     def fmt_list(self, **kw):
         fdict = {}
-        for file in self.pkg.returnFileEntries():
-            fdict[file] = None
+        for ftype in self.pkg.returnFileTypes():
+            for file in self.pkg.returnFileEntries(ftype):
+                fdict[file] = None
         files = fdict.keys()
         files.sort()
         return "\n".join(files)
@@ -432,7 +433,10 @@
                 provs.extend(pkg.prco("provides"))
 
         for prov in provs:
-            for pkg in self.pkgSack.searchRequires(prov):
+            # Only look at the providing name, not the whole version. This 
+            # might occasionally give some false positives but that's 
+            # better than missing ones which it had previously
+            for pkg in self.pkgSack.searchRequires(prov.split()[0]):
                 pkgs[pkg.pkgtup] = pkg
         return self.queryPkgFactory(pkgs.values())
 
@@ -441,7 +445,7 @@
         
         for pkg in self.returnByName(name):
             for req in pkg.prco("requires"):
-                for res in self.whatprovides(req):
+                for res in self.fmt_whatprovides(req):
                     pkgs[res.name] = res
         return pkgs.values()
 
@@ -528,6 +532,8 @@
                       help="use private cache (default when used as non-root)")
     parser.add_option("--querytags", default=0, action="store_true",
                       help="list available tags in queryformat queries")
+    parser.add_option("-c", dest="conffile", action="store",
+                      default='/etc/yum.conf', help="config file location")
 
     (opts, regexs) = parser.parse_args()
     if opts.version:
@@ -590,7 +596,7 @@
         pkgops.append("queryformat")
 
     repoq = YumBaseQuery(pkgops, sackops, opts)
-    repoq.doConfigSetup()
+    repoq.doConfigSetup(opts.conffile)
     
     if os.geteuid() != 0 or opts.tempcache:
         cachedir = getCacheDir()

Index: yum-utils.spec
===================================================================
RCS file: /home/groups/yum/cvs/yum-utils/yum-utils.spec,v
retrieving revision 1.8.2.1
retrieving revision 1.8.2.2
diff -u -r1.8.2.1 -r1.8.2.2
--- yum-utils.spec	17 Sep 2005 08:52:35 -0000	1.8.2.1
+++ yum-utils.spec	7 Dec 2005 16:41:21 -0000	1.8.2.2
@@ -1,6 +1,6 @@
 Summary: Utilities based around the yum package manager
 Name: yum-utils
-Version: 0.3.1
+Version: 0.4.0
 Release: 1
 License: GPL
 Group: Development/Tools
@@ -78,6 +78,7 @@
 %{_bindir}/repo-rss
 %{_bindir}/yumdownloader
 %{_bindir}/yum-builddep
+%{_mandir}/man1/*
 
 %files -n yum-updateonboot
 %defattr(-, root, root)
@@ -91,6 +92,12 @@
 /usr/lib/yum-plugins
 
 %changelog
+* Wed Dec 07 2005 Panu Matilainen <pmatilai at laiskiainen.org>
+- 0.4.0
+
+* Mon Oct 17 2005 Panu Matilainen <pmatilai at laiskiainen.org>
+- add repoquery man page
+
 * Sat Sep 17 2005 Panu Matilainen <pmatilai at laiskiainen.org>
 - version 0.3.1
 - various enhancements and fixes to repoquery

Index: yumdownloader.py
===================================================================
RCS file: /home/groups/yum/cvs/yum-utils/yumdownloader.py,v
retrieving revision 1.5
retrieving revision 1.5.2.1
diff -u -r1.5 -r1.5.2.1
--- yumdownloader.py	1 Jun 2005 06:24:54 -0000	1.5
+++ yumdownloader.py	7 Dec 2005 16:41:21 -0000	1.5.2.1
@@ -25,6 +25,7 @@
 from urlgrabber.progress import TextMeter
 from yum.logger import Logger
 from yum.packages import parsePackages, returnBestPackages
+from yum.misc import getCacheDir
 from optparse import OptionParser
 from urlparse import urljoin
 
@@ -33,7 +34,11 @@
     my.doConfigSetup()
     my.conf.setConfigOption('uid', os.geteuid())
     if my.conf.getConfigOption('uid') != 0:
-        my.conf.setConfigOption('cache', 1)
+        cachedir = getCacheDir()
+        if cachedir is None:
+            print "Error: Could not make cachedir, exiting"
+            sys.exit(50)
+        my.repos.setCacheDir(cachedir)
     my.repos.setProgressBar(TextMeter(fo=sys.stdout))
     my.log = Logger(threshold=my.conf.getConfigOption('debuglevel'), 
     file_object =sys.stdout)




More information about the Yum-cvs-commits mailing list