diff options
author | Lars Wirzenius <liw@liw.fi> | 2015-07-17 17:57:47 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2015-07-17 17:57:47 +0300 |
commit | fb01a08f4632090fab509718cd67bad32c65d0be (patch) | |
tree | 043bfee9a401d2c192fea8df4625414d43e2bc71 | |
parent | 8f7279ae965fd4d5551da810a3634ed6f9067dc3 (diff) | |
download | obnam-fb01a08f4632090fab509718cd67bad32c65d0be.tar.gz |
Simplify get_file_children in Green Albatross
-rw-r--r-- | obnamlib/fmt_ga/client.py | 15 | ||||
-rw-r--r-- | obnamlib/repo_interface.py | 15 |
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']) |