summaryrefslogtreecommitdiff
path: root/obnam
diff options
context:
space:
mode:
authorLars Wirzenius <liw@gytha>2008-04-20 17:27:51 +0300
committerLars Wirzenius <liw@gytha>2008-04-20 17:27:51 +0300
commit3e6ee40aa181d1ff00c7f5d3d9817cefb42d6fa1 (patch)
treee42b8fcb06a7ac423885f171b0a70be1ad987dff /obnam
parent5f90ca5db557bcf5a6ae5387f2d527f7a4207411 (diff)
downloadobnam-3e6ee40aa181d1ff00c7f5d3d9817cefb42d6fa1.tar.gz
Finish implementation of Application.find_unchanged_filegroups.
Diffstat (limited to 'obnam')
-rw-r--r--obnam/app.py16
-rw-r--r--obnam/appTests.py52
2 files changed, 68 insertions, 0 deletions
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):