From f11183446e05ff1acfcffbd836b4390b311aab0f Mon Sep 17 00:00:00 2001 From: Dmitry Date: Tue, 9 Jan 2018 19:02:42 -0800 Subject: [PATCH] repro: print correct dvc file name near with error message --- dvc/command/repro.py | 9 ++++++--- dvc/project.py | 14 +++++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/dvc/command/repro.py b/dvc/command/repro.py index c8bb524a9..08e5e7cfd 100644 --- a/dvc/command/repro.py +++ b/dvc/command/repro.py @@ -1,5 +1,6 @@ -from dvc.exceptions import DvcException from dvc.command.common.base import CmdBase +from dvc.project import ReproductionError + class CmdRepro(CmdBase): def run(self): @@ -9,8 +10,10 @@ class CmdRepro(CmdBase): self.project.reproduce(target, recursive=recursive, force=self.args.force) - except DvcException as ex: - msg = 'Failed to reproduce {}: {}'.format(target, str(ex)) + except ReproductionError as ex: + self.project.logger.error(ex) + except Exception as ex: + msg = 'Failed to reproduce \'{}\' - unexpected error: {}'.format(target, ex) self.project.logger.error(msg) return 1 return 0 diff --git a/dvc/project.py b/dvc/project.py index 8cf5f5084..5e38f1ed3 100644 --- a/dvc/project.py +++ b/dvc/project.py @@ -26,6 +26,11 @@ class StageNotFoundError(DvcException): super(StageNotFoundError, self).__init__(msg) +class ReproductionError(DvcException): + def __init__(self, dvc_file_name, msg): + super(ReproductionError, self).__init__(u'Failed to reproduce \'{}\': {}'.format(dvc_file_name, msg)) + + class Pipeline(object): def __init__(self, project, G): @@ -176,9 +181,12 @@ class Project(object): if recursive: for n in nx.dfs_postorder_nodes(self.graph(), node): - stages[n].reproduce(force=force) - stages[n].dump() - reproduced.append(stages[n]) + try: + stages[n].reproduce(force=force) + stages[n].dump() + reproduced.append(stages[n]) + except Exception as ex: + raise ReproductionError(n, ex.message) stages[node].reproduce(force=force) stages[node].dump()