[PATCH 1/5] Handle --ignoremissing in _applyYumSelections (#859021).

Chris Lumens clumens at redhat.com
Mon Sep 24 19:27:23 UTC 2012


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 fff0ff2..87231e1 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 a4b42a9..3645ccf 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 a3b8288..bf8f406 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 85b5919..b09ee69 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
-- 
1.7.11.2



More information about the anaconda-patches mailing list