summaryrefslogtreecommitdiff
path: root/obnam
diff options
context:
space:
mode:
authorLars Wirzenius <liw@gytha>2008-04-20 20:48:35 +0300
committerLars Wirzenius <liw@gytha>2008-04-20 20:48:35 +0300
commitdf3298e09d7b436eab36b989f80834e8e83bd038 (patch)
tree757e31e0e6e12c9a2c3142a12bb41d49619d3725 /obnam
parent975c42c402d2f1b24a199f1ada38e37295d7e14b (diff)
downloadobnam-df3298e09d7b436eab36b989f80834e8e83bd038.tar.gz
Make various methods get lists of basenames instead of absolute names.
Diffstat (limited to 'obnam')
-rw-r--r--obnam/app.py14
-rw-r--r--obnam/appTests.py54
2 files changed, 38 insertions, 30 deletions
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):