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

Reply via email to