[yum-cvs] yum-utils package-cleanup.py,1.3,1.4
Seth Vidal
skvidal at login.linux.duke.edu
Mon Jun 13 00:15:42 UTC 2005
Update of /home/groups/yum/cvs/yum-utils
In directory login:/tmp/cvs-serv12049
Modified Files:
package-cleanup.py
Log Message:
add --quiet and optimize getLocalRequires and getKernels
Index: package-cleanup.py
===================================================================
RCS file: /home/groups/yum/cvs/yum-utils/package-cleanup.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- package-cleanup.py 12 Jun 2005 22:36:15 -0000 1.3
+++ package-cleanup.py 13 Jun 2005 00:15:40 -0000 1.4
@@ -34,6 +34,7 @@
from optparse import OptionParser
from yum.packages import YumInstalledPackage
+
def initYum():
my = yum.YumBase()
my.doConfigSetup()
@@ -43,7 +44,6 @@
for repo in my.repos.listEnabled():
my.repos.disableRepo(repo.id)
- print "Setting up yum"
my.doTsSetup()
my.doSackSetup()
my.doRpmDBSetup()
@@ -53,15 +53,14 @@
# Get a list of all requirements in the local rpmdb
def getLocalRequires(my):
pkgs = {}
- for tup in my.rpmdb.getPkgList():
- headerlist = my.rpmdb.returnHeaderByTuple(tup)
- for header in headerlist:
- requires = zip(
- header[rpm.RPMTAG_REQUIRENAME],
- header[rpm.RPMTAG_REQUIREFLAGS],
- header[rpm.RPMTAG_REQUIREVERSION],
- )
- pkgs[tup] = requires
+ for header in my.rpmdb.getHdrList():
+ tup = my.rpmdb._hdr2pkgTuple(header)
+ requires = zip(
+ header[rpm.RPMTAG_REQUIRENAME],
+ header[rpm.RPMTAG_REQUIREFLAGS],
+ header[rpm.RPMTAG_REQUIREVERSION],
+ )
+ pkgs[tup] = requires
return pkgs
# Resolve all dependencies in pkgs and build a dictionary of packages
@@ -102,29 +101,10 @@
print "No problems found"
return provsomething
-# Parse command line options
-def parseArgs():
- parser = OptionParser()
- parser.add_option("--problems", default=False, dest="problems", action="store_true",
- help='List dependency problems in the local RPM database')
- parser.add_option("--leaves", default=False, dest="leaves",action="store_true",
- help='List leaf nodes in the local RPM database')
- parser.add_option("--all", default=False, dest="all",action="store_true",
- help='When listing leaf nodes also list leaf nodes that are not libraries')
- parser.add_option("--oldkernels", default=False, dest="kernels",action="store_true",
- help="Remove old kernels")
- parser.add_option("--count",default=2,dest="kernelcount",action="store",
- help="Number of kernels to keep on the system (default 2)")
- (opts, args) = parser.parse_args()
- if not (opts.problems or opts.leaves or opts.kernels) or (opts.problems and opts.leaves):
- parser.print_help()
- print "Please specify either --problems or --leaves"
- sys.exit(0)
- return (opts, args)
def listLeaves(all):
- # Any installed packages that are not in provsomething don't provide
- # anything required by the rest of the system and are therefore leave nodes
+ """return a packagtuple of any installed packages that
+ are not required by any other package on the system"""
ts = transaction.initReadOnlyTransaction()
leaves = ts.returnLeafNodes()
for pkg in leaves:
@@ -132,19 +112,19 @@
if name.startswith('lib') or all:
print "%s-%s-%s.%s" % (pkg[0],pkg[3],pkg[4],pkg[1])
-# Return a list of all installed kernels, sorted newst to oldest
+
def getKernels(my):
+ """return a list of all installed kernels, sorted newest to oldest"""
kernlist = []
- for tup in my.rpmdb.getPkgList():
- (n,a,e,v,r) = tup
- if (n == 'kernel'):
- kernlist.append(tup)
+ for tup in my.rpmdb.returnTupleByKeyword(name='kernel'):
+ kernlist.append(tup)
kernlist.sort(sortPackages)
kernlist.reverse()
return kernlist
-# Sort package tuples on epoch version release
+
def sortPackages(pkg1,pkg2):
+ """sort pkgtuples by evr"""
return miscutils.compareEVR((pkg1[2:]),(pkg2[2:]))
def progress(what, bytes, total, h, user):
@@ -154,20 +134,21 @@
def userconfirm():
"""gets a yes or no from the user, defaults to No"""
-
- while 1:
+ while True:
choice = raw_input('Is this ok [y/N]: ')
- if len(choice) == 0 or choice[0] in ['Y', 'y', 'N','n']:
+ choice = choice.lower()
+ if len(choice) == 0 or choice[0] in ['y', 'n']:
break
- if len(choice) == 0 or choice[0] not in ['y', 'Y']:
- return 0
- else:
- return 1
-
+ if len(choice) == 0 or choice[0] != 'y':
+ return False
+ else:
+ return True
+
# Remove old kernels, keep at most count kernels (and always keep the running
# kernel)
-def removeKernels(my,count):
+def removeKernels(my, count):
+ count = int(count)
if count < 1:
print "Error should keep at least 1 kernel!"
sys.exit(100)
@@ -193,7 +174,7 @@
print "No kernels to remove"
return
- print "I will remove the following %s kernel(s):" % (len(toremove))
+ print "I will remove the following %s kernel(s):" % len(toremove)
for kernel in toremove:
(n,a,e,v,r) = kernel
print "%s-%s" % (v,r)
@@ -212,20 +193,47 @@
my.ts.order()
my.ts.run(progress,'')
+# Parse command line options
+def parseArgs():
+ parser = OptionParser()
+ parser.add_option("--problems", default=False, dest="problems", action="store_true",
+ help='List dependency problems in the local RPM database')
+ parser.add_option("--leaves", default=False, dest="leaves",action="store_true",
+ help='List leaf nodes in the local RPM database')
+ parser.add_option("--all", default=False, dest="all",action="store_true",
+ help='When listing leaf nodes also list leaf nodes that are not libraries')
+ parser.add_option("-q", "--quiet", default=False, dest="quiet",action="store_true",
+ help='Print out nothing unecessary')
+ parser.add_option("--oldkernels", default=False, dest="kernels",action="store_true",
+ help="Remove old kernels")
+ parser.add_option("--count",default=2,dest="kernelcount",action="store",
+ help="Number of kernels to keep on the system (default 2)")
+ (opts, args) = parser.parse_args()
+ if not (opts.problems or opts.leaves or opts.kernels) or (opts.problems and opts.leaves):
+ parser.print_help()
+ print "Please specify either --problems or --leaves"
+ sys.exit(0)
+ return (opts, args)
def main():
(opts, args) = parseArgs()
+ if not opts.quiet:
+ print "Setting up yum"
my = initYum()
+
if (opts.kernels):
- removeKernels(my,int(opts.kernelcount))
+ removeKernels(my, opts.kernelcount)
sys.exit(0)
+
if (opts.leaves):
listLeaves(opts.all)
sys.exit(0)
- print "Reading local RPM database"
+ if not opts.quiet:
+ print "Reading local RPM database"
pkgs = getLocalRequires(my)
- print "Processing all local requires"
+ if not opts.quiet:
+ print "Processing all local requires"
provsomething = buildProviderList(my,pkgs,opts.problems)
if __name__ == '__main__':
More information about the Yum-cvs-commits
mailing list