From ef7aa024f9314d8ebeabde9475883e47b868fd04 Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Sat, 4 Aug 2018 18:44:13 +0300 Subject: [PATCH] run: ask for confirmation when overwriting stage file Fixes #974 Signed-off-by: Ruslan Kuprieiev --- dvc/project.py | 3 ++- dvc/stage.py | 10 +++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/dvc/project.py b/dvc/project.py index 97dcee0c1..6ad5b3e50 100644 --- a/dvc/project.py +++ b/dvc/project.py @@ -218,7 +218,8 @@ class Project(object): outs=outs, outs_no_cache=outs_no_cache, metrics_no_cache=metrics_no_cache, - deps=deps) + deps=deps, + overwrite=False) if not no_exec: stage.run() stage.dump() diff --git a/dvc/stage.py b/dvc/stage.py index 139cc5379..5866e45d8 100644 --- a/dvc/stage.py +++ b/dvc/stage.py @@ -8,6 +8,7 @@ import posixpath import dvc.dependency as dependency import dvc.output as output from dvc.exceptions import DvcException +from dvc.prompt import prompt from dvc.logger import Logger from dvc.utils import dict_md5 @@ -227,7 +228,8 @@ class Stage(object): fname=None, cwd=os.curdir, locked=False, - add=False): + add=False, + overwrite=True): stage = Stage(project=project, cwd=cwd, cmd=cmd, @@ -244,6 +246,12 @@ class Stage(object): cwd = os.path.abspath(cwd) path = os.path.join(cwd, fname) + if os.path.exists(path): + relpath = os.path.relpath(path) + msg = "{} already exists. Do you wish to overwrite it?" + if not overwrite and not prompt(msg.format(relpath), False): + raise DvcException("{} already exists".format(relpath)) + stage.cwd = cwd stage.path = path