From 3e6ee40aa181d1ff00c7f5d3d9817cefb42d6fa1 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 20 Apr 2008 17:27:51 +0300 Subject: Finish implementation of Application.find_unchanged_filegroups. --- obnam/app.py | 16 ++++++++++++++++ obnam/appTests.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) (limited to 'obnam') diff --git a/obnam/app.py b/obnam/app.py index 3b9a3f95..46527bf1 100644 --- a/obnam/app.py +++ b/obnam/app.py @@ -214,6 +214,22 @@ class Application: self.get_store().queue_object(sig) return sig + def find_unchanged_filegroups(self, filegroups, filenames, stat=os.stat): + """Return list of filegroups that are unchanged. + + The filenames and stat arguments have the same meaning as + for the filegroup_is_unchanged method. + + """ + + unchanged = [] + + for filegroup in filegroups: + if self.filegroup_is_unchanged(filegroup, filenames, stat=stat): + unchanged.append(filegroup) + + return unchanged + def add_to_filegroup(self, fg, filename): """Add a file to a filegroup.""" self._context.progress.update_current_action(filename) diff --git a/obnam/appTests.py b/obnam/appTests.py index 7cee6843..0df59534 100644 --- a/obnam/appTests.py +++ b/obnam/appTests.py @@ -335,6 +335,58 @@ class ApplicationUnchangedDirTests(unittest.TestCase): self.failIf(self.app.dir_is_unchanged(dir1, dir2)) +class ApplicationFindUnchangedFilegroupsTests(unittest.TestCase): + + def setUp(self): + context = obnam.context.Context() + self.app = obnam.Application(context) + self.stats = { + "pink": obnam.utils.make_stat_result(st_mtime=42), + "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] + + def mock_filegroup(self, filenames): + fg = obnam.obj.FileGroupObject(id=obnam.obj.object_id_new()) + for filename in filenames: + st = self.mock_stat(filename) + fg.add_file(filename, st, None, None, None) + return fg + + def mock_stat(self, filename): + return self.stats[filename] + + def find(self, filegroups, filenames): + return self.app.find_unchanged_filegroups(filegroups, filenames, + stat=self.mock_stat) + + def testReturnsEmptyListForEmptyListOfGroups(self): + self.failUnlessEqual(self.find([], self.names), []) + + def testReturnsEmptyListForEmptyListOfFilenames(self): + self.failUnlessEqual(self.find(self.groups, []), []) + + def testReturnsPinkGroupWhenPrettyIsChanged(self): + self.stats["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.failUnlessEqual(self.find(self.groups, self.names), [self.pretty]) + + def testReturnsPinkAndPrettyWhenBothAreUnchanged(self): + self.failUnlessEqual(set(self.find(self.groups, self.names)), + set(self.groups)) + + def testReturnsEmptyListWhenEverythingIsChanged(self): + self.stats["pink"] = obnam.utils.make_stat_result() + self.stats["pretty"] = obnam.utils.make_stat_result() + self.failUnlessEqual(self.find(self.groups, self.names), []) + + class ApplicationFindFileByNameTests(unittest.TestCase): def setUp(self): -- cgit v1.2.1