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

Reply via email to