[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