Merge pull request #391 from efiop/master

Add '--no-exec' option for 'dvc run'
This commit is contained in:
Ruslan Kuprieiev
2018-01-08 14:00:50 +02:00
committed by GitHub
5 changed files with 31 additions and 10 deletions
+5
View File
@@ -113,6 +113,11 @@ def parse_args(argv=None):
'--cwd',
default=os.path.curdir,
help='Directory to run your command and place state file in')
run_parser.add_argument(
'--no-exec',
action='store_true',
default=False,
help="Only create stage file without actually running it")
run_parser.add_argument(
'command',
nargs=argparse.REMAINDER,
+14 -7
View File
@@ -3,19 +3,26 @@ import os
from dvc.command.common.base import CmdBase
from dvc.logger import Logger
from dvc.stage import Stage
from dvc.exceptions import DvcException
class CmdRun(CmdBase):
def run(self):
fname = self.stage_file_name(self.args.file, self.args.outs, self.args.outs_no_cache)
self.project.run(cmd=' '.join(self.args.command),
outs=self.args.outs,
outs_no_cache=self.args.outs_no_cache,
deps=self.args.deps,
locked=self.args.lock,
fname=fname,
cwd=self.args.cwd)
try:
self.project.run(cmd=' '.join(self.args.command),
outs=self.args.outs,
outs_no_cache=self.args.outs_no_cache,
deps=self.args.deps,
locked=self.args.lock,
fname=fname,
cwd=self.args.cwd,
no_exec=self.args.no_exec)
except DvcException as ex:
self.project.logger.error('Failed to run command: {}'.format(str(ex)))
return 1
return 0
@staticmethod
+1 -1
View File
@@ -59,5 +59,5 @@ class Executor(object):
stderr_file=stderr_file, cwd=cwd, shell=shell)
if code != 0:
cmd_str = ' '.join(cmd) if type(cmd) == list else cmd
raise ExecutorError('Git command error ({}):\n{}\n{}'.format(cmd_str, out, err))
raise ExecutorError('Exec command error ({}):\n{}\n{}'.format(cmd_str, out, err))
return out
+4 -2
View File
@@ -145,7 +145,8 @@ class Project(object):
outs_no_cache=[],
locked=False,
fname=Stage.STAGE_FILE,
cwd=os.curdir):
cwd=os.curdir,
no_exec=False):
cwd = os.path.abspath(cwd)
path = os.path.join(cwd, fname)
outputs = Output.loads_from(self, outs, use_cache=True, cwd=cwd)
@@ -159,7 +160,8 @@ class Project(object):
outs=outputs,
deps=deps,
locked=locked)
stage.run()
if not no_exec:
stage.run()
stage.dump()
return stage
+7
View File
@@ -45,3 +45,10 @@ class TestRunEmpty(TestDvc):
locked=False,
fname='empty.dvc',
cwd=os.curdir)
class TestRunNoExec(TestDvc):
def test(self):
self.dvc.run(cmd='python {} {} {}'.format(self.CODE, self.FOO, 'out'),
no_exec=True)
self.assertFalse(os.path.exists('out'))