This is an automated email from the ASF dual-hosted git repository. akitouni pushed a commit to branch abderrahim/junction-aliases in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit f3578aa8882df8ef022d47acfe0ec282a0f7102c 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 | 12 +++++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/buildstream/_project.py b/src/buildstream/_project.py index 006a01fc7..3b64cc893 100644 --- a/src/buildstream/_project.py +++ b/src/buildstream/_project.py @@ -223,7 +223,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( @@ -391,7 +391,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: return parent_project.alias_exists(parent_alias, first_pass=first_pass) elif parent_project.disallow_subproject_uris: @@ -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: # 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..cd8b13c7e 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 @@ -343,7 +346,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 +371,13 @@ class JunctionElement(Element): # Map from subproject alias to local alias self.aliases = node.get_mapping("aliases", default={}) + self.map_aliases = node.get_bool("map-aliases", default=False) + + def get_parent_alias(self, alias): + parent_alias = self.aliases.get_str(alias, default=None) + if parent_alias is None and self.map_aliases: + parent_alias = alias + return parent_alias def preflight(self): pass
