summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Maat <tristan.maat@codethink.co.uk>2017-11-07 18:04:13 +0000
committerTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2017-11-18 18:56:53 +0900
commit8e3bcb5517896480802360abf22d6d464c0b5179 (patch)
treef8d11dde5f28ade06ac531ccc071f5a5d1f9eef4
parent4c73b85dbf6e84c710dc55bc756b02c7952ba764 (diff)
downloadbuildstream-8e3bcb5517896480802360abf22d6d464c0b5179.tar.gz
Load excepted elements as part of the pipeline
Causes --except specified elements to be loaded separately and the intersections of the except elements and the loaded pipeline to be calculated. This fixes issue #131
-rw-r--r--buildstream/_frontend/main.py21
-rw-r--r--buildstream/_pipeline.py12
2 files changed, 20 insertions, 13 deletions
diff --git a/buildstream/_frontend/main.py b/buildstream/_frontend/main.py
index 3fc1e8195..63051af66 100644
--- a/buildstream/_frontend/main.py
+++ b/buildstream/_frontend/main.py
@@ -242,9 +242,10 @@ def fetch(app, elements, deps, track, except_):
plan: Only dependencies required for the build plan
all: All dependencies
"""
- app.initialize(elements, rewritable=track, inconsistent=track)
+ app.initialize(elements, except_=except_,
+ rewritable=track, inconsistent=track)
try:
- dependencies = app.pipeline.deps_elements(deps, except_)
+ dependencies = app.pipeline.deps_elements(deps)
app.print_heading(deps=dependencies)
app.pipeline.fetch(app.scheduler, dependencies, track)
click.echo("")
@@ -281,9 +282,10 @@ def track(app, elements, deps, except_):
none: No dependencies, just the element itself
all: All dependencies
"""
- app.initialize(elements, rewritable=True, inconsistent=True)
+ app.initialize(elements, except_=except_,
+ rewritable=True, inconsistent=True)
try:
- dependencies = app.pipeline.deps_elements(deps, except_)
+ dependencies = app.pipeline.deps_elements(deps)
app.print_heading(deps=dependencies)
app.pipeline.track(app.scheduler, dependencies)
click.echo("")
@@ -422,9 +424,9 @@ def show(app, elements, deps, except_, order, format, downloadable):
bst show target.bst --format \\
$'---------- %{name} ----------\\n%{vars}'
"""
- app.initialize(elements, fetch_remote_refs=downloadable)
+ app.initialize(elements, except_=except_, fetch_remote_refs=downloadable)
try:
- dependencies = app.pipeline.deps_elements(deps, except_)
+ dependencies = app.pipeline.deps_elements(deps)
except PipelineError as e:
click.echo("{}".format(e))
sys.exit(-1)
@@ -550,7 +552,7 @@ def source_bundle(app, target, force, directory,
"""Produce a source bundle to be manually executed"""
app.initialize((target,), rewritable=track, inconsistent=track)
try:
- dependencies = app.pipeline.deps_elements('all', except_)
+ dependencies = app.pipeline.deps_elements('all')
app.print_heading(dependencies)
app.pipeline.source_bundle(app.scheduler, dependencies, force, track,
compression, directory)
@@ -762,7 +764,8 @@ class App():
#
# Initialize the main pipeline
#
- def initialize(self, elements, rewritable=False, inconsistent=False, fetch_remote_refs=False):
+ def initialize(self, elements, except_=tuple(), rewritable=False,
+ inconsistent=False, fetch_remote_refs=False):
profile_start(Topics.LOAD_PIPELINE, "_".join(t.replace(os.sep, '-') for t in elements))
@@ -835,7 +838,7 @@ class App():
sys.exit(-1)
try:
- self.pipeline = Pipeline(self.context, self.project, elements,
+ self.pipeline = Pipeline(self.context, self.project, elements, except_,
inconsistent=inconsistent,
rewritable=rewritable,
fetch_remote_refs=fetch_remote_refs,
diff --git a/buildstream/_pipeline.py b/buildstream/_pipeline.py
index 9860d290c..f89ad2d64 100644
--- a/buildstream/_pipeline.py
+++ b/buildstream/_pipeline.py
@@ -112,7 +112,7 @@ class Planner():
#
class Pipeline():
- def __init__(self, context, project, targets,
+ def __init__(self, context, project, targets, except_,
inconsistent=False,
rewritable=False,
fetch_remote_refs=False,
@@ -127,7 +127,7 @@ class Pipeline():
self.unused_workspaces = []
self._resolved_elements = {}
- loader = Loader(self.project.element_path, targets,
+ loader = Loader(self.project.element_path, targets + except_,
self.project._options)
meta_elements = loader.load(rewritable, load_ticker)
if load_ticker:
@@ -144,8 +144,12 @@ class Pipeline():
self.source_factory = SourceFactory(pluginbase, project._plugin_source_paths)
# Resolve the real elements now that we've resolved the project
- self.targets = [self.resolve(meta_element, ticker=resolve_ticker)
- for meta_element in meta_elements]
+ resolved_elements = [self.resolve(meta_element, ticker=resolve_ticker)
+ for meta_element in meta_elements]
+
+ self.targets = resolved_elements[:len(targets)]
+ self.exceptions = resolved_elements[len(targets):]
+
if resolve_ticker:
resolve_ticker(None)