summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2015-07-17 17:57:47 +0300
committerLars Wirzenius <liw@liw.fi>2015-07-17 17:57:47 +0300
commitfb01a08f4632090fab509718cd67bad32c65d0be (patch)
tree043bfee9a401d2c192fea8df4625414d43e2bc71
parent8f7279ae965fd4d5551da810a3634ed6f9067dc3 (diff)
downloadobnam-fb01a08f4632090fab509718cd67bad32c65d0be.tar.gz
Simplify get_file_children in Green Albatross
-rw-r--r--obnamlib/fmt_ga/client.py15
-rw-r--r--obnamlib/repo_interface.py15
2 files changed, 27 insertions, 3 deletions
diff --git a/obnamlib/fmt_ga/client.py b/obnamlib/fmt_ga/client.py
index 0cee004f..2cca15cb 100644
--- a/obnamlib/fmt_ga/client.py
+++ b/obnamlib/fmt_ga/client.py
@@ -301,9 +301,7 @@ class GAClient(object):
self._require_file_exists(gen_number, filename)
generation = self._lookup_generation_by_gen_number(gen_number)
metadata = generation.get_file_metadata()
- return [
- x for x in metadata
- if self._is_direct_child_of(x, filename)]
+ return metadata.get_file_children(filename)
def _is_direct_child_of(self, child, parent):
return os.path.dirname(child) == parent and child != parent
@@ -588,6 +586,17 @@ class GAFileMetadata(object):
if dir_obj:
dir_obj.clear_file_chunk_ids(basename)
+ def get_file_children(self, filename):
+ assert filename not in self._added_files
+ dir_obj, dirname, basename = self._get_dir_obj(filename)
+ if basename != '.':
+ return []
+ if dir_obj:
+ files = [x for x in dir_obj.get_file_basenames() if x != '.']
+ subdirs = dir_obj.get_subdir_basenames()
+ return [os.path.join(dirname, x) for x in files + subdirs]
+ return []
+
class AddedFiles(object):
diff --git a/obnamlib/repo_interface.py b/obnamlib/repo_interface.py
index 1d6910e2..fdd9381e 100644
--- a/obnamlib/repo_interface.py
+++ b/obnamlib/repo_interface.py
@@ -1901,12 +1901,21 @@ class RepositoryInterfaceTests(unittest.TestCase): # pragma: no cover
def test_new_file_has_no_children(self):
gen_id = self.create_generation()
self.repo.add_file(gen_id, '/foo/bar')
+ self.repo.set_file_key(
+ gen_id, '/foo/bar', obnamlib.REPO_FILE_MODE, stat.S_IFREG | 0700)
self.assertEqual(self.repo.get_file_children(gen_id, '/foo/bar'), [])
def test_gets_file_child(self):
gen_id = self.create_generation()
+
self.repo.add_file(gen_id, '/foo')
+ self.repo.set_file_key(
+ gen_id, '/foo', obnamlib.REPO_FILE_MODE, stat.S_IFDIR | 0700)
+
self.repo.add_file(gen_id, '/foo/bar')
+ self.repo.set_file_key(
+ gen_id, '/foo/bar', obnamlib.REPO_FILE_MODE, stat.S_IFREG | 0700)
+
self.assertEqual(
self.repo.get_file_children(gen_id, '/foo'),
['/foo/bar'])
@@ -1914,8 +1923,14 @@ class RepositoryInterfaceTests(unittest.TestCase): # pragma: no cover
def test_gets_only_immediate_child_for_file(self):
gen_id = self.create_generation()
self.repo.add_file(gen_id, '/')
+ self.repo.set_file_key(
+ gen_id, '/', obnamlib.REPO_FILE_MODE, stat.S_IFDIR | 0700)
self.repo.add_file(gen_id, '/foo')
+ self.repo.set_file_key(
+ gen_id, '/foo', obnamlib.REPO_FILE_MODE, stat.S_IFDIR | 0700)
self.repo.add_file(gen_id, '/foo/bar')
+ self.repo.set_file_key(
+ gen_id, '/foo/bar', obnamlib.REPO_FILE_MODE, stat.S_IFDIR | 0700)
self.assertEqual(
self.repo.get_file_children(gen_id, '/'),
['/foo'])