Override releasever_{major,minor} with system-release provides #2198
+103
−66
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The
releasever_major
andreleasever_minor
substitution variables are usually derived by splittingreleasever
on the first.
. However, to support EPEL 10 [1], we would like a way for distributions to override these values. Specifically, we would like RHEL 10 to have a releasever of10
with a releasever_major of10
and a releasever_minor of0
(later incrementing to1
,2
, to correspond with the RHEL minor version).This commit adds a new API function,
detect_releasevers
, which derivesreleasever
,releasever_major
, andreleasever_minor
from virtual provides on the system-release package (any ofDISTROVERPKG
). The detection of releasever is unchanged.releasever_major
andreleasever_minor
are specified by the versions of thesystem-release-major
andsystem-release-minor
provides, respectively.If the user specifies a
--releasever=X.Y
on the command line, the distribution settings forreleasever
,releasever_major
, andreleasever_minor
will all be overridden:releasever
will be set to X.Y,releasever_major
will be set to X, andreleasever_minor
will be set to Y, same as before.If a user wants to specify a custom
releasever_{major,minor}
, they have to set all three with--setopt=releasever=X --setopt=releasever_major=Y --setopt=releasever_minor=z
, taking care to putreleasever_major
andreleasever_minor
afterreleasever
so they are not overridden. This is admittedly not ideal, but I can't think of another solution to this problem that preserves the following properties:releasever_{major,minor}
are derived by splittingreleasever
. This behavior was added in Split $releasever to $releasever_major and $releasever_minor #1989.--releasever
is specified on the command line,releasever_{major,minor}
should be set accordingly, even ifreleasever{major_minor}
are specified by provides in the distribution system-release package.Maybe we could add
--releasever_major=
and--releasever_minor
options that take priority over--releasever
to improve point (3).Another caveat to allowing overriding
releasever_{major,minor}
is existing API users usingdetect_releasever
. Take this snippet from ourdoc/examples/install_extension.py
:Now, in order to detect the correct
releasever_{major,minor}
, the correct code would beRequires rpm-software-management/libdnf#1689.
[1] https://issues.redhat.com/browse/RHEL-68034