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: