[yum-commits] package-cleanup.py
Tim Lauridsen
timlau at osuosl.org
Thu Mar 26 19:14:52 UTC 2009
package-cleanup.py | 60 ++++++++++++++++++++++++-----------------------------
1 file changed, 28 insertions(+), 32 deletions(-)
New commits:
commit 4719c6bfc5255ecc3c2581c9517daebd1228dea5
Author: Ville Skyttä <ville.skytta at iki.fi>
Date: Wed Mar 25 00:41:22 2009 +0200
Operate more on yum package objects rather than tuples.
diff --git a/package-cleanup.py b/package-cleanup.py
index 11d8415..8c10b87 100755
--- a/package-cleanup.py
+++ b/package-cleanup.py
@@ -69,14 +69,13 @@ def getLocalRequires(my):
"""Get a list of all requirements in the local rpmdb"""
pkgs = {}
for po in my.rpmdb.returnPackages():
- tup = po.pkgtup
header = po.hdr
requires = zip(
header[rpm.RPMTAG_REQUIRENAME],
header[rpm.RPMTAG_REQUIREFLAGS],
header[rpm.RPMTAG_REQUIREVERSION],
)
- pkgs[tup] = requires
+ pkgs[po] = requires
return pkgs
def buildProviderList(my, pkgs, reportProblems):
@@ -87,7 +86,7 @@ def buildProviderList(my, pkgs, reportProblems):
providers = {} # To speed depsolving, don't recheck deps that have
# already been checked
provsomething = {}
- for (pkg,reqs) in pkgs.items():
+ for (po,reqs) in pkgs.items():
for (req,flags,ver) in reqs:
if ver == '':
ver = None
@@ -102,13 +101,13 @@ def buildProviderList(my, pkgs, reportProblems):
if not errors:
print "Missing dependencies:"
errors = True
- print "Package %s requires %s" % (pkg[0],
+ print "Package %s requires %s" % (po,
miscutils.formatRequire(req,ver,rflags))
else:
for rpkg in resolve_sack:
# Skip packages that provide something for themselves
# as these can still be leaves
- if rpkg != pkg:
+ if rpkg != po.pkgtup:
provsomething[rpkg] = 1
# Store the resolve_sack so that we can re-use it if another
# package has the same requirement
@@ -191,11 +190,8 @@ def printDupes(my):
continue
dupes.append(po)
- for pkg in dupes:
- if pkg.epoch != '0':
- print '%s:%s-%s-%s.%s' % (pkg.epoch, pkg.name, pkg.ver, pkg.rel, pkg.arch)
- else:
- print '%s-%s-%s.%s' % (pkg.name, pkg.ver, pkg.rel, pkg.arch)
+ for po in dupes:
+ print "%s" % po
def cleanOldDupes(my, confirmed):
"""remove all the older duplicates"""
@@ -238,19 +234,14 @@ def cleanOldDupes(my, confirmed):
-def _shouldShowLeaf(my, pkg, leaf_regex, exclude_devel, exclude_bin):
+def _shouldShowLeaf(my, po, leaf_regex, exclude_devel, exclude_bin):
"""
Determine if the given pkg should be displayed as a leaf or not.
Return True if the pkg should be shown, False if not.
"""
- if pkg[0] == 'gpg-pubkey':
+ if po.name == 'gpg-pubkey':
return False
- pos = my.rpmdb.searchNevra(name=pkg[0], epoch=str(pkg[2]), ver=pkg[3],
- rel=pkg[4], arch=pkg[1])
- # This should give us an exact match
- assert len(pos) == 1
- po = pos[0]
name = po.name
if exclude_devel and name.endswith('devel'):
return False
@@ -263,27 +254,32 @@ def _shouldShowLeaf(my, pkg, leaf_regex, exclude_devel, exclude_bin):
return False
def listLeaves(my, all_nodes, leaf_regex, exclude_devel, exclude_bin):
- """return a packagtuple of any installed packages that
- are not required by any other package on the system"""
+ """Print packages that are not required by any other package
+ on the system"""
+
+ # Could use my.rpmdb.returnLeafNodes() directly but it's slow
ts = transaction.initReadOnlyTransaction()
- leaves = ts.returnLeafNodes()
- for pkg in leaves:
- name = pkg[0]
- if all_nodes or _shouldShowLeaf(my, pkg, leaf_regex, exclude_devel,
+ leaves = [list(x) for x in ts.returnLeafNodes()]
+ # Epoch can be a number, stringify to work with getInstalledPackageObject
+ for lst in leaves:
+ lst[2] = str(lst[2])
+ leaves = (my.getInstalledPackageObject(x) for x in leaves)
+
+ for po in leaves:
+ if all_nodes or _shouldShowLeaf(my, po, leaf_regex, exclude_devel,
exclude_bin):
- print "%s-%s-%s.%s" % (pkg[0],pkg[3],pkg[4],pkg[1])
+ print "%s" % po
def listOrphans(my):
""" This is "yum list extras". """
avail = my.pkgSack.simplePkgList()
avail = set(avail)
for po in sorted(my.rpmdb.returnPackages()):
- (n,a,e,v,r) = po.pkgtup
- if n == "gpg-pubkey": # Not needed as of at least 3.2.19, but meh
+ if po.name == "gpg-pubkey": # Not needed as of at least 3.2.19, but meh
continue
if po.pkgtup not in avail:
- print "%s-%s-%s.%s" % (n, v, r, a)
+ print "%s" % po
def getKernels(my):
"""return a list of all installed kernels, sorted newest to oldest"""
@@ -384,17 +380,17 @@ def removeKernels(my, count, confirmed, keepdevel):
print "No kernel related packages to remove"
return
+ toremove = [my.getInstalledPackageObject(x) for x in toremove]
+
print "I will remove the following %s kernel related packages:" % len(toremove)
- for kernel in toremove:
- (n,a,e,v,r) = kernel
- print "%s-%s-%s" % (n,v,r)
+ for po in toremove:
+ print "%s" % po
if not confirmed:
if not userconfirm():
sys.exit(0)
- for kernel in toremove:
- po = my.rpmdb.searchPkgTuple(kernel)[0]
+ for po in toremove:
my.tsInfo.addErase(po)
# Now perform the action transaction
More information about the Yum-commits
mailing list