mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-02 07:18:25 +01:00
dvc: add --cwd for dvc repro
Fixes #401 Signed-off-by: Ruslan Kuprieiev <[email protected]>
This commit is contained in:
@@ -24,3 +24,5 @@ innosetup/config.ini
|
|||||||
.coverage
|
.coverage
|
||||||
|
|
||||||
dvc/version.py
|
dvc/version.py
|
||||||
|
|
||||||
|
*.swp
|
||||||
|
|||||||
@@ -215,6 +215,10 @@ def parse_args(argv=None):
|
|||||||
action='store_true',
|
action='store_true',
|
||||||
default=False,
|
default=False,
|
||||||
help='Reproduce only single data item without recursive dependencies check.')
|
help='Reproduce only single data item without recursive dependencies check.')
|
||||||
|
repro_parser.add_argument('-c',
|
||||||
|
'--cwd',
|
||||||
|
default=os.path.curdir,
|
||||||
|
help='Directory to reproduce from.')
|
||||||
repro_parser.set_defaults(func=CmdRepro)
|
repro_parser.set_defaults(func=CmdRepro)
|
||||||
|
|
||||||
# Remove
|
# Remove
|
||||||
|
|||||||
+14
-4
@@ -8,6 +8,11 @@ from dvc.stage import Stage
|
|||||||
class CmdRepro(CmdBase):
|
class CmdRepro(CmdBase):
|
||||||
def run(self):
|
def run(self):
|
||||||
recursive = not self.args.single_item
|
recursive = not self.args.single_item
|
||||||
|
saved_dir = os.path.realpath(os.curdir)
|
||||||
|
if self.args.cwd:
|
||||||
|
os.chdir(self.args.cwd)
|
||||||
|
|
||||||
|
ret = 0
|
||||||
for target in self.args.targets:
|
for target in self.args.targets:
|
||||||
try:
|
try:
|
||||||
self.project.reproduce(target,
|
self.project.reproduce(target,
|
||||||
@@ -16,7 +21,8 @@ class CmdRepro(CmdBase):
|
|||||||
except ReproductionError as ex:
|
except ReproductionError as ex:
|
||||||
msg = 'Failed to reproduce \'{}\''.format(target)
|
msg = 'Failed to reproduce \'{}\''.format(target)
|
||||||
self.project.logger.error(msg, ex)
|
self.project.logger.error(msg, ex)
|
||||||
return 1
|
ret = 1
|
||||||
|
break
|
||||||
except StageNotFoundError as ex:
|
except StageNotFoundError as ex:
|
||||||
if os.path.exists(target):
|
if os.path.exists(target):
|
||||||
msg = '\'{}\' is not a dvc file.'.format(target)
|
msg = '\'{}\' is not a dvc file.'.format(target)
|
||||||
@@ -26,9 +32,13 @@ class CmdRepro(CmdBase):
|
|||||||
else:
|
else:
|
||||||
msg = '\'{}\' does not exist.'.format(target)
|
msg = '\'{}\' does not exist.'.format(target)
|
||||||
self.project.logger.error(msg)
|
self.project.logger.error(msg)
|
||||||
return 1
|
ret = 1
|
||||||
|
break
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
msg = 'Failed to reproduce \'{}\' - unexpected error'.format(target)
|
msg = 'Failed to reproduce \'{}\' - unexpected error'.format(target)
|
||||||
self.project.logger.error(msg, ex)
|
self.project.logger.error(msg, ex)
|
||||||
return 1
|
ret = 1
|
||||||
return 0
|
break
|
||||||
|
|
||||||
|
os.chdir(saved_dir)
|
||||||
|
return ret
|
||||||
|
|||||||
@@ -186,6 +186,37 @@ class TestCmdRepro(TestRepro):
|
|||||||
self.assertNotEqual(ret, 0)
|
self.assertNotEqual(ret, 0)
|
||||||
|
|
||||||
|
|
||||||
|
class TestCmdReproChdir(TestDvc):
|
||||||
|
def test(self):
|
||||||
|
dname = 'dir'
|
||||||
|
os.mkdir(dname)
|
||||||
|
foo = os.path.join(dname, self.FOO)
|
||||||
|
bar = os.path.join(dname, self.BAR)
|
||||||
|
code = os.path.join(dname, self.CODE)
|
||||||
|
shutil.copyfile(self.FOO, foo)
|
||||||
|
shutil.copyfile(self.CODE, code)
|
||||||
|
|
||||||
|
ret = main(['run',
|
||||||
|
'-f', 'Dvcfile',
|
||||||
|
'-c', dname,
|
||||||
|
'-d', self.FOO,
|
||||||
|
'-o', self.BAR,
|
||||||
|
'python {} {} {}'.format(self.CODE, self.FOO, self.BAR)])
|
||||||
|
self.assertEqual(ret, 0)
|
||||||
|
self.assertTrue(os.path.isfile(foo))
|
||||||
|
self.assertTrue(os.path.isfile(bar))
|
||||||
|
self.assertTrue(filecmp.cmp(foo, bar))
|
||||||
|
|
||||||
|
os.unlink(bar)
|
||||||
|
|
||||||
|
ret = main(['repro',
|
||||||
|
'-c', dname])
|
||||||
|
self.assertEqual(ret, 0)
|
||||||
|
self.assertTrue(os.path.isfile(foo))
|
||||||
|
self.assertTrue(os.path.isfile(bar))
|
||||||
|
self.assertTrue(filecmp.cmp(foo, bar))
|
||||||
|
|
||||||
|
|
||||||
class TestReproExternalBase(TestDvc):
|
class TestReproExternalBase(TestDvc):
|
||||||
def should_test(self):
|
def should_test(self):
|
||||||
return False
|
return False
|
||||||
|
|||||||
Reference in New Issue
Block a user