David Shea (3): Remove unused methods for deselecting environments Add a parameter to environmentGroups for wheter to include optionlist. Move environment group selection logic to PackagePayload (#1179362)
pyanaconda/packaging/__init__.py | 9 +++++++-- pyanaconda/packaging/dnfpayload.py | 38 ++++++-------------------------------- pyanaconda/packaging/yumpayload.py | 35 +++++------------------------------ 3 files changed, 18 insertions(+), 64 deletions(-)
--- pyanaconda/packaging/dnfpayload.py | 10 ---------- pyanaconda/packaging/yumpayload.py | 15 --------------- 2 files changed, 25 deletions(-)
diff --git a/pyanaconda/packaging/dnfpayload.py b/pyanaconda/packaging/dnfpayload.py index 214988e..4f5b3be 100644 --- a/pyanaconda/packaging/dnfpayload.py +++ b/pyanaconda/packaging/dnfpayload.py @@ -462,16 +462,6 @@ class DNFPayload(packaging.PackagePayload): # DNF raises this when it is already selected log.debug(e)
- def _deselect_environment(self, env_id): - env = self._base.comps.environment_by_pattern(env_id) - if env is None: - raise packaging.NoSuchGroup(env_id) - try: - self._base.environment_remove(env) - except dnf.exceptions.CompsError as e: - # DNF raises this when it is already not selected - log.debug(e) - def _select_kernel_package(self): kernels = self.kernelPackages for kernel in kernels: diff --git a/pyanaconda/packaging/yumpayload.py b/pyanaconda/packaging/yumpayload.py index 16b7e24..58ace3a 100644 --- a/pyanaconda/packaging/yumpayload.py +++ b/pyanaconda/packaging/yumpayload.py @@ -1001,21 +1001,6 @@ reposdir=%s for group in environment.groups: self.selectGroup(group)
- def deselectEnvironment(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.deselectGroup(group) - for group in environment.options: - self.deselectGroup(group) - def environmentGroups(self, environmentid): groups = self._yumGroups if not groups:
The default is to include optionlist, which is the original behavior. This adds an option to exlucde it and return only the groups that are part of an environment's grouplist. --- pyanaconda/packaging/__init__.py | 2 +- pyanaconda/packaging/dnfpayload.py | 7 +++++-- pyanaconda/packaging/yumpayload.py | 7 +++++-- 3 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/pyanaconda/packaging/__init__.py b/pyanaconda/packaging/__init__.py index a5004bd..deff84c 100644 --- a/pyanaconda/packaging/__init__.py +++ b/pyanaconda/packaging/__init__.py @@ -1020,7 +1020,7 @@ class PackagePayload(Payload): def selectEnvironment(self, environmentid): raise NotImplementedError()
- def environmentGroups(self, environmentid): + def environmentGroups(self, environmentid, optional=True): raise NotImplementedError()
@property diff --git a/pyanaconda/packaging/dnfpayload.py b/pyanaconda/packaging/dnfpayload.py index 4f5b3be..970dc6d 100644 --- a/pyanaconda/packaging/dnfpayload.py +++ b/pyanaconda/packaging/dnfpayload.py @@ -573,13 +573,16 @@ class DNFPayload(packaging.PackagePayload): raise packaging.NoSuchGroup(environmentid) return (env.ui_name, env.ui_description)
- def environmentGroups(self, environmentid): + def environmentGroups(self, environmentid, optional=True): env = self._base.comps.environment_by_pattern(environmentid) if env is None: raise packaging.NoSuchGroup(environmentid) group_ids = (id_.name for id_ in env.group_ids) option_ids = (id_.name for id_ in env.option_ids) - return list(itertools.chain(group_ids, option_ids)) + if optional: + return list(itertools.chain(group_ids, option_ids)) + else: + return list(group_ids)
def environmentHasOption(self, environmentid, grpid): env = self._base.comps.environment_by_pattern(environmentid) diff --git a/pyanaconda/packaging/yumpayload.py b/pyanaconda/packaging/yumpayload.py index 58ace3a..1910968 100644 --- a/pyanaconda/packaging/yumpayload.py +++ b/pyanaconda/packaging/yumpayload.py @@ -1001,7 +1001,7 @@ reposdir=%s for group in environment.groups: self.selectGroup(group)
- def environmentGroups(self, environmentid): + def environmentGroups(self, environmentid, optional=True): groups = self._yumGroups if not groups: return [] @@ -1011,7 +1011,10 @@ reposdir=%s raise NoSuchGroup(environmentid)
environment = groups.return_environment(environmentid) - return environment.groups + environment.options + if optional: + return environment.groups + environment.options + else: + return environment.groups
### ### METHODS FOR WORKING WITH GROUPS
On Fri, Jan 16, 2015 at 03:13:16PM -0500, David Shea wrote:
The default is to include optionlist, which is the original behavior. This adds an option to exlucde it and return only the groups that are
exclude ^^^^^^
- Brian C. Lane | Anaconda Team | IRC: bcl #anaconda | Port Orchard, WA (PST8PDT)
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 deff84c..de85e80 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, optional=False): + self.selectGroup(groupid)
def environmentGroups(self, environmentid, optional=True): raise NotImplementedError() diff --git a/pyanaconda/packaging/dnfpayload.py b/pyanaconda/packaging/dnfpayload.py index 970dc6d..d0eb90e 100644 --- a/pyanaconda/packaging/dnfpayload.py +++ b/pyanaconda/packaging/dnfpayload.py @@ -282,7 +282,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) @@ -446,22 +446,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: @@ -700,9 +684,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 1910968..5948349 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, optional=True): groups = self._yumGroups if not groups:
On Fri, Jan 16, 2015 at 03:13:14PM -0500, David Shea wrote:
David Shea (3): Remove unused methods for deselecting environments Add a parameter to environmentGroups for wheter to include optionlist. Move environment group selection logic to PackagePayload (#1179362)
pyanaconda/packaging/__init__.py | 9 +++++++-- pyanaconda/packaging/dnfpayload.py | 38 ++++++-------------------------------- pyanaconda/packaging/yumpayload.py | 35 +++++------------------------------ 3 files changed, 18 insertions(+), 64 deletions(-)
Ack, other than that one spelling error.
anaconda-patches@lists.fedorahosted.org