diff --git a/config.yaml b/config.yaml index ff6e8d2..e03a327 100644 --- a/config.yaml +++ b/config.yaml @@ -6,7 +6,7 @@ actions: count: 1 - modify_release: - - suffix: ".alma.1" + - suffix: ".alma.3" enabled: true - changelog_entry: diff --git a/files/0001-Added-AlmaLinux-change-identifier-0.6.5.patch b/files/0001-Added-AlmaLinux-change-identifier-0.6.5.patch index f0561ca..f7bb5cf 100644 --- a/files/0001-Added-AlmaLinux-change-identifier-0.6.5.patch +++ b/files/0001-Added-AlmaLinux-change-identifier-0.6.5.patch @@ -1,4 +1,4 @@ -From 40925bdbca94349ae42108e3d9ac4fb8c1513770 Mon Sep 17 00:00:00 2001 + From 332637e14a68883cfbe61a39718d56df5daa991a Mon Sep 17 00:00:00 2001 From: eabdullin Date: Fri, 6 Dec 2024 09:44:47 +0300 Subject: [PATCH] Added AlmaLinux change identifier @@ -11,13 +11,13 @@ Therefore, the ability to identify AlmaLinux-specific changes was added, using t 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 | 108 +++++++++++++++++- - rpmautospec/subcommands/process_distgit.py | 9 +- - .../subcommands/test_process_distgit.py | 3 +- - tests/rpmautospec/test_magic_comments.py | 1 + - 6 files changed, 124 insertions(+), 6 deletions(-) + 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 @@ -68,31 +68,18 @@ index d56086e..4c1c06c 100644 - 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..e0a80d3 100644 +index 9dabf10..bfa1f6b 100644 --- a/rpmautospec/pkg_history.py +++ b/rpmautospec/pkg_history.py -@@ -20,6 +20,7 @@ except ImportError: # pragma: no cover - from rpmautospec_core import AUTORELEASE_MACRO - - import rpm -+from functools import cmp_to_key - - from .changelog import ChangelogEntry - from .magic_comments import parse_magic_comments -@@ -313,13 +314,61 @@ class PkgHistoryProcessor: +@@ -313,13 +313,55 @@ class PkgHistoryProcessor: ) release_number = max(parent_release_numbers, default=0) - if self.specfile.name in commit.tree: -+ is_parent_almalinux = any( -+ res.get("almalinux-release-number") for res in parent_results if res -+ ) -+ + if ( + self.specfile.name in commit.tree + and ( -+ not commit_result["magic-comment-result"].is_almalinux and -+ not is_parent_almalinux ++ not commit_result["magic-comment-result"].is_almalinux + ) + ): release_number += 1 @@ -102,11 +89,11 @@ index 9dabf10..e0a80d3 100644 commit_result["release-number"] = release_number + is_almalinux_commit = ( -+ commit_result["magic-comment-result"].is_almalinux or is_parent_almalinux ++ commit_result["magic-comment-result"].is_almalinux + ) + + if is_almalinux_commit: -+ log.debug("\tHas AlmaLinux changes or parent Almalinux release") ++ log.debug("\tHas AlmaLinux changes") + + parent_almalinux_release_numbers = tuple( + ( @@ -124,8 +111,7 @@ index 9dabf10..e0a80d3 100644 + almalinux_release_number += 1 + + if ( -+ release_number > max(parent_release_numbers, default=0) or -+ (is_parent_almalinux and len(commit.parents) > 1) ++ release_number > max(parent_release_numbers, default=0) + ): + almalinux_release_number = 1 + elif epoch_version != commit_verflags.get("epoch-version"): @@ -142,7 +128,18 @@ index 9dabf10..e0a80d3 100644 log.debug("\trelease_number: %s", release_number) prerel_str = "0." if prerelease else "" -@@ -410,6 +459,7 @@ class PkgHistoryProcessor: +@@ -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"], @@ -150,82 +147,16 @@ index 9dabf10..e0a80d3 100644 } ) -@@ -442,13 +492,19 @@ class PkgHistoryProcessor: - else: - log.debug("\tno parent to follow") - previous_changelog = () -+ second_parent = None -+ is_almalinux = False - 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", ()) -+ is_almalinux = any(entry['almalinux-release-complete'] for entry in second_parent) -+ if second_parent is not None and is_almalinux: -+ previous_changelog = self._add_missing_changes(previous_changelog, second_parent) +@@ -452,6 +499,9 @@ class PkgHistoryProcessor: log.debug("\tskip_for_changelog: %s", skip_for_changelog) -@@ -461,6 +517,54 @@ class PkgHistoryProcessor: ++ if skip_for_changelog and commit.message.lower().startswith("almalinux changes:"): ++ skip_for_changelog = False ++ + changelog_entry["skip"] = skip_for_changelog - 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: -+ evra = ( -+ entry['epoch-version'].split(':', 1)[0] or "0", -+ entry['epoch-version'].split(':', 1)[-1] or "0", -+ entry['release-complete'] + entry['almalinux-release-complete'] -+ ) -+ new_changelog[evra] = entry -+ added_entries.add(key) -+ -+ def compare_evra(a, b): -+ return rpm.labelCompare(a, b) -+ -+ 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 -+ evra = ( -+ entry['epoch-version'].split(':', 1)[0] or "0", -+ entry['epoch-version'].split(':', 1)[-1] or "0", -+ entry['release-complete'] + entry['almalinux-release-complete'] -+ ) -+ new_changelog[evra] = entry -+ added_entries.add(key) -+ -+ add_unique_entries(changelog2, new_changelog, added_entries) -+ -+ add_unique_entries(changelog1, new_changelog, added_entries) -+ -+ sorted_changelog = sorted( -+ new_changelog.items(), -+ key=cmp_to_key(lambda x, y: compare_evra(x[0], y[0])), -+ reverse=True -+ ) -+ -+ return tuple(entry for _, entry in sorted_changelog) -+ - @staticmethod - def _merge_info(f1: dict[str, Any], f2: dict[str, Any]) -> dict[str, Any]: - """Merge dicts containing info of previously run visitors.""" + 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 @@ -283,3 +214,4 @@ index 2801cd7..3938dcd 100644 ) -- 2.39.5 (Apple Git-154) +