summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--buildstream/_loader.py13
-rw-r--r--buildstream/plugins/elements/junction.py4
2 files changed, 16 insertions, 1 deletions
diff --git a/buildstream/_loader.py b/buildstream/_loader.py
index 2cd143f49..2ced3abfa 100644
--- a/buildstream/_loader.py
+++ b/buildstream/_loader.py
@@ -362,7 +362,18 @@ class Loader():
source._stage(basedir)
- project = Project(basedir, self.context, junction=element)
+ project_dir = os.path.join(basedir, element.path)
+
+ try:
+ project = Project(project_dir, self.context, junction=element)
+ except LoadError as e:
+ if e.reason == LoadErrorReason.MISSING_FILE:
+ raise LoadError(reason=e.reason,
+ message="Could not find the project.conf file for {}. "
+ "Expecting a project at path '{}' within {}".
+ format(element, element.path or '.', source)) from e
+ else:
+ raise
loader = Loader(project, [], parent=self, tempdir=basedir)
diff --git a/buildstream/plugins/elements/junction.py b/buildstream/plugins/elements/junction.py
index c0fd67d17..9a08edcc3 100644
--- a/buildstream/plugins/elements/junction.py
+++ b/buildstream/plugins/elements/junction.py
@@ -45,6 +45,9 @@ Overview
machine_arch: "%{machine_arch}"
debug: True
+ # Optionally look in a subpath of the source repository for the project
+ path: projects/hello
+
.. note::
Junction elements may not specify any dependencies as they are simply
@@ -115,6 +118,7 @@ from buildstream._pipeline import PipelineError
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={})
def preflight(self):