summaryrefslogtreecommitdiff
path: root/obnam
diff options
context:
space:
mode:
authorLars Wirzenius <liw@gytha>2008-03-22 22:30:19 +0200
committerLars Wirzenius <liw@gytha>2008-03-22 22:30:19 +0200
commitd07015c9d06da28e2bcc7687b923111c8540614d (patch)
tree7db3c65c3767110d8260cdab9cabf323c4f50803 /obnam
parentc996f7cc0ea040f2a70108b12017988cc1ab3e89 (diff)
downloadobnam-d07015c9d06da28e2bcc7687b923111c8540614d.tar.gz
Have the generation object obnam.Application.backup returns be filled with useful stuff.
Diffstat (limited to 'obnam')
-rw-r--r--obnam/app.py19
-rw-r--r--obnam/appTests.py46
2 files changed, 60 insertions, 5 deletions
diff --git a/obnam/app.py b/obnam/app.py
index 62dd9ab5..808536c5 100644
--- a/obnam/app.py
+++ b/obnam/app.py
@@ -235,7 +235,14 @@ class Application:
def backup_one_root(self, root):
"""Backup one root for the next generation."""
+
+ if not os.path.isdir(root):
+ raise obnam.ObnamException("Not a directory: %s" % root)
+ # FIXME: This needs to be able to handle non-directories, too!
+
subdirs_for_dir = {}
+ root_object = None
+
for tuple in obnam.walk.depth_first(root, prune=self.prune):
dirname, dirnames, filenames = tuple
@@ -248,14 +255,22 @@ class Application:
if parent not in subdirs_for_dir:
subdirs_for_dir[parent] = []
subdirs_for_dir[parent].append(dir)
+ else:
+ root_object = dir
if dirname in subdirs_for_dir:
del subdirs_for_dir[dirname]
+ return root_object
+
def backup(self, roots):
"""Backup all the roots."""
+
+ root_objs = []
for root in roots:
- self.backup_one_root(root)
+ root_objs.append(self.backup_one_root(root))
- gen = obnam.obj.GenerationObject(id=obnam.obj.object_id_new())
+ dirrefs = [o.get_id() for o in root_objs]
+ gen = obnam.obj.GenerationObject(id=obnam.obj.object_id_new(),
+ dirrefs=dirrefs)
return gen
diff --git a/obnam/appTests.py b/obnam/appTests.py
index 6e23a751..f5f34de1 100644
--- a/obnam/appTests.py
+++ b/obnam/appTests.py
@@ -274,6 +274,15 @@ class ApplicationBackupOneRootTests(unittest.TestCase):
def tearDown(self):
shutil.rmtree(self.dirname)
+ def testRaisesErrorForNonDirectory(self):
+ self.failUnlessRaises(obnam.ObnamException,
+ self.app.backup_one_root,
+ self.abs("file0"))
+
+ def testReturnsDirObject(self):
+ ret = self.app.backup_one_root(self.dirname)
+ self.failUnless(isinstance(ret, obnam.obj.DirObject))
+
def testWalksToTheRightDirectories(self):
self.app.backup_one_root(self.dirname)
self.failUnlessEqual(self.dirs_walked, list(reversed(self.dirs)))
@@ -285,19 +294,50 @@ class ApplicationBackupOneRootTests(unittest.TestCase):
class ApplicationBackupTests(unittest.TestCase):
+ _tree = (
+ "file0",
+ "pink/",
+ "pink/file1",
+ "pink/dir1/",
+ "pink/dir1/dir2/",
+ "pink/dir1/dir2/file2",
+ "pretty/",
+ )
+
+ def abs(self, relative_name):
+ return os.path.join(self.dirname, relative_name)
+
+ def mktree(self, tree):
+ for name in tree:
+ if name.endswith("/"):
+ name = self.abs(name[:-1])
+ os.mkdir(name)
+ else:
+ name = self.abs(name)
+ file(name, "w").close()
+
def mock_backup_one_root(self, root):
self.roots_backed_up.append(root)
+ return self.real_backup_one_root(root)
def setUp(self):
+ self.dirname = tempfile.mkdtemp()
+ self.mktree(self._tree)
self.roots_backed_up = []
context = obnam.context.Context()
self.app = obnam.Application(context)
+ self.real_backup_one_root = self.app.backup_one_root
self.app.backup_one_root = self.mock_backup_one_root
def testCallsBackupOneRootForEachRoot(self):
- self.app.backup(["/pink", "/pretty"])
- self.failUnlessEqual(self.roots_backed_up, ["/pink", "/pretty"])
+ dirs = [self.abs(x) for x in ["pink", "pretty"]]
+ self.app.backup(dirs)
+ self.failUnlessEqual(self.roots_backed_up, dirs)
def testReturnsGenerationObject(self):
- ret = self.app.backup(["/pink", "/pretty"])
+ ret = self.app.backup([self.abs("pink"), self.abs("pretty")])
self.failUnless(isinstance(ret, obnam.obj.GenerationObject))
+
+ def testReturnsGenerationWithTheRightRootObjects(self):
+ gen = self.app.backup([self.abs("pink"), self.abs("pretty")])
+ self.failUnlessEqual(len(gen.get_dirrefs()), 2)