From 57d561307e2dfa9dad4dd6cb191e75bed52e9683 Mon Sep 17 00:00:00 2001 From: Guido Trotter <ultrotter@google.com> Date: Wed, 9 Jun 2010 18:12:35 +0100 Subject: [PATCH] ListVisibleFiles: do optional sorting Signed-off-by: Guido Trotter <ultrotter@google.com> Reviewed-by: Michael Hanselmann <hansmi@google.com> --- lib/utils.py | 7 +++++-- test/ganeti.utils_unittest.py | 33 ++++++++++++++++++++------------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/lib/utils.py b/lib/utils.py index 1ef35cb33..a5ec895ad 100644 --- a/lib/utils.py +++ b/lib/utils.py @@ -1715,11 +1715,13 @@ def OwnIpAddress(address): source=constants.LOCALHOST_IP_ADDRESS) -def ListVisibleFiles(path): +def ListVisibleFiles(path, sort=True): """Returns a list of visible files in a directory. @type path: str @param path: the directory to enumerate + @type sort: boolean + @param sort: whether to provide a sorted output @rtype: list @return: the list of all files not starting with a dot @raise ProgrammerError: if L{path} is not an absolue and normalized path @@ -1729,7 +1731,8 @@ def ListVisibleFiles(path): raise errors.ProgrammerError("Path passed to ListVisibleFiles is not" " absolute/normalized: '%s'" % path) files = [i for i in os.listdir(path) if not i.startswith(".")] - files.sort() + if sort: + files.sort() return files diff --git a/test/ganeti.utils_unittest.py b/test/ganeti.utils_unittest.py index 68ef82672..691b5d03f 100755 --- a/test/ganeti.utils_unittest.py +++ b/test/ganeti.utils_unittest.py @@ -1334,22 +1334,15 @@ class TestListVisibleFiles(unittest.TestCase): def tearDown(self): shutil.rmtree(self.path) - def _test(self, files, expected): - # Sort a copy - expected = expected[:] - expected.sort() - + def _CreateFiles(self, files): for name in files: - f = open(os.path.join(self.path, name), 'w') - try: - f.write("Test\n") - finally: - f.close() + utils.WriteFile(os.path.join(self.path, name), data="test") + def _test(self, files, expected): + self._CreateFiles(files) found = ListVisibleFiles(self.path) - found.sort() - - self.assertEqual(found, expected) + # by default ListVisibleFiles sorts its output + self.assertEqual(found, sorted(expected)) def testAllVisible(self): files = ["a", "b", "c"] @@ -1366,6 +1359,20 @@ class TestListVisibleFiles(unittest.TestCase): expected = ["a", "b"] self._test(files, expected) + def testForceSort(self): + files = ["c", "b", "a"] + self._CreateFiles(files) + found = ListVisibleFiles(self.path, sort=True) + self.assertEqual(found, sorted(files)) + + def testForceNonSort(self): + files = ["c", "b", "a"] + self._CreateFiles(files) + found = ListVisibleFiles(self.path, sort=False) + # We can't actually check that they weren't sorted, because they might come + # out sorted by chance + self.assertEqual(set(found), set(files)) + def testNonAbsolutePath(self): self.failUnlessRaises(errors.ProgrammerError, ListVisibleFiles, "abc") -- GitLab