diff options
author | Lars Wirzenius <liw@gytha> | 2008-04-12 23:11:46 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@gytha> | 2008-04-12 23:11:46 +0300 |
commit | 323ee15aaa4144cb3a17257ff4707655000f5705 (patch) | |
tree | 9f27f640de1dee5d9258b8c857d10e9b7f5c3c21 /obnam | |
parent | 18eb0e836a382bcd6779a2befbb5dd76b9ca9bc2 (diff) | |
download | obnam-323ee15aaa4144cb3a17257ff4707655000f5705.tar.gz |
Wrote method to check whether a directory has changed since the previous generation.
Diffstat (limited to 'obnam')
-rw-r--r-- | obnam/app.py | 14 | ||||
-rw-r--r-- | obnam/appTests.py | 99 |
2 files changed, 113 insertions, 0 deletions
diff --git a/obnam/app.py b/obnam/app.py index 6949fe78..834da3c1 100644 --- a/obnam/app.py +++ b/obnam/app.py @@ -171,6 +171,20 @@ class Application: return True # everything seems to be as before + def dir_is_unchanged(self, old, new): + """Has a directory changed since the previous generation? + + Return True if a directory, or its files or subdirectories, + has changed since the previous generation. + + """ + + return (old.get_name() == new.get_name() and + self.file_is_unchanged(old.get_stat(), new.get_stat()) and + sorted(old.get_dirrefs()) == sorted(new.get_dirrefs()) and + sorted(old.get_filegrouprefs()) == + sorted(new.get_filegrouprefs())) + def set_prevgen_filelist(self, filelist): """Set the Filelist object from the previous generation. diff --git a/obnam/appTests.py b/obnam/appTests.py index d046be8a..72a54b7b 100644 --- a/obnam/appTests.py +++ b/obnam/appTests.py @@ -239,6 +239,105 @@ class ApplicationUnchangedFileGroupTests(unittest.TestCase): stat=self.mock_stat)) + +class ApplicationUnchangedDirTests(unittest.TestCase): + + def setUp(self): + context = obnam.context.Context() + self.app = obnam.Application(context) + + def make_dir(self, name, dirrefs, filegrouprefs, stat=None): + if stat is None: + stat = obnam.utils.make_stat_result() + return obnam.obj.DirObject(id=obnam.obj.object_id_new(), + name=name, + stat=stat, + dirrefs=dirrefs, + filegrouprefs=filegrouprefs) + + def testSameDirWhenNothingHasChanged(self): + dir = self.make_dir("name", [], ["pink", "pretty"]) + self.failUnless(self.app.dir_is_unchanged(dir, dir)) + + def testChangedDirWhenFileGroupHasBeenRemoved(self): + dir1 = self.make_dir("name", [], ["pink", "pretty"]) + dir2 = self.make_dir("name", [], ["pink"]) + self.failIf(self.app.dir_is_unchanged(dir1, dir2)) + + def testChangedDirWhenFileGroupHasBeenAdded(self): + dir1 = self.make_dir("name", [], ["pink"]) + dir2 = self.make_dir("name", [], ["pink", "pretty"]) + self.failIf(self.app.dir_is_unchanged(dir1, dir2)) + + def testChangedDirWhenDirHasBeenRemoved(self): + dir1 = self.make_dir("name", ["pink", "pretty"], []) + dir2 = self.make_dir("name", ["pink"], []) + self.failIf(self.app.dir_is_unchanged(dir1, dir2)) + + def testChangedDirWhenDirHasBeenAdded(self): + dir1 = self.make_dir("name", ["pink"], []) + dir2 = self.make_dir("name", ["pink", "pretty"], []) + self.failIf(self.app.dir_is_unchanged(dir1, dir2)) + + def testChangedDirWhenNameHasChanged(self): + dir1 = self.make_dir("name1", [], []) + dir2 = self.make_dir("name2", [], []) + self.failIf(self.app.dir_is_unchanged(dir1, dir2)) + + def testSameDirWhenIrrelevantStatFieldsHaveChanged(self): + stat = obnam.utils.make_stat_result(st_ino=42, + st_atime=42, + st_blocks=42, + st_blksize=42, + st_rdev=42) + + dir1 = self.make_dir("name", [], []) + dir2 = self.make_dir("name", [], [], stat=stat) + self.failUnless(self.app.dir_is_unchanged(dir1, dir2)) + + def testChangedDirWhenDevHasChanged(self): + dir1 = self.make_dir("name1", [], []) + dir2 = self.make_dir("name2", [], [], + stat=obnam.utils.make_stat_result(st_dev=105)) + self.failIf(self.app.dir_is_unchanged(dir1, dir2)) + + def testChangedDirWhenModeHasChanged(self): + dir1 = self.make_dir("name1", [], []) + dir2 = self.make_dir("name2", [], [], + stat=obnam.utils.make_stat_result(st_mode=105)) + self.failIf(self.app.dir_is_unchanged(dir1, dir2)) + + def testChangedDirWhenNlinkHasChanged(self): + dir1 = self.make_dir("name1", [], []) + dir2 = self.make_dir("name2", [], [], + stat=obnam.utils.make_stat_result(st_nlink=105)) + self.failIf(self.app.dir_is_unchanged(dir1, dir2)) + + def testChangedDirWhenUidHasChanged(self): + dir1 = self.make_dir("name1", [], []) + dir2 = self.make_dir("name2", [], [], + stat=obnam.utils.make_stat_result(st_uid=105)) + self.failIf(self.app.dir_is_unchanged(dir1, dir2)) + + def testChangedDirWhenGidHasChanged(self): + dir1 = self.make_dir("name1", [], []) + dir2 = self.make_dir("name2", [], [], + stat=obnam.utils.make_stat_result(st_gid=105)) + self.failIf(self.app.dir_is_unchanged(dir1, dir2)) + + def testChangedDirWhenSizeHasChanged(self): + dir1 = self.make_dir("name1", [], []) + dir2 = self.make_dir("name2", [], [], + stat=obnam.utils.make_stat_result(st_size=105)) + self.failIf(self.app.dir_is_unchanged(dir1, dir2)) + + def testChangedDirWhenMtimeHasChanged(self): + dir1 = self.make_dir("name1", [], []) + dir2 = self.make_dir("name2", [], [], + stat=obnam.utils.make_stat_result(st_mtime=105)) + self.failIf(self.app.dir_is_unchanged(dir1, dir2)) + + class ApplicationFindFileByNameTests(unittest.TestCase): def setUp(self): |