diff options
author | Tristan Maat <tristan.maat@codethink.co.uk> | 2017-11-07 18:04:13 +0000 |
---|---|---|
committer | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2017-11-18 18:56:53 +0900 |
commit | 8e3bcb5517896480802360abf22d6d464c0b5179 (patch) | |
tree | f8d11dde5f28ade06ac531ccc071f5a5d1f9eef4 | |
parent | 4c73b85dbf6e84c710dc55bc756b02c7952ba764 (diff) | |
download | buildstream-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.py | 21 | ||||
-rw-r--r-- | buildstream/_pipeline.py | 12 |
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) |