From e25742859f412758e0cf13f85d6a40d98933f377 Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Mon, 22 Jan 2018 12:48:39 +0000 Subject: Add a 'path' config option to junction elements This makes it possible to depend on a project which is in a subdirectory of a Git repository. The error message given when the expected project.conf file is not found has also been improved. Previously the error would look like this: Error loading pipeline: Could not find file at /home/sam/.cache/buildstream/build/freedesktop-sdk-junction-rvmn17s2/project.conf This is giving the path of an internal temporary directory where the foreign project's source is checked out. The new error gives more information: Error loading pipeline: Could not find the project.conf file for junction element at freedesktop-sdk-junction.bst [line 1 column 0]. Expecting a project at path '.' within git source at freedesktop-sdk-junction.bst [line 4 column 2] --- buildstream/_loader.py | 13 ++++++++++++- buildstream/plugins/elements/junction.py | 4 ++++ 2 files changed, 16 insertions(+), 1 deletion(-) 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): -- cgit v1.2.1