summaryrefslogtreecommitdiff
path: root/buildstream
diff options
context:
space:
mode:
Diffstat (limited to 'buildstream')
-rw-r--r--buildstream/_loader/loader.py13
-rw-r--r--buildstream/plugins/elements/junction.py1
2 files changed, 14 insertions, 0 deletions
diff --git a/buildstream/_loader/loader.py b/buildstream/_loader/loader.py
index ec929eadb..dc15109c8 100644
--- a/buildstream/_loader/loader.py
+++ b/buildstream/_loader/loader.py
@@ -217,6 +217,13 @@ class Loader():
if ticker:
ticker(filename)
+ if self.project.junction and filename in self.project.junction.replacements:
+ replacement = _yaml.node_get(self.project.junction.replacements, str, filename)
+ elt = self._parent._load_file(replacement,
+ rewritable, ticker, fetch_subprojects, provenance=provenance)
+ self._elements[filename] = elt
+ return elt
+
# Load the data and process any conditional statements therein
fullpath = os.path.join(self._basedir, filename)
try:
@@ -311,6 +318,8 @@ class Loader():
validated = {}
element = self._elements[element_name]
+ if getattr(element, '_loader', self) != self:
+ return element._loader._check_circular_deps(element.name, check_elements, validated)
# element name must be unique across projects
# to be usable as key for the check_elements and validated dicts
@@ -353,6 +362,8 @@ class Loader():
visited = {}
element = self._elements[element_name]
+ if getattr(element, '_loader', self) != self:
+ return element._loader._sort_dependencies(element.name, visited)
# element name must be unique across projects
# to be usable as key for the visited dict
@@ -424,6 +435,8 @@ class Loader():
def _collect_element(self, element_name):
element = self._elements[element_name]
+ if element._loader != self:
+ return element._loader._collect_element(element.name)
# Return the already built one, if we already built it
meta_element = self._meta_elements.get(element_name)
diff --git a/buildstream/plugins/elements/junction.py b/buildstream/plugins/elements/junction.py
index d2c62fe48..f87ac2273 100644
--- a/buildstream/plugins/elements/junction.py
+++ b/buildstream/plugins/elements/junction.py
@@ -142,6 +142,7 @@ class JunctionElement(Element):
def configure(self, node):
self.path = self.node_get_member(node, str, 'path', default='')
self.options = self.node_get_member(node, Mapping, 'options', default={})
+ self.replacements = self.node_get_member(node, Mapping, 'replacements', default={})
def preflight(self):
pass