From faca763e8b2bc99a5bdcc72f7afd9a46cd55b43c Mon Sep 17 00:00:00 2001 From: Yuriy Kohut Date: Tue, 30 Jun 2026 21:37:52 +0300 Subject: [PATCH] Fix CyclingDependenciesError for target_content_resolver by routing vendor mappings through a dedicated VendorReposMapping model The package version 0.24.0-2.elevate.4 --- SOURCES/leapp-repository-0.24.0-elevate.patch | 74 ++++++++++++------- SPECS/leapp-repository.spec | 5 +- 2 files changed, 53 insertions(+), 26 deletions(-) diff --git a/SOURCES/leapp-repository-0.24.0-elevate.patch b/SOURCES/leapp-repository-0.24.0-elevate.patch index b3b2f04..795502a 100644 --- a/SOURCES/leapp-repository-0.24.0-elevate.patch +++ b/SOURCES/leapp-repository-0.24.0-elevate.patch @@ -10081,10 +10081,10 @@ index d36900bd..85a3ff3d 100644 + assert fact.enforcing_via_any_cmdline is expected diff --git a/repos/system_upgrade/common/actors/targetcontentresolver/actor.py b/repos/system_upgrade/common/actors/targetcontentresolver/actor.py new file mode 100644 -index 00000000..48557817 +index 00000000..ade95104 --- /dev/null +++ b/repos/system_upgrade/common/actors/targetcontentresolver/actor.py -@@ -0,0 +1,70 @@ +@@ -0,0 +1,71 @@ +from leapp.actors import Actor +from leapp.libraries.actor.targetcontentresolver import process +from leapp.models import ( @@ -10105,7 +10105,8 @@ index 00000000..48557817 + SkippedRepositories, + TargetRepositories, + UsedRepositories, -+ VendorCustomTargetRepositoryList ++ VendorCustomTargetRepositoryList, ++ VendorReposMapping +) +from leapp.reporting import Report +from leapp.tags import FactsPhaseTag, IPUWorkflowTag @@ -10136,11 +10137,11 @@ index 00000000..48557817 + RHUIInfo, + RepositoriesBlacklisted, + RepositoriesFacts, -+ RepositoriesMapping, + RepositoriesSetupTasks, + RpmTransactionTasks, + UsedRepositories, + VendorCustomTargetRepositoryList, ++ VendorReposMapping, + ) + produces = ( + ConsumedDataAsset, @@ -11008,10 +11009,10 @@ index 00000000..c77a1f13 + + return full_blocklist diff --git a/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos.py b/repos/system_upgrade/common/actors/targetcontentresolver/libraries/setuptargetrepos.py -similarity index 58% +similarity index 57% rename from repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos.py rename to repos/system_upgrade/common/actors/targetcontentresolver/libraries/setuptargetrepos.py -index df17a217..9db07c3b 100644 +index df17a217..acd7b0bc 100644 --- a/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos.py +++ b/repos/system_upgrade/common/actors/targetcontentresolver/libraries/setuptargetrepos.py @@ -1,4 +1,4 @@ @@ -11030,12 +11031,12 @@ index df17a217..9db07c3b 100644 - RepositoriesSetupTasks, RHELTargetRepository, - RHUIInfo, -+ RepositoriesMapping, SkippedRepositories, TargetRepositories, - UsedRepositories + UsedRepositories, -+ VendorCustomTargetRepositoryList ++ VendorCustomTargetRepositoryList, ++ VendorReposMapping ) from leapp.utils.deprecation import suppress_deprecation @@ -11142,7 +11143,7 @@ index df17a217..9db07c3b 100644 - # Setup repomap handler - repo_mappig_msg = next(api.consume(RepositoriesMapping), RepositoriesMapping()) + # Remember that we can't just grab one message, each vendor can have its own mapping. -+ repo_mapping_list = list(api.consume(RepositoriesMapping)) ++ repo_mapping_list = list(api.consume(VendorReposMapping)) - rhui_info = next(api.consume(RHUIInfo), None) - cloud_provider = rhui_info.provider if rhui_info else '' @@ -11238,10 +11239,10 @@ index df17a217..9db07c3b 100644 pkgs = set() diff --git a/repos/system_upgrade/common/actors/targetcontentresolver/libraries/targetcontentresolver.py b/repos/system_upgrade/common/actors/targetcontentresolver/libraries/targetcontentresolver.py new file mode 100644 -index 00000000..77d500a9 +index 00000000..b5346350 --- /dev/null +++ b/repos/system_upgrade/common/actors/targetcontentresolver/libraries/targetcontentresolver.py -@@ -0,0 +1,195 @@ +@@ -0,0 +1,197 @@ +from collections import namedtuple + +from leapp.exceptions import StopActorExecutionError @@ -11257,9 +11258,9 @@ index 00000000..77d500a9 + Module, + RepositoriesBlacklisted, + RepositoriesFacts, -+ RepositoriesMapping, + RepositoriesSetupTasks, -+ RHUIInfo ++ RHUIInfo, ++ VendorReposMapping +) +from leapp.utils.deprecation import suppress_deprecation + @@ -11364,9 +11365,11 @@ index 00000000..77d500a9 + repomap_msg = load_repositories_mapping() + + # ELevate: vendors can provide their own repository mappings (produced by -+ # the vendorrepositoriesmapping actor). Combine them with the main mapping -+ # so that the handler operates on vendor-aware mapping data. -+ vendor_map_msgs = list(api.consume(RepositoriesMapping)) ++ # the vendorrepositoriesmapping actor as VendorReposMapping — a separate ++ # type, so this actor can consume them without a produce/consume cycle on ++ # RepositoriesMapping). Combine them with the main mapping so that the ++ # handler operates on vendor-aware mapping data. ++ vendor_map_msgs = list(api.consume(VendorReposMapping)) + if vendor_map_msgs: + repomap_msg = combine_repomap_messages([repomap_msg] + vendor_map_msgs) + @@ -13015,14 +13018,14 @@ index 00000000..dbf86974 + ) diff --git a/repos/system_upgrade/common/actors/vendorrepositoriesmapping/actor.py b/repos/system_upgrade/common/actors/vendorrepositoriesmapping/actor.py new file mode 100644 -index 00000000..13256476 +index 00000000..a86fa12e --- /dev/null +++ b/repos/system_upgrade/common/actors/vendorrepositoriesmapping/actor.py @@ -0,0 +1,19 @@ +from leapp.actors import Actor +# from leapp.libraries.common.repomaputils import scan_vendor_repomaps, VENDOR_REPOMAP_DIR +from leapp.libraries.actor.vendorrepositoriesmapping import scan_vendor_repomaps -+from leapp.models import VendorSourceRepos, RepositoriesMapping ++from leapp.models import VendorSourceRepos, VendorReposMapping +from leapp.tags import FactsPhaseTag, IPUWorkflowTag + + @@ -13033,14 +13036,14 @@ index 00000000..13256476 + + name = "vendor_repositories_mapping" + consumes = () -+ produces = (RepositoriesMapping, VendorSourceRepos,) ++ produces = (VendorReposMapping, VendorSourceRepos,) + tags = (IPUWorkflowTag, FactsPhaseTag.Before) + + def process(self): + scan_vendor_repomaps() diff --git a/repos/system_upgrade/common/actors/vendorrepositoriesmapping/libraries/vendorrepositoriesmapping.py b/repos/system_upgrade/common/actors/vendorrepositoriesmapping/libraries/vendorrepositoriesmapping.py new file mode 100644 -index 00000000..6a41d4e5 +index 00000000..a368e1a7 --- /dev/null +++ b/repos/system_upgrade/common/actors/vendorrepositoriesmapping/libraries/vendorrepositoriesmapping.py @@ -0,0 +1,92 @@ @@ -13051,7 +13054,7 @@ index 00000000..6a41d4e5 +from leapp.libraries.common.config.version import get_target_major_version, get_source_major_version +from leapp.libraries.common.repomaputils import RepoMapData +from leapp.libraries.stdlib import api -+from leapp.models import VendorSourceRepos, RepositoriesMapping ++from leapp.models import VendorSourceRepos, VendorReposMapping +from leapp.models.fields import ModelViolationError +from leapp.exceptions import StopActorExecutionError + @@ -13093,7 +13096,7 @@ index 00000000..6a41d4e5 + mapping = repomap_data.get_mappings(source_major, target_major) + valid_major_versions = [source_major, target_major] + -+ api.produce(RepositoriesMapping( ++ api.produce(VendorReposMapping( + mapping=mapping, + repositories=repomap_data.get_repositories(valid_major_versions), + vendor=vendor_name @@ -13116,7 +13119,7 @@ index 00000000..6a41d4e5 + +def scan_vendor_repomaps(read_repofile_func=read_repofile): + """ -+ Scan the repository mapping file and produce RepositoriesMapping msg. ++ Scan the repository mapping file and produce VendorReposMapping msg. + + See the description of the actor for more details. + """ @@ -17797,14 +17800,35 @@ index 00000000..95fbd2dc + """ + topic = SystemFactsTopic diff --git a/repos/system_upgrade/common/models/repositoriesmap.py b/repos/system_upgrade/common/models/repositoriesmap.py -index 842cd807..fc740606 100644 +index 842cd807..17bd6bc9 100644 --- a/repos/system_upgrade/common/models/repositoriesmap.py +++ b/repos/system_upgrade/common/models/repositoriesmap.py -@@ -96,3 +96,4 @@ class RepositoriesMapping(Model): +@@ -96,3 +96,25 @@ class RepositoriesMapping(Model): mapping = fields.List(fields.Model(RepoMapEntry), default=[]) repositories = fields.List(fields.Model(PESIDRepositoryEntry), default=[]) + vendor = fields.Nullable(fields.String()) ++ ++ ++class VendorReposMapping(Model): ++ """ ++ Repository mapping contributed by a vendor (ELevate). ++ ++ Same shape as RepositoriesMapping, but a distinct message type. The ++ target_content_resolver actor *produces* the main RepositoriesMapping and ++ therefore must not also *consume* it (that is a dependency cycle); vendor ++ mappings are produced by the vendorrepositoriesmapping actor under this ++ separate type and consumed by target_content_resolver, then combined with ++ the main mapping via combine_repomap_messages. ++ ++ Warning: This model is not covered by the deprecation process and can be ++ changed or removed any time. ++ """ ++ topic = TransactionTopic ++ ++ mapping = fields.List(fields.Model(RepoMapEntry), default=[]) ++ repositories = fields.List(fields.Model(PESIDRepositoryEntry), default=[]) ++ vendor = fields.Nullable(fields.String()) diff --git a/repos/system_upgrade/common/models/repositoriessetuptasks.py b/repos/system_upgrade/common/models/repositoriessetuptasks.py index fb267ad0..88056d97 100644 --- a/repos/system_upgrade/common/models/repositoriessetuptasks.py diff --git a/SPECS/leapp-repository.spec b/SPECS/leapp-repository.spec index e502ee6..0e51113 100644 --- a/SPECS/leapp-repository.spec +++ b/SPECS/leapp-repository.spec @@ -53,7 +53,7 @@ py2_byte_compile "%1" "%2"} Epoch: 1 Name: leapp-repository Version: 0.24.0 -Release: 2%{?dist}.elevate.3 +Release: 2%{?dist}.elevate.4 Summary: Repositories for leapp License: ASL 2.0 @@ -438,6 +438,9 @@ fi %changelog +* Tue Jun 30 2026 Yuriy Kohut - 0.24.0-2.elevate.4 +- Fix CyclingDependenciesError for target_content_resolver by routing vendor mappings through a dedicated VendorReposMapping model + * Tue Jun 30 2026 Yuriy Kohut - 0.24.0-2.elevate.3 - ELevate vendors support for upstream 0.24.0-2 version (f7ccf5aefdd87856c4dda80c2c410d5cb34d0c1d)