diff --git a/dvc/remote/local.py b/dvc/remote/local.py index 18bee251b..6a5414189 100644 --- a/dvc/remote/local.py +++ b/dvc/remote/local.py @@ -415,11 +415,17 @@ class RemoteLOCAL(RemoteBase): self.link(c, p) + self.state.update(p, md5) + self.state.update(c, md5) + if bar: progress.update_target(dir_relpath, processed, dir_size) self.state.update_link(path) + cache = self.get(md5) + self.state.update(cache) + if bar: progress.finish_target(dir_relpath) diff --git a/tests/test_add.py b/tests/test_add.py index ef343cc75..3fa99a326 100644 --- a/tests/test_add.py +++ b/tests/test_add.py @@ -238,6 +238,29 @@ class TestShouldUpdateStateEntryForFileAfterAdd(TestDvc): self.assertEqual(ret, 0) self.assertEqual(file_md5_counter.mock.call_count, 1) - ret = main(["run", "-d", self.FOO, "cat foo"]) + ret = main(["run", "-d", self.FOO, "cat {}".format(self.FOO)]) self.assertEqual(ret, 0) self.assertEqual(file_md5_counter.mock.call_count, 1) + + +class TestShouldUpdateStateEntryForDirectoryAfterAdd(TestDvc): + def test(self): + file_md5_counter = spy(dvc.state.file_md5) + with patch.object(dvc.state, "file_md5", file_md5_counter): + + ret = main(["config", "cache.type", "copy"]) + self.assertEqual(ret, 0) + + ret = main(["add", self.DATA_DIR]) + self.assertEqual(ret, 0) + self.assertEqual(file_md5_counter.mock.call_count, 3) + + ret = main(["status"]) + self.assertEqual(ret, 0) + self.assertEqual(file_md5_counter.mock.call_count, 3) + + ret = main( + ["run", "-d", self.DATA_DIR, "ls {}".format(self.DATA_DIR)] + ) + self.assertEqual(ret, 0) + self.assertEqual(file_md5_counter.mock.call_count, 3)