From 97862a3d5fa2b5a979e4c1c8fdde280ad7368880 Mon Sep 17 00:00:00 2001 From: Dani Hodovic Date: Sat, 23 Nov 2019 15:26:32 +0100 Subject: [PATCH] Make tree.walk() output deterministic --- dvc/utils/__init__.py | 5 +++++ tests/func/test_tree.py | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/dvc/utils/__init__.py b/dvc/utils/__init__.py index 68ba41877..3a24a4f56 100644 --- a/dvc/utils/__init__.py +++ b/dvc/utils/__init__.py @@ -296,6 +296,11 @@ def dvc_walk(top, dvcignore, topdown=True, onerror=None, followlinks=False): for root, dirs, files in os.walk( top, topdown=topdown, onerror=onerror, followlinks=followlinks ): + # Dirs are returned in arbitrary order on different platforms. Force a + # specific order so that we can make deterministic assumptions on the + # directory order. + # https://stackoverflow.com/a/54773660/2966951 + dirs.sort() if dvcignore: dirs[:], files[:] = dvcignore(root, dirs, files) diff --git a/tests/func/test_tree.py b/tests/func/test_tree.py index 656303525..6aa2f5856 100644 --- a/tests/func/test_tree.py +++ b/tests/func/test_tree.py @@ -118,13 +118,13 @@ class TestWalkInNoSCM(AssertWalkEqualMixin, TestDir): ["lib", "data_dir"], ["code.py", "bar", "тест", "foo"], ), - (join(self._root_dir, "lib"), [], ["file.txt"]), (join(self._root_dir, "data_dir"), ["data_sub_dir"], ["data"]), ( join(self._root_dir, "data_dir", "data_sub_dir"), [], ["data_sub"], ), + (join(self._root_dir, "lib"), [], ["file.txt"]), ], ) @@ -155,13 +155,13 @@ class TestWalkInGit(AssertWalkEqualMixin, TestGit): ["lib", "data_dir"], ["bar", "тест", "code.py", "foo"], ), - (join(self._root_dir, "lib"), [], ["file.txt"]), (join(self._root_dir, "data_dir"), ["data_sub_dir"], ["data"]), ( join(self._root_dir, "data_dir", "data_sub_dir"), [], ["data_sub"], ), + (join(self._root_dir, "lib"), [], ["file.txt"]), ], ) self.assertWalkEqual(