[PATCH 3/3] Move environment group selection logic to PackagePayload (#1179362)

David Shea dshea at redhat.com
Wed Jan 7 17:03:01 UTC 2015


The selectEnvironment method in yum only iterates over the groups within
an environment and selects each, which is possible using the existing
PackagePayload API. selectEnvironment in dnf selects the environment
using dnf.Base.environment_install, which does not change the kickstart
data and is probably premature. Replace both methods with one that calls
selectGroup on each group in the environment.
---
 pyanaconda/packaging/__init__.py   |  7 ++++++-
 pyanaconda/packaging/dnfpayload.py | 21 +--------------------
 pyanaconda/packaging/yumpayload.py | 13 -------------
 3 files changed, 7 insertions(+), 34 deletions(-)

diff --git a/pyanaconda/packaging/__init__.py b/pyanaconda/packaging/__init__.py
index a5004bd..721ab3d 100644
--- a/pyanaconda/packaging/__init__.py
+++ b/pyanaconda/packaging/__init__.py
@@ -1018,7 +1018,12 @@ class PackagePayload(Payload):
         raise NotImplementedError()
 
     def selectEnvironment(self, environmentid):
-        raise NotImplementedError()
+        if environmentid not in self.environments:
+            raise NoSuchGroup(environmentid)
+
+        # Select each group within the environment
+        for groupid in self.environmentGroups(environmentid):
+            self.selectGroup(groupid)
 
     def environmentGroups(self, environmentid):
         raise NotImplementedError()
diff --git a/pyanaconda/packaging/dnfpayload.py b/pyanaconda/packaging/dnfpayload.py
index ffdbc0c..83a36a0 100644
--- a/pyanaconda/packaging/dnfpayload.py
+++ b/pyanaconda/packaging/dnfpayload.py
@@ -264,7 +264,7 @@ class DNFPayload(packaging.PackagePayload):
 
         if env:
             try:
-                self._select_environment(env)
+                self.selectEnvironment(env)
                 log.info("selected env: %s", env)
             except packaging.NoSuchGroup as e:
                 self._miss(e)
@@ -426,22 +426,6 @@ class DNFPayload(packaging.PackagePayload):
             # DNF raises this when it is already not selected
             log.debug(e)
 
-    def _select_environment(self, env_id, default=True, optional=False, required=False):
-        env = self._base.comps.environment_by_pattern(env_id)
-        if env is None:
-            raise packaging.NoSuchGroup(env_id, required=required)
-        types = {'mandatory'}
-        if default:
-            types.add('default')
-        if optional:
-            types.add('optional')
-        exclude = self.data.packages.excludedList
-        try:
-            self._base.environment_install(env, types, exclude=exclude)
-        except dnf.exceptions.CompsError as e:
-            # DNF raises this when it is already selected
-            log.debug(e)
-
     def _select_kernel_package(self):
         kernels = self.kernelPackages
         for kernel in kernels:
@@ -671,9 +655,6 @@ class DNFPayload(packaging.PackagePayload):
         self.txID = None
         self._base.reset(sack=True, repos=True)
 
-    def selectEnvironment(self, env_id):
-        self._select_environment(env_id)
-
     def updateBaseRepo(self, fallback=True, checkmount=True):
         log.info('configuring base repo')
         self.reset()
diff --git a/pyanaconda/packaging/yumpayload.py b/pyanaconda/packaging/yumpayload.py
index b7e9e0f..bd6dd86 100644
--- a/pyanaconda/packaging/yumpayload.py
+++ b/pyanaconda/packaging/yumpayload.py
@@ -988,19 +988,6 @@ reposdir=%s
 
             return (environment.ui_name, environment.ui_description)
 
-    def selectEnvironment(self, environmentid):
-        groups = self._yumGroups
-        if not groups:
-            return
-
-        with _yum_lock:
-            if not groups.has_environment(environmentid):
-                raise NoSuchGroup(environmentid)
-
-            environment = groups.return_environment(environmentid)
-            for group in environment.groups:
-                self.selectGroup(group)
-
     def environmentGroups(self, environmentid):
         groups = self._yumGroups
         if not groups:
-- 
2.1.0



More information about the anaconda-patches mailing list