diff --git a/0001-Added-AlmaLinux-change-identifier-0.6.5.patch b/0001-Added-AlmaLinux-change-identifier-0.6.5.patch deleted file mode 100644 index 2cfaaeb..0000000 --- a/0001-Added-AlmaLinux-change-identifier-0.6.5.patch +++ /dev/null @@ -1,228 +0,0 @@ -From d128484a6502f76a2dc3f70551efbc880583c075 Mon Sep 17 00:00:00 2001 -From: eabdullin -Date: Wed, 30 Oct 2024 12:38:20 +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 package’s 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 | 85 +++++++++++++++++++++- - rpmautospec/subcommands/process_distgit.py | 9 ++- - 4 files changed, 98 insertions(+), 5 deletions(-) - -diff --git a/rpmautospec/changelog.py b/rpmautospec/changelog.py -index cb3e74f..b123bbe 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 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.*)\]\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\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..3524383 100644 ---- a/rpmautospec/pkg_history.py -+++ b/rpmautospec/pkg_history.py -@@ -313,13 +313,61 @@ 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 -+ and len(commit.parents) == 1 -+ ) -+ ): - release_number += 1 - - release_number = max(release_number, commit_result["magic-comment-result"].bump_release) - - commit_result["release-number"] = release_number - -+ is_parent_almalinux = any( -+ res.get("almalinux-release-number") for res in parent_results if res -+ ) -+ -+ is_almalinux_commit = ( -+ commit_result["magic-comment-result"].is_almalinux or is_parent_almalinux -+ ) -+ -+ if is_almalinux_commit: -+ log.debug("\tHas AlmaLinux changes or parent Almalinux release") -+ -+ 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) or -+ (is_parent_almalinux and len(commit.parents) > 1) -+ ): -+ 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 "" -@@ -410,6 +458,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"] - } - ) - -@@ -442,13 +491,17 @@ class PkgHistoryProcessor: - else: - log.debug("\tno parent to follow") - previous_changelog = () -+ second_parent = None - for candidate in parent_results: - if not candidate: - continue - if candidate["commit-id"] == parent_to_follow.id: - previous_changelog = candidate.get("changelog", ()) - skip_for_changelog = True -- break -+ else: -+ second_parent = candidate.get("changelog", ()) -+ if second_parent is not None: -+ previous_changelog = self._add_missing_changes(previous_changelog, second_parent) - - log.debug("\tskip_for_changelog: %s", skip_for_changelog) - -@@ -461,6 +514,34 @@ class PkgHistoryProcessor: - - yield commit_result - -+ @staticmethod -+ def _add_missing_changes(changelog1, changelog2): -+ def add_unique_entries(entries, new_changelog, added_entries): -+ for entry in entries: -+ key = (entry['epoch-version'], entry['release-complete'], entry['almalinux-release-complete']) -+ if key not in added_entries: -+ new_changelog.append(entry) -+ added_entries.add(key) -+ -+ new_changelog = [] -+ added_entries = set() -+ -+ max_release2 = changelog2[0]['release-complete'] -+ max_version2 = changelog2[0]['epoch-version'] -+ -+ for entry in changelog1: -+ key = (entry['epoch-version'], entry['release-complete'], entry['almalinux-release-complete']) -+ if (entry['epoch-version'], entry['release-complete']) == (max_version2, max_release2): -+ break -+ new_changelog.append(entry) -+ added_entries.add(key) -+ -+ add_unique_entries(changelog2, new_changelog, added_entries) -+ -+ add_unique_entries(changelog1, new_changelog, added_entries) -+ -+ return tuple(new_changelog) -+ - @staticmethod - def _merge_info(f1: dict[str, Any], f2: dict[str, Any]) -> dict[str, Any]: - """Merge dicts containing info of previously run visitors.""" -diff --git a/rpmautospec/subcommands/process_distgit.py b/rpmautospec/subcommands/process_distgit.py -index 25a03f4..55b0fd1 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["almalinux-release-complete"]: -+ 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: --- -2.39.5 (Apple Git-154) - diff --git a/SPECS/python3.11-rpmautospec.spec b/SPECS/python3.11-rpmautospec.spec index 37bc6b5..8726e74 100644 --- a/SPECS/python3.11-rpmautospec.spec +++ b/SPECS/python3.11-rpmautospec.spec @@ -4,7 +4,7 @@ Name: python%{python3_pkgversion}-%{srcname} Version: 0.6.5 -Release: %autorelease +Release: 0.1%{?dist} Summary: Package and CLI tool to generate release fields and changelogs License: MIT URL: https://github.com/fedora-infra/%{srcname} @@ -62,6 +62,3 @@ CLI tool for generating RPM releases and changelogs %files -n %{srcname} %{_bindir}/rpmautospec - -%changelog -%autochangelog