From 8478b6314237f830418bf478f68ca06d6d3d9f48 Mon Sep 17 00:00:00 2001 From: Evan Goode Date: Fri, 24 Jan 2025 22:50:22 +0000 Subject: [PATCH 07/11] Add --releasever-major and --releasever-minor options Allows the user to override the $releasever_major and $releasever_minor variables on the command line, like --releasever. --- dnf/cli/cli.py | 29 +++++++++++++++++------------ dnf/cli/option_parser.py | 6 ++++++ doc/command_ref.rst | 8 ++++++++ doc/conf_ref.rst | 2 ++ 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/dnf/cli/cli.py b/dnf/cli/cli.py index ca0e35c4d..21e8764d0 100644 --- a/dnf/cli/cli.py +++ b/dnf/cli/cli.py @@ -859,7 +859,7 @@ class Cli(object): dnf.conf.PRIO_DEFAULT) self.demands.cacheonly = True self.base.conf._configure_from_options(opts) - self._read_conf_file(opts.releasever) + self._read_conf_file(opts.releasever, opts.releasever_major, opts.releasever_minor) if 'arch' in opts: self.base.conf.arch = opts.arch self.base.conf._adjust_conf_options() @@ -968,7 +968,7 @@ class Cli(object): ) ) - def _read_conf_file(self, releasever=None): + def _read_conf_file(self, releasever=None, releasever_major=None, releasever_minor=None): timer = dnf.logging.Timer('config') conf = self.base.conf @@ -996,18 +996,23 @@ class Cli(object): subst.update_from_etc(from_root, varsdir=conf._get_value('varsdir')) # cachedir, logs, releasever, and gpgkey are taken from or stored in installroot - major = None - minor = None + + det_major = None + det_minor = None if releasever is None and conf.releasever is None: - releasever, major, minor = dnf.rpm.detect_releasevers(conf.installroot) + releasever, det_major, det_minor = dnf.rpm.detect_releasevers(conf.installroot) elif releasever == '/': - releasever, major, minor = dnf.rpm.detect_releasevers(releasever) - if releasever is not None: - conf.releasever = releasever - if major is not None: - conf.releasever_major = major - if minor is not None: - conf.releasever_minor = minor + releasever, det_major, det_minor = dnf.rpm.detect_releasevers(releasever) + + def or_else(*args): + for arg in args: + if arg is not None: + return arg + return None + conf.releasever = or_else(releasever, conf.releasever) + conf.releasever_major = or_else(releasever_major, det_major, conf.releasever_major) + conf.releasever_minor = or_else(releasever_minor, det_minor, conf.releasever_minor) + if conf.releasever is None: logger.warning(_("Unable to detect release version (use '--releasever' to specify " "release version)")) diff --git a/dnf/cli/option_parser.py b/dnf/cli/option_parser.py index 6bb32c517..cf52309d8 100644 --- a/dnf/cli/option_parser.py +++ b/dnf/cli/option_parser.py @@ -202,6 +202,12 @@ class OptionParser(argparse.ArgumentParser): general_grp.add_argument("--releasever", default=None, help=_("override the value of $releasever" " in config and repo files")) + general_grp.add_argument("--releasever-major", default=None, + help=_("override the value of $releasever_major" + " in config and repo files")) + general_grp.add_argument("--releasever-minor", default=None, + help=_("override the value of $releasever_minor" + " in config and repo files")) general_grp.add_argument("--setopt", dest="setopts", default=[], action=self._SetoptsCallback, help=_("set arbitrary config and repo options")) diff --git a/doc/command_ref.rst b/doc/command_ref.rst index 30627bd4d..dc2e01efc 100644 --- a/doc/command_ref.rst +++ b/doc/command_ref.rst @@ -335,6 +335,14 @@ Options Configure DNF as if the distribution release was ````. This can affect cache paths, values in configuration files and mirrorlist URLs. +``--releasever_major=`` + Override the releasever_major variable, which is usually automatically + detected or taken from the part of ``$releasever`` before the first ``.``. + +``--releasever_minor=`` + Override the releasever_minor variable, which is usually automatically + detected or taken from the part of ``$releasever`` after the first ``.``. + .. _repofrompath_options-label: diff --git a/doc/conf_ref.rst b/doc/conf_ref.rst index fdb34323c..07ab6e27b 100644 --- a/doc/conf_ref.rst +++ b/doc/conf_ref.rst @@ -491,6 +491,8 @@ configuration file by your distribution to override the DNF defaults. The ``$releasever_major`` and ``$releasever_minor`` variables will be automatically derived from ``$releasever`` by splitting it on the first ``.``. For example, if ``$releasever`` is set to ``1.23``, then ``$releasever_major`` will be ``1`` and ``$releasever_minor`` will be ``23``. + ``$releasever_major`` and ``$releasever_minor`` can also be set by the distribution. + See also :ref:`repo variables `. .. _reposdir-label: -- 2.49.0