diff --git a/dvc/stage.py b/dvc/stage.py index b3c51d3d2..011d244a5 100644 --- a/dvc/stage.py +++ b/dvc/stage.py @@ -657,7 +657,7 @@ class Stage(object): else: logger.info("Running command:\n\t{}".format(self.cmd)) if not dry: - if self._already_cached(): + if not self.is_callback and self._already_cached(): self.checkout() else: self._run() diff --git a/tests/test_repro.py b/tests/test_repro.py index d38b26c51..873e5165c 100644 --- a/tests/test_repro.py +++ b/tests/test_repro.py @@ -1277,3 +1277,19 @@ class TestReproNoCommit(TestRepro): ret = main(["repro", self.file1_stage, "--no-commit"]) self.assertEqual(ret, 0) self.assertEqual(len(os.listdir(self.dvc.cache.local.cache_dir)), 0) + + +class TestReproAlreadyCached(TestRepro): + def test(self): + first_out = self.dvc.run( + fname="random.dvc", + deps=[], + outs=["random.txt"], + cmd='python -c "{}" > random.txt'.format( + "from random import random; print(random())" + ), + ).outs[0] + + second_out = self.dvc.reproduce(target="random.dvc")[0].outs[0] + + self.assertNotEqual(first_out.checksum, second_out.checksum)