From df3298e09d7b436eab36b989f80834e8e83bd038 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 20 Apr 2008 20:48:35 +0300 Subject: Make various methods get lists of basenames instead of absolute names. --- obnam/app.py | 14 ++++++++------ obnam/appTests.py | 54 ++++++++++++++++++++++++++++++------------------------ 2 files changed, 38 insertions(+), 30 deletions(-) (limited to 'obnam') diff --git a/obnam/app.py b/obnam/app.py index 0b79a1f2..d45e0de6 100644 --- a/obnam/app.py +++ b/obnam/app.py @@ -131,10 +131,10 @@ class Application: return False return True - def filegroup_is_unchanged(self, fg, filenames, stat=os.stat): + def filegroup_is_unchanged(self, dirname, fg, filenames, stat=os.stat): """Is a filegroup unchanged from the previous generation? - Given a filegroup and a list of files in the current directory, + Given a filegroup and a list of files in the given directory, return True if all files in the filegroup are unchanged from the previous generation. @@ -148,7 +148,7 @@ class Application: return False # file has been deleted old_stat = fg.get_stat(old_name) - new_stat = stat(old_name) + new_stat = stat(os.path.join(dirname, old_name)) if not self.file_is_unchanged(old_stat, new_stat): return False # file has changed @@ -223,7 +223,8 @@ class Application: self.get_store().queue_object(sig) return sig - def find_unchanged_filegroups(self, filegroups, filenames, stat=os.stat): + def find_unchanged_filegroups(self, dirname, filegroups, filenames, + stat=os.stat): """Return list of filegroups that are unchanged. The filenames and stat arguments have the same meaning as @@ -234,7 +235,8 @@ class Application: unchanged = [] for filegroup in filegroups: - if self.filegroup_is_unchanged(filegroup, filenames, stat=stat): + if self.filegroup_is_unchanged(dirname, filegroup, filenames, + stat=stat): unchanged.append(filegroup) return unchanged @@ -300,7 +302,7 @@ class Application: if old_dir: old_groups = [self.get_store().get_object(id) for id in old_dir.get_filegrouprefs()] - filegroups = self.find_unchanged_filegroups(old_groups, + filegroups = self.find_unchanged_filegroups(dirname, old_groups, filenames, stat=stat) for fg in filegroups: diff --git a/obnam/appTests.py b/obnam/appTests.py index 845f2105..290b4850 100644 --- a/obnam/appTests.py +++ b/obnam/appTests.py @@ -208,39 +208,43 @@ class ApplicationUnchangedFileGroupTests(unittest.TestCase): def setUp(self): context = obnam.context.Context() self.app = obnam.Application(context) + self.dir = "dirname" self.stats = { - "pink": obnam.utils.make_stat_result(st_mtime=42), - "pretty": obnam.utils.make_stat_result(st_mtime=105), + "dirname/pink": obnam.utils.make_stat_result(st_mtime=42), + "dirname/pretty": obnam.utils.make_stat_result(st_mtime=105), } def mock_stat(self, filename): + self.failUnless(filename.startswith(self.dir)) return self.stats[filename] def mock_filegroup(self, filenames): fg = obnam.obj.FileGroupObject(id=obnam.obj.object_id_new()) for filename in filenames: - st = self.mock_stat(filename) + st = self.mock_stat(os.path.join(self.dir, filename)) fg.add_file(filename, st, None, None, None) return fg def testSameFileGroupWhenAllFilesAreIdentical(self): filenames = ["pink", "pretty"] fg = self.mock_filegroup(filenames) - self.failUnless(self.app.filegroup_is_unchanged(fg, filenames, + self.failUnless(self.app.filegroup_is_unchanged(self.dir, fg, + filenames, stat=self.mock_stat)) def testChangedFileGroupWhenFileHasChanged(self): filenames = ["pink", "pretty"] fg = self.mock_filegroup(filenames) - self.stats["pink"] = obnam.utils.make_stat_result(st_mtime=1) - self.failIf(self.app.filegroup_is_unchanged(fg, filenames, - stat=self.mock_stat)) + self.stats["dirname/pink"] = obnam.utils.make_stat_result(st_mtime=1) + self.failIf(self.app.filegroup_is_unchanged(self.dir, fg, filenames, + stat=self.mock_stat)) def testChangedFileGroupWhenFileHasBeenRemoved(self): filenames = ["pink", "pretty"] fg = self.mock_filegroup(filenames) - self.failIf(self.app.filegroup_is_unchanged(fg, filenames[:1], - stat=self.mock_stat)) + self.failIf(self.app.filegroup_is_unchanged(self.dir, fg, + filenames[:1], + stat=self.mock_stat)) class ApplicationUnchangedDirTests(unittest.TestCase): @@ -346,9 +350,10 @@ class ApplicationFindUnchangedFilegroupsTests(unittest.TestCase): def setUp(self): context = obnam.context.Context() self.app = obnam.Application(context) + self.dirname = "dirname" self.stats = { - "pink": obnam.utils.make_stat_result(st_mtime=42), - "pretty": obnam.utils.make_stat_result(st_mtime=105), + "dirname/pink": obnam.utils.make_stat_result(st_mtime=42), + "dirname/pretty": obnam.utils.make_stat_result(st_mtime=105), } self.names = ["pink", "pretty"] self.pink = self.mock_filegroup(["pink"]) @@ -358,7 +363,7 @@ class ApplicationFindUnchangedFilegroupsTests(unittest.TestCase): def mock_filegroup(self, filenames): fg = obnam.obj.FileGroupObject(id=obnam.obj.object_id_new()) for filename in filenames: - st = self.mock_stat(filename) + st = self.mock_stat(os.path.join(self.dirname, filename)) fg.add_file(filename, st, None, None, None) return fg @@ -366,7 +371,8 @@ class ApplicationFindUnchangedFilegroupsTests(unittest.TestCase): return self.stats[filename] def find(self, filegroups, filenames): - return self.app.find_unchanged_filegroups(filegroups, filenames, + return self.app.find_unchanged_filegroups(self.dirname, filegroups, + filenames, stat=self.mock_stat) def testReturnsEmptyListForEmptyListOfGroups(self): @@ -376,11 +382,11 @@ class ApplicationFindUnchangedFilegroupsTests(unittest.TestCase): self.failUnlessEqual(self.find(self.groups, []), []) def testReturnsPinkGroupWhenPrettyIsChanged(self): - self.stats["pretty"] = obnam.utils.make_stat_result() + self.stats["dirname/pretty"] = obnam.utils.make_stat_result() self.failUnlessEqual(self.find(self.groups, self.names), [self.pink]) def testReturnsPrettyGroupWhenPinkIsChanged(self): - self.stats["pink"] = obnam.utils.make_stat_result() + self.stats["dirname/pink"] = obnam.utils.make_stat_result() self.failUnlessEqual(self.find(self.groups, self.names), [self.pretty]) def testReturnsPinkAndPrettyWhenBothAreUnchanged(self): @@ -388,8 +394,8 @@ class ApplicationFindUnchangedFilegroupsTests(unittest.TestCase): set(self.groups)) def testReturnsEmptyListWhenEverythingIsChanged(self): - self.stats["pink"] = obnam.utils.make_stat_result() - self.stats["pretty"] = obnam.utils.make_stat_result() + self.stats["dirname/pink"] = obnam.utils.make_stat_result() + self.stats["dirname/pretty"] = obnam.utils.make_stat_result() self.failUnlessEqual(self.find(self.groups, self.names), []) @@ -434,16 +440,16 @@ class ApplicationSelectFilesToBackUpTests(unittest.TestCase): return None def setUp(self): + self.dirname = "dirname" self.stats = { - "pink": obnam.utils.make_stat_result(st_mtime=42), - "pretty": obnam.utils.make_stat_result(st_mtime=105), + "dirname/pink": obnam.utils.make_stat_result(st_mtime=42), + "dirname/pretty": obnam.utils.make_stat_result(st_mtime=105), } self.names = ["pink", "pretty"] self.pink = self.mock_filegroup(["pink"]) self.pretty = self.mock_filegroup(["pretty"]) self.groups = [self.pink, self.pretty] - self.dirname = "dirname" self.dir = obnam.obj.DirObject(id="id", name=self.dirname, filegrouprefs=[x.get_id() for x in self.groups]) @@ -464,7 +470,7 @@ class ApplicationSelectFilesToBackUpTests(unittest.TestCase): def mock_filegroup(self, filenames): fg = obnam.obj.FileGroupObject(id=obnam.obj.object_id_new()) for filename in filenames: - st = self.mock_stat(filename) + st = self.mock_stat(os.path.join(self.dirname, filename)) fg.add_file(filename, st, None, None, None) return fg @@ -480,12 +486,12 @@ class ApplicationSelectFilesToBackUpTests(unittest.TestCase): self.failUnlessEqual(self.select(), ([], self.names)) def testReturnsNoOldGroupsIfEverythingIsChanged(self): - self.stats["pink"] = obnam.utils.make_stat_result() - self.stats["pretty"] = obnam.utils.make_stat_result() + self.stats["dirname/pink"] = obnam.utils.make_stat_result() + self.stats["dirname/pretty"] = obnam.utils.make_stat_result() self.failUnlessEqual(self.select(), ([], self.names)) def testReturnsOneGroupAndOneFileWhenJustOneIsChanged(self): - self.stats["pink"] = obnam.utils.make_stat_result() + self.stats["dirname/pink"] = obnam.utils.make_stat_result() self.failUnlessEqual(self.select(), ([self.pretty], ["pink"])) def testReturnsBothGroupsWhenNothingIsChanged(self): -- cgit v1.2.1