[yum-git] yum/packageSack.py
Seth Vidal
skvidal at linux.duke.edu
Thu Feb 14 20:43:52 UTC 2008
yum/packageSack.py | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
New commits:
commit b562a0c95386fabd8caee7b8e153d20fa64dd192
Author: Seth Vidal <skvidal at fedoraproject.org>
Date: Thu Feb 14 15:40:26 2008 -0500
add a returnLeafNodes() to the packagesackbase object
diff --git a/yum/packageSack.py b/yum/packageSack.py
index 50415a1..d596c44 100644
--- a/yum/packageSack.py
+++ b/yum/packageSack.py
@@ -23,6 +23,7 @@ import warnings
import re
import fnmatch
import misc
+from sets import Set
class PackageSackBase(object):
"""Base class that provides the interface for PackageSacks."""
@@ -210,6 +211,40 @@ class PackageSackBase(object):
unmatched.discard(term)
return misc.unique(exactmatch), misc.unique(matched), list(unmatched)
+ def returnLeafNodes(self, repoid=None):
+ """returns a list of package objects that are not required by
+ any other package in this repository"""
+
+ # fixme - maybe cache this list?
+
+ req = {}
+ orphans = []
+
+ # prebuild the req dict
+ for po in self.returnPackages(repoid=repoid):
+ if not po.requires_names:
+ continue
+ for r in po.requires_names:
+ if not req.has_key(r):
+ req[r] = Set()
+ req[r].add(po)
+
+
+
+ for po in self.returnPackages(repoid=repoid):
+ preq = 0
+ for p in po.provides_names + po.filelist + po.dirlist + po.ghostlist:
+ if req.has_key(p):
+ # Don't count a package that provides its require
+ s = req[p]
+ if len(s) > 1 or po not in s:
+ preq += 1
+ break
+
+ if preq == 0:
+ orphans.append(po)
+
+ return orphans
class MetaSack(PackageSackBase):
"""Represents the aggregate of multiple package sacks, such that they can
More information about the Yum-cvs-commits
mailing list