From 5a45d35bea89d46b7339b820fbf56dd12d4d3422 Mon Sep 17 00:00:00 2001 From: Chris Lumens Date: Thu, 20 Sep 2012 16:10:35 -0400 Subject: Handle --ignoremissing in _applyYumSelections (#859021). kickstart.selectPackages can go away entirely, since all it does is add stuff to ksdata and we've got that anyway. Having done that, the handling for --ignoremissing then needs to move into _applyYumSelections. --- pyanaconda/kickstart.py | 51 ----------------------------------- pyanaconda/packaging/__init__.py | 5 ---- pyanaconda/packaging/yumpayload.py | 30 ++++++++++++++++++--- tests/pyanaconda_test/backend_test.py | 1 - 4 files changed, 26 insertions(+), 61 deletions(-) diff --git a/pyanaconda/kickstart.py b/pyanaconda/kickstart.py index fff0ff25c..87231e122 100644 --- a/pyanaconda/kickstart.py +++ b/pyanaconda/kickstart.py @@ -31,8 +31,6 @@ import storage.iscsi import storage.fcoe import storage.zfcp -from pyanaconda.packaging import NoSuchGroup - import glob import iutil import isys @@ -58,7 +56,6 @@ from pykickstart.base import KickstartCommand from pykickstart.constants import * from pykickstart.errors import formatErrorMsg, KickstartError, KickstartValueError from pykickstart.parser import KickstartParser -from pykickstart.parser import Group as PackageGroup from pykickstart.parser import Script as KSScript from pykickstart.sections import * from pykickstart.version import returnClassForVersion @@ -1548,54 +1545,6 @@ def runTracebackScripts(scripts): script.run("/", flags.serial) log.info("All kickstart %%traceback script(s) have been run") -def selectPackages(ksdata, payload): - # If no %packages header was seen, use the installclass's default group - # selections. This can also be explicitly specified with %packages - # --default. Otherwise, select whatever was given (even if it's nothing). - if not packagesSeen or ksdata.packages.default: - # FIXME: Set default packaging selections here. - if not packagesSeen: - return - - for pkg in ksdata.packages.packageList: - try: - payload.selectPackage(pkg) - except NoSuchPackage as e: - if ksdata.packages.handleMissing == KS_MISSING_IGNORE: - continue - - if errorHandler.cb(e) == ERROR_RAISE: - sys.exit(1) - - ksdata.packages.groupList.insert(0, PackageGroup("Core")) - - for grp in ksdata.packages.groupList: - default = False - optional = False - - if grp.include == GROUP_DEFAULT: - default = True - elif grp.include == GROUP_ALL: - default = True - optional = True - - try: - payload.selectGroup(grp.name, default=default, optional=optional) - except NoSuchGroup as e: - if ksdata.packages.handleMissing == KS_MISSING_IGNORE: - continue - - if errorHandler.cb(e) == ERROR_RAISE: - sys.exit(1) - - map(payload.deselectPackage, ksdata.packages.excludedList) - - for grp in ksdata.packages.excludedGroupList: - try: - payload.deselectGroup(grp.name) - except NoSuchGroup: - continue - def doKickstartStorage(storage, ksdata, instClass): """ Setup storage state from the kickstart data """ ksdata.clearpart.execute(storage, ksdata, instClass) diff --git a/pyanaconda/packaging/__init__.py b/pyanaconda/packaging/__init__.py index a4b42a9f9..3645ccf6c 100644 --- a/pyanaconda/packaging/__init__.py +++ b/pyanaconda/packaging/__init__.py @@ -659,7 +659,6 @@ class PackagePayload(Payload): return kernels def payloadInitialize(storage, ksdata, payload): - from pyanaconda.kickstart import selectPackages from pyanaconda.threads import threadMgr storageThread = threadMgr.get("AnaStorageThread") @@ -668,10 +667,6 @@ def payloadInitialize(storage, ksdata, payload): payload.setup(storage) - # And now that we've set up the payload, we need to apply any kickstart - # selections. This could include defaults from an install class. - selectPackages(ksdata, payload) - def show_groups(payload): #repo = ksdata.RepoData(name="anaconda", baseurl="http://cannonball/install/rawhide/os/") #obj.addRepo(repo) diff --git a/pyanaconda/packaging/yumpayload.py b/pyanaconda/packaging/yumpayload.py index a3b8288ad..bf8f4060e 100644 --- a/pyanaconda/packaging/yumpayload.py +++ b/pyanaconda/packaging/yumpayload.py @@ -38,6 +38,7 @@ import os import shutil +import sys import time import tempfile @@ -79,6 +80,8 @@ from pyanaconda.errors import * from pyanaconda.packaging import NoSuchGroup, NoSuchPackage import pyanaconda.progress as progress +from pykickstart.constants import KS_MISSING_IGNORE + default_repos = [productName.lower(), "rawhide"] from threading import Lock @@ -1006,6 +1009,13 @@ reposdir=%s else: self._yum._ts_save_file = None + def _handleMissing(self, exn): + if self.data.packages.handleMissing == KS_MISSING_IGNORE: + return + + if errorHandler.cb(exn, str(exn)) == ERROR_RAISE: + sys.exit(1) + def _applyYumSelections(self): """ Apply the selections in ksdata to yum. @@ -1014,7 +1024,10 @@ reposdir=%s self._selectYumGroup("core") for package in self.data.packages.packageList: - self._selectYumPackage(package) + try: + self._selectYumPackage(package) + except NoSuchPackage as e: + self._handleMissing(e) for group in self.data.packages.groupList: default = False @@ -1025,13 +1038,22 @@ reposdir=%s default = True optional = True - self._selectYumGroup(group.name, default=default, optional=optional) + try: + self._selectYumGroup(group.name, default=default, optional=optional) + except NoSuchGroup as e: + self._handleMissing(e) for package in self.data.packages.excludedList: - self._deselectYumPackage(package) + try: + self._deselectYumPackage(package) + except NoSuchPackage as e: + self._handleMissing(e) for group in self.data.packages.excludedGroupList: - self._deselectYumGroup(group.name) + try: + self._deselectYumGroup(group.name) + except NoSuchGroup as e: + self._handleMissing(e) self.selectKernelPackage() diff --git a/tests/pyanaconda_test/backend_test.py b/tests/pyanaconda_test/backend_test.py index 85b5919ee..b09ee6950 100644 --- a/tests/pyanaconda_test/backend_test.py +++ b/tests/pyanaconda_test/backend_test.py @@ -208,7 +208,6 @@ class BackendTest(mock.TestCase): pyanaconda.backend.doBasePackageSelect(anaconda) self.assertTrue(anaconda.backend.resetPackageSelections.called) - self.assertTrue(pyanaconda.backend.kickstart.selectPackages.called) def do_base_package_select_2_test(self): import pyanaconda.backend -- cgit