This is an automated email from the ASF dual-hosted git repository. juergbi pushed a commit to branch juerg/junction-aliases in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit 61f11798e37d6812ff4336c0971545b134c9abc1 Author: Abderrahim Kitouni <[email protected]> AuthorDate: Thu Mar 28 14:29:35 2024 +0100 Add automatic mapping of subproject aliases --- src/buildstream/_project.py | 6 +++--- src/buildstream/plugins/elements/junction.py | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/buildstream/_project.py b/src/buildstream/_project.py index 5bdcdd383..db699c9ea 100644 --- a/src/buildstream/_project.py +++ b/src/buildstream/_project.py @@ -245,7 +245,7 @@ class Project: if alias_url: if self.junction: parent_project = self.junction._get_project() - parent_alias = self.junction.aliases.get_str(url_alias, default=None) + parent_alias = self.junction.get_parent_alias(url_alias) if parent_alias: # Delegate translation to parent project return parent_project.translate_url( @@ -418,7 +418,7 @@ class Project: if self.junction: parent_project = self.junction._get_project() - parent_alias = self.junction.aliases.get_str(alias, default=None) + parent_alias = self.junction.get_parent_alias(alias) if parent_alias: if parent_project.alias_exists(parent_alias, source=source, first_pass=first_pass): return True @@ -465,7 +465,7 @@ class Project: if self.junction: parent_project = self.junction._get_project() - parent_alias = self.junction.aliases.get_str(alias, default=None) + parent_alias = self.junction.get_parent_alias(alias) if parent_alias: # Delegate translation to parent project return parent_project.get_alias_uris(parent_alias, first_pass=first_pass, tracking=tracking) diff --git a/src/buildstream/plugins/elements/junction.py b/src/buildstream/plugins/elements/junction.py index 5d457143f..7c77abfc7 100644 --- a/src/buildstream/plugins/elements/junction.py +++ b/src/buildstream/plugins/elements/junction.py @@ -55,6 +55,9 @@ Overview aliases: subproject-alias: local-alias + # A default mapping can be set (defaults to none) + map-aliases: identity + With a junction element in place, local elements can depend on elements in the other BuildStream project using :ref:`element paths <format_element_names>`. For example, if you have a ``toolchain.bst`` junction element referring to @@ -329,6 +332,12 @@ in the same build pipeline, please refer to the from buildstream import Element, ElementError from buildstream._pipeline import PipelineError +from buildstream.types import FastEnum + + +class _AliasMappingStrategy(FastEnum): + NONE = "none" + IDENTITY = "identity" # Element implementation for the 'junction' kind. @@ -343,7 +352,7 @@ class JunctionElement(Element): def configure(self, node): - node.validate_keys(["path", "options", "overrides", "aliases"]) + node.validate_keys(["path", "options", "overrides", "aliases", "map-aliases"]) self.path = node.get_str("path", default="") self.options = node.get_mapping("options", default={}) @@ -368,6 +377,13 @@ class JunctionElement(Element): # Map from subproject alias to local alias self.aliases = node.get_mapping("aliases", default={}) + self.map_aliases = node.get_enum("map-aliases", _AliasMappingStrategy, default=_AliasMappingStrategy.NONE) + + def get_parent_alias(self, alias): + parent_alias = self.aliases.get_str(alias, default=None) + if parent_alias is None and self.map_aliases == _AliasMappingStrategy.IDENTITY: + parent_alias = alias + return parent_alias def preflight(self): pass
