python-rpmautospec/files/0001-Added-AlmaLinux-change-identifier-0.6.5.patch
2025-03-26 14:38:44 +03:00

218 lines
9.6 KiB
Diff
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From 332637e14a68883cfbe61a39718d56df5daa991a Mon Sep 17 00:00:00 2001
From: eabdullin <ed.abdullin.1@gmail.com>
Date: Fri, 6 Dec 2024 09:44:47 +0300
Subject: [PATCH] Added AlmaLinux change identifier
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
When modifying a package in AlmaLinux relative to upstream, we do not increment the packages version/release number. Instead, we use almalinux.{almalinux_release_number}.
Therefore, the ability to identify AlmaLinux-specific changes was added, using the comment "AlmaLinux change: ".
If this comment is used, the base release number of the package remains unchanged, but the suffix almalinux.{almalinux_release_number} is appended.
The almalinux_release_number counter increments with each AlmaLinux-specific change to the package and resets upon version/release updates of the package.
---
rpmautospec/changelog.py | 2 +
rpmautospec/magic_comments.py | 7 ++-
rpmautospec/pkg_history.py | 52 ++++++++++++++++++-
rpmautospec/subcommands/process_distgit.py | 9 +++-
.../subcommands/test_process_distgit.py | 3 +-
tests/rpmautospec/test_magic_comments.py | 1 +
6 files changed, 69 insertions(+), 5 deletions(-)
diff --git a/rpmautospec/changelog.py b/rpmautospec/changelog.py
index cb3e74f..599df6f 100644
--- a/rpmautospec/changelog.py
+++ b/rpmautospec/changelog.py
@@ -106,6 +106,8 @@ class ChangelogEntry(dict):
changelog_evr = f" - {entry_info['epoch-version']}"
if entry_info["release-complete"]:
changelog_evr += f"-{entry_info['release-complete']}"
+ if "almalinux-release-complete" in entry_info and entry_info["almalinux-release-complete"]:
+ changelog_evr += f".{entry_info['almalinux-release-complete']}"
else:
changelog_evr = ""
changelog_header = f"* {changelog_date} {entry_info['authorblurb']}{changelog_evr}"
diff --git a/rpmautospec/magic_comments.py b/rpmautospec/magic_comments.py
index d56086e..4c1c06c 100644
--- a/rpmautospec/magic_comments.py
+++ b/rpmautospec/magic_comments.py
@@ -3,19 +3,24 @@ from typing import NamedTuple
magic_comment_re = re.compile(r"^\s*\[(?P<magic>.*)\]\s*$")
skip_changelog_re = re.compile(r"\s*skip\s+changelog\s*")
+is_almalinux_re = re.compile(r"almalinux\s+change", re.IGNORECASE)
bump_release_re = re.compile(r"\s*bump\s+release\s*(?::\s*)?(?P<bump_value>\d+)\s*")
class MagicCommentResult(NamedTuple):
skip_changelog: bool
+ is_almalinux: bool
bump_release: int
def parse_magic_comments(message: str) -> MagicCommentResult:
skip_changelog = False
+ is_almalinux = False
bump_release = 0
for line in message.split("\n"):
+ if is_almalinux_re.match(line):
+ is_almalinux = True
if l_match := magic_comment_re.match(line):
for part in l_match.group("magic").split(","):
if skip_changelog_re.match(part):
@@ -23,4 +28,4 @@ def parse_magic_comments(message: str) -> MagicCommentResult:
if br_match := bump_release_re.match(part):
bump_release = max(bump_release, int(br_match.group("bump_value")))
- return MagicCommentResult(skip_changelog=skip_changelog, bump_release=bump_release)
+ return MagicCommentResult(skip_changelog=skip_changelog, bump_release=bump_release, is_almalinux=is_almalinux)
diff --git a/rpmautospec/pkg_history.py b/rpmautospec/pkg_history.py
index 9dabf10..bfa1f6b 100644
--- a/rpmautospec/pkg_history.py
+++ b/rpmautospec/pkg_history.py
@@ -313,13 +313,55 @@ class PkgHistoryProcessor:
)
release_number = max(parent_release_numbers, default=0)
- if self.specfile.name in commit.tree:
+ if (
+ self.specfile.name in commit.tree
+ and (
+ not commit_result["magic-comment-result"].is_almalinux
+ )
+ ):
release_number += 1
release_number = max(release_number, commit_result["magic-comment-result"].bump_release)
commit_result["release-number"] = release_number
+ is_almalinux_commit = (
+ commit_result["magic-comment-result"].is_almalinux
+ )
+
+ if is_almalinux_commit:
+ log.debug("\tHas AlmaLinux changes")
+
+ parent_almalinux_release_numbers = tuple(
+ (
+ res.get("almalinux-release-number", 0)
+ if res and (
+ epoch_version is None or res["epoch-version"] is None or epoch_version == res["epoch-version"]
+ )
+ else 0
+ )
+ for res in parent_results
+ )
+ almalinux_release_number = max(parent_almalinux_release_numbers, default=0)
+
+ if commit_result["magic-comment-result"].is_almalinux:
+ almalinux_release_number += 1
+
+ if (
+ release_number > max(parent_release_numbers, default=0)
+ ):
+ almalinux_release_number = 1
+ elif epoch_version != commit_verflags.get("epoch-version"):
+ almalinux_release_number = 1
+
+ commit_result["almalinux-release-number"] = almalinux_release_number
+ almalinux_release_number_with_base = almalinux_release_number + base - 1
+ commit_result["almalinux-release-complete"] = f"alma.{almalinux_release_number_with_base}"
+ log.debug("\talmalinux_release_number: %s", almalinux_release_number)
+ else:
+ commit_result["almalinux-release-number"] = 0
+ commit_result["almalinux-release-complete"] = ""
+
log.debug("\trelease_number: %s", release_number)
prerel_str = "0." if prerelease else ""
@@ -384,6 +426,10 @@ class PkgHistoryProcessor:
# care. If it didn't change, we don't know how to continue and need to flag that.
merge_unresolvable = not changelog_changed
+ if merge_unresolvable and commit.message.lower().startswith("almalinux changes:"):
+ merge_unresolvable = False
+ parent_to_follow = commit.parents[1]
+
our_child_must_continue = (
not (changelog_changed and changelog_blob or merge_unresolvable) and child_must_continue
)
@@ -410,6 +456,7 @@ class PkgHistoryProcessor:
"commitlog": commit.message,
"epoch-version": commit_result["epoch-version"],
"release-complete": commit_result["release-complete"],
+ "almalinux-release-complete": commit_result["almalinux-release-complete"]
}
)
@@ -452,6 +499,9 @@ class PkgHistoryProcessor:
log.debug("\tskip_for_changelog: %s", skip_for_changelog)
+ if skip_for_changelog and commit.message.lower().startswith("almalinux changes:"):
+ skip_for_changelog = False
+
changelog_entry["skip"] = skip_for_changelog
if not skip_for_changelog:
diff --git a/rpmautospec/subcommands/process_distgit.py b/rpmautospec/subcommands/process_distgit.py
index 25a03f4..760e4aa 100644
--- a/rpmautospec/subcommands/process_distgit.py
+++ b/rpmautospec/subcommands/process_distgit.py
@@ -24,7 +24,7 @@ AUTORELEASE_TEMPLATE = """
release_number = {autorelease_number:d};
base_release_number = tonumber(rpm.expand("%{{?-b*}}%{{!?-b:1}}"));
print(release_number + base_release_number - 1);
-}}%{{?-e:.%{{-e*}}}}%{{?-s:.%{{-s*}}}}%{{!?-n:%{{?dist}}}}""" # noqa: E501
+}}%{{?-e:.%{{-e*}}}}%{{?-s:.%{{-s*}}}}%{{!?-n:%{{?dist}}}}{almalinux_suffix}""" # noqa: E501
def register_subcommand(subparsers):
@@ -112,9 +112,14 @@ def process_distgit(
# Process the spec file into a temporary file...
used_features = []
+ almalinux_suffix = ""
+ if result.get("almalinux-release-complete", False):
+ almalinux_suffix = f'.{result["almalinux-release-complete"]}'
+
if features.has_autorelease:
autorelease_blurb_if_needed = AUTORELEASE_TEMPLATE.format(
- autorelease_number=autorelease_number
+ autorelease_number=autorelease_number,
+ almalinux_suffix=almalinux_suffix
)
used_features.append("autorelease")
else:
diff --git a/tests/rpmautospec/subcommands/test_process_distgit.py b/tests/rpmautospec/subcommands/test_process_distgit.py
index d57d2df..7a9e972 100644
--- a/tests/rpmautospec/subcommands/test_process_distgit.py
+++ b/tests/rpmautospec/subcommands/test_process_distgit.py
@@ -132,7 +132,8 @@ def fuzz_spec_file(
"w", encoding="utf-8"
) as new:
if is_processed:
- autorelease_blurb = process_distgit.AUTORELEASE_TEMPLATE.format(autorelease_number=15)
+ almalinux_suffix = ""
+ autorelease_blurb = process_distgit.AUTORELEASE_TEMPLATE.format(autorelease_number=15, almalinux_suffix=almalinux_suffix)
print(
process_distgit.RPMAUTOSPEC_TEMPLATE.format(
version=__version__,
diff --git a/tests/rpmautospec/test_magic_comments.py b/tests/rpmautospec/test_magic_comments.py
index 2801cd7..3938dcd 100644
--- a/tests/rpmautospec/test_magic_comments.py
+++ b/tests/rpmautospec/test_magic_comments.py
@@ -26,6 +26,7 @@ def _read_commitlog_magic_comments_testdata():
MagicCommentResult(
skip_changelog=d.get("skip_changelog", False),
bump_release=d.get("bump_release", 0),
+ is_almalinux=d.get("is_almalinux", False),
),
id=f"commit-{variant}",
)
--
2.39.5 (Apple Git-154)