From ac80d59704e2e87729ea208e52f853249dea34d2 Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Wed, 29 Aug 2018 19:17:50 +0300 Subject: [PATCH] dvc: properly compute mtime of the directory Fixes #1067 Signed-off-by: Ruslan Kuprieiev --- dvc/state.py | 6 +----- tests/test_repro.py | 6 ++++++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/dvc/state.py b/dvc/state.py index efcf142d8..56d6fadb5 100644 --- a/dvc/state.py +++ b/dvc/state.py @@ -96,18 +96,14 @@ class State(object): @staticmethod def mtime(path): + mtime = os.path.getmtime(path) if os.path.isdir(path): - mtime = -1 for root, dirs, files in os.walk(path): for fname in files: f = os.path.join(root, fname) m = os.path.getmtime(f) if m > mtime: mtime = m - if mtime == -1: - mtime = os.path.getmtime(path) - else: - mtime = os.path.getmtime(path) return str(int(nanotime.timestamp(mtime))) diff --git a/tests/test_repro.py b/tests/test_repro.py index 827ee8102..01f361a0c 100644 --- a/tests/test_repro.py +++ b/tests/test_repro.py @@ -281,6 +281,12 @@ class TestReproChangedDirData(TestDvc): self.assertEqual(len(stages), 1) self.assertTrue(stages[0] is not None) + # Check that dvc indeed registers changed output dir + shutil.move(self.BAR, dir_name) + stages = self.dvc.reproduce(stage.path) + self.assertEqual(len(stages), 1) + self.assertTrue(stages[0] is not None) + class TestReproMissingMd5InStageFile(TestRepro): def test(self):