summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2015-05-16 19:02:04 +0300
committerLars Wirzenius <liw@liw.fi>2015-05-16 19:07:48 +0300
commit8009e62bedf764941019a85f40ccac92ed038e57 (patch)
tree0a8cb876f047e7ea5f69bf91f4baf513e540382a
parent959622b90e8140346789d1d90c0b8a78309bce39 (diff)
downloadobnam-8009e62bedf764941019a85f40ccac92ed038e57.tar.gz
Add BagStore.has_bag
-rw-r--r--obnamlib/bag_store.py8
-rw-r--r--obnamlib/bag_store_tests.py9
2 files changed, 17 insertions, 0 deletions
diff --git a/obnamlib/bag_store.py b/obnamlib/bag_store.py
index e95d385d..abe33baf 100644
--- a/obnamlib/bag_store.py
+++ b/obnamlib/bag_store.py
@@ -52,6 +52,14 @@ class BagStore(object):
serialised = self._fs.cat(filename)
return deserialise_bag(serialised)
+ def has_bag(self, bag_id):
+ filename = self._make_bag_filename(bag_id)
+ try:
+ st = self._fs.lstat(filename)
+ except (IOError, OSError) as e: # pragma: no cover
+ return False
+ return st.st_size > 0
+
def get_bag_ids(self):
for pathname, st in self._fs.scan_tree(self._dirname):
if self._is_bag_filename(pathname):
diff --git a/obnamlib/bag_store_tests.py b/obnamlib/bag_store_tests.py
index ff9afbe0..ef06fe87 100644
--- a/obnamlib/bag_store_tests.py
+++ b/obnamlib/bag_store_tests.py
@@ -59,6 +59,15 @@ class BagStoreTests(unittest.TestCase):
store.set_location(self.fs, 'empty')
self.assertEqual(list(store.get_bag_ids()), [])
+ def test_has_a_put_bag(self):
+ self.store.put_bag(self.bag)
+ self.assertTrue(self.store.has_bag(self.bag.get_id()))
+
+ def test_does_not_have_a_removed_bag(self):
+ self.store.put_bag(self.bag)
+ self.store.remove_bag(self.bag.get_id())
+ self.assertFalse(self.store.has_bag(self.bag.get_id()))
+
def test_lists_bag_that_has_been_put(self):
self.store.put_bag(self.bag)
self.assertEqual(list(self.store.get_bag_ids()), [self.bag.get_id()])