Skip to content

Commit

Permalink
Add --releasever-major and --releasever-minor options
Browse files Browse the repository at this point in the history
Allows the user to override the $releasever_major and $releasever_minor
variables on the command line, like --releasever.
  • Loading branch information
evan-goode committed Jan 24, 2025
1 parent 4872d0a commit e1bc16d
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 12 deletions.
29 changes: 17 additions & 12 deletions dnf/cli/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -816,7 +816,7 @@ def configure(self, args, option_parser=None):
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()
Expand Down Expand Up @@ -925,7 +925,7 @@ def configure(self, args, option_parser=None):
)
)

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

Expand Down Expand Up @@ -953,18 +953,23 @@ def _read_conf_file(self, releasever=None):
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)"))
Expand Down
6 changes: 6 additions & 0 deletions dnf/cli/option_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,12 @@ def _add_general_options(self):
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"))
Expand Down
8 changes: 8 additions & 0 deletions doc/command_ref.rst
Original file line number Diff line number Diff line change
Expand Up @@ -335,6 +335,14 @@ Options
Configure DNF as if the distribution release was ``<release>``. This can
affect cache paths, values in configuration files and mirrorlist URLs.

``--releasever_major=<major version>``
Override the releasever_major variable, which is usually automatically
detected or taken from the part of ``$releasever`` before the first ``.``.

``--releasever_minor=<minor version>``
Override the releasever_minor variable, which is usually automatically
detected or taken from the part of ``$releasever`` after the first ``.``.

.. _repofrompath_options-label:


Expand Down
2 changes: 2 additions & 0 deletions doc/conf_ref.rst
Original file line number Diff line number Diff line change
Expand Up @@ -492,6 +492,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 <repo-variables-label>`.

.. _reposdir-label:
Expand Down

0 comments on commit e1bc16d

Please sign in to comment.