Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions tmt/package_managers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -329,6 +329,12 @@ class Options:
#: If set, instruct package manager to install from untrusted sources.
allow_untrusted: bool = False

#: If set, allow erasing conflicting or obsoleting packages during install.
allow_erasing: bool = False

#: If set, allow downgrades of transitive dependencies during install.
allow_downgrade: bool = False


class PackageManagerEngine(tmt.utils.Common):
command: Command
Expand Down
22 changes: 22 additions & 0 deletions tmt/package_managers/dnf.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@ def _extra_dnf_options(self, options: Options, command: Optional[Command] = None
else:
raise GeneralError(f"Unhandled package manager command '{command}'.")

if options.allow_erasing:
# Supported by DNF4 and DNF5; YumEngine raises PrepareError for this flag.
extra_options += Command('--allowerasing')
Comment thread
vaibhavdaren marked this conversation as resolved.

return extra_options

def _construct_presence_script(
Expand Down Expand Up @@ -398,6 +402,19 @@ class Dnf5Engine(DnfEngine):
skip_missing_packages_option = '--skip-unavailable'
skip_missing_debuginfo_option = skip_missing_packages_option

def _extra_dnf_options(self, options: Options, command: Optional[Command] = None) -> Command:
"""
Collect additional options for ``dnf5`` based on given options.
"""

extra_options = super()._extra_dnf_options(options, command)

if options.allow_downgrade:
# DNF4 allows transitive downgrades automatically; this flag is DNF5-specific.
extra_options += Command('--allow-downgrade')
Comment thread
tcornell-bus marked this conversation as resolved.

return extra_options


@provides_package_manager('dnf5')
class Dnf5(Dnf):
Expand All @@ -415,6 +432,11 @@ class Dnf5(Dnf):
class YumEngine(DnfEngine):
_base_command = Command('yum')

def _extra_dnf_options(self, options: Options, command: Optional[Command] = None) -> Command:
if options.allow_erasing:
raise PrepareError("Package manager 'yum' does not support '--allowerasing'.")
return super()._extra_dnf_options(options, command)

def _yum_config_manager_command(self) -> Command:
command = Command('yum-config-manager')

Expand Down
Loading