diff --git a/dvc/stage.py b/dvc/stage.py index 6b6e1a991..25d2534e9 100644 --- a/dvc/stage.py +++ b/dvc/stage.py @@ -377,8 +377,6 @@ class Stage(object): raise MissingDep(missing) def run(self, dry=False): - self._check_missing_deps() - if self.locked: msg = u'Verifying outputs in locked stage \'{}\'' self.project.logger.info(msg.format(self.relpath)) @@ -401,6 +399,7 @@ class Stage(object): self.project.logger.info(msg) if not dry: + self._check_missing_deps() p = subprocess.Popen(self.cmd, cwd=self.cwd, shell=True, diff --git a/tests/test_repro.py b/tests/test_repro.py index a38d3ccf2..46450c1a9 100644 --- a/tests/test_repro.py +++ b/tests/test_repro.py @@ -146,6 +146,42 @@ class TestReproDry(TestReproChangedData): self.assertFalse(filecmp.cmp(self.file1, self.BAR, shallow=False)) +class TestReproDryNoExec(TestDvc): + def test(self): + deps = [] + for d in range(3): + idir = 'idir{}'.format(d) + odir = 'odir{}'.format(d) + + deps.append('-d') + deps.append(odir) + + os.mkdir(idir) + + f = os.path.join(idir, 'file') + with open(f, 'w+') as fobj: + fobj.write(str(d)) + + if os.name == 'nt': + cp = 'copy' + else: + cp = 'cp' + + ret = main(['run', + '--no-exec', + '-d', idir, + '-o', odir, + "python -c 'import shutil; " + "shutil.copytree(\"{}\", \"{}\")'".format(idir, odir)]) + self.assertEqual(ret, 0) + + ret = main(['run', '--no-exec', '-f', 'Dvcfile'] + deps) + self.assertEqual(ret, 0) + + ret = main(['repro', '--dry']) + self.assertEqual(ret, 0) + + class TestReproChangedDeepData(TestReproChangedData): def setUp(self): super(TestReproChangedDeepData, self).setUp()