diff options
author | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2018-01-11 22:38:26 +0900 |
---|---|---|
committer | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2018-01-11 22:40:39 +0900 |
commit | c4c9a48eb1da5bbb8968998392a3a4b435337e7a (patch) | |
tree | 06ef5148817a2cf602a75a8ecb039f47220830e4 | |
parent | 03ce25dcbbdc66641318452423fc7af6a3d9a37f (diff) | |
download | buildstream-c4c9a48eb1da5bbb8968998392a3a4b435337e7a.tar.gz |
_frontend/main.py: Making error handling more consistentrefactor-error-details
Added app.print_error() to consistently print an error while
running the pipeline stuff.
Also make bst push & pull commands more consistent with
the rest, and print the summary at the end as expected.
-rw-r--r-- | buildstream/_frontend/main.py | 43 |
1 files changed, 27 insertions, 16 deletions
diff --git a/buildstream/_frontend/main.py b/buildstream/_frontend/main.py index ad74eeb8b..2dd7ae701 100644 --- a/buildstream/_frontend/main.py +++ b/buildstream/_frontend/main.py @@ -45,6 +45,9 @@ from .complete import main_bashcomplete, complete_path, CompleteUnhandled # Some globals resolved for default arguments in the cli build_stream_version = pkg_resources.require("buildstream")[0].version +# Intendation for all logging +INDENT = 4 + ################################################################## # Override of click's main entry point # @@ -220,10 +223,9 @@ def build(app, elements, all, track, track_save, track_all, track_except): app.print_heading() try: app.pipeline.build(app.scheduler, all, track, track_save) - click.echo("", err=True) app.print_summary() - except PipelineError: - click.echo("", err=True) + except PipelineError as e: + app.print_error(e) app.print_summary() sys.exit(-1) @@ -265,10 +267,9 @@ def fetch(app, elements, deps, track, except_): dependencies = app.pipeline.deps_elements(deps) app.print_heading(deps=dependencies) app.pipeline.fetch(app.scheduler, dependencies, track) - click.echo("", err=True) app.print_summary() except PipelineError as e: - click.echo("{}".format(e), err=True) + app.print_error(e) app.print_summary() sys.exit(-1) @@ -304,10 +305,9 @@ def track(app, elements, deps, except_): dependencies = app.pipeline.deps_elements(deps) app.print_heading(deps=dependencies) app.pipeline.track(app.scheduler, dependencies) - click.echo("", err=True) app.print_summary() except PipelineError as e: - click.echo("{}".format(e), err=True) + app.print_error(e) app.print_summary() sys.exit(-1) @@ -335,10 +335,10 @@ def pull(app, elements, deps): try: to_pull = app.pipeline.deps_elements(deps) app.pipeline.pull(app.scheduler, to_pull) - click.echo("", err=True) + app.print_summary() except BstError as e: - click.echo("", err=True) - click.echo("ERROR: {}".format(e), err=True) + app.print_error(e) + app.print_summary() sys.exit(-1) @@ -365,10 +365,10 @@ def push(app, elements, deps): try: to_push = app.pipeline.deps_elements(deps) app.pipeline.push(app.scheduler, to_push) - click.echo("", err=True) + app.print_summary() except BstError as e: - click.echo("", err=True) - click.echo("ERROR: {}".format(e), err=True) + app.print_error(e) + app.print_summary() sys.exit(-1) @@ -541,8 +541,7 @@ def checkout(app, element, directory, force, integrate, hardlinks): app.pipeline.checkout(directory, force, integrate, hardlinks) click.echo("", err=True) except BstError as e: - click.echo("") - click.echo("ERROR: {}".format(e), err=True) + app.print_error(e) sys.exit(-1) @@ -826,7 +825,7 @@ class App(): self.error_profile, self.detail_profile, # Indentation for detailed messages - indent=4, + indent=INDENT, # Number of last lines in an element's log to print (when encountering errors) log_lines=self.context.log_error_lines, # Maximum number of lines to print in a detailed message @@ -1036,11 +1035,23 @@ class App(): # Print a summary of the queues # def print_summary(self): + click.echo("", err=True) self.logger.print_summary(self.pipeline, self.scheduler, self.main_options['log_file'], styling=self.colors) # + # Print an error + # + def print_error(self, error): + click.echo("", err=True) + click.echo("{}".format(error), err=True) + if error.detail: + indent = " " * INDENT + detail = '\n' + indent + indent.join(error.detail.splitlines(True)) + click.echo("{}".format(detail), err=True) + + # # Handle messages from the pipeline # def message_handler(self, message, context): |