Add a function to deselect packages, stolen from Anaconda.

Use deselectPackage to deslect things marked with - in kickstart.
More in line with how anaconda treats them.
This commit is contained in:
Jesse Keating 2009-04-07 15:03:46 -07:00
parent 979c0b5e94
commit 44c4028447
1 changed files with 30 additions and 1 deletions

View File

@ -325,6 +325,33 @@ class Pungi(pypungi.PungiBase):
self.logger.debug('Add default groups %s' % groups)
return groups
def _deselectPackage(self, pkg, *args):
"""Stolen from anaconda; Remove a package from the transaction set"""
sp = pkg.rsplit(".", 2)
txmbrs = []
if len(sp) == 2:
txmbrs = self.ayum.tsInfo.matchNaevr(name=sp[0], arch=sp[1])
if len(txmbrs) == 0:
exact, match, unmatch = yum.packages.parsePackages(self.ayum.pkgSack.returnPackages(), [pkg], casematch=1)
for p in exact + match:
txmbrs.append(p)
if len(txmbrs) > 0:
for x in txmbrs:
self.ayum.tsInfo.remove(x.pkgtup)
# we also need to remove from the conditionals
# dict so that things don't get pulled back in as a result
# of them. yes, this is ugly. conditionals should die.
for req, pkgs in self.ayum.tsInfo.conditionals.iteritems():
if x in pkgs:
pkgs.remove(x)
self.ayum.tsInfo.conditionals[req] = pkgs
return len(txmbrs)
else:
self.logger.debug("no such package %s to remove" %(pkg,))
return 0
def getPackageObjects(self):
"""Cycle through the list of packages, get package object
matches, and resolve deps.
@ -336,7 +363,6 @@ class Pungi(pypungi.PungiBase):
matchdict = {} # A dict of objects to names
# First remove the excludes
self.ayum.conf.exclude.extend(self.ksparser.handler.packages.excludedList)
self.ayum.excludePackages()
# Always add the core group
@ -382,6 +408,9 @@ class Pungi(pypungi.PungiBase):
if len(self.ayum.tsInfo) == 0:
raise yum.Errors.MiscError, 'No packages found to download.'
# Deselect things we don't want from the ks
map(self._deselectPackage, self.ksparser.handler.packages.excludedList)
moretoprocess = True
while moretoprocess: # Our fun loop
moretoprocess = False