summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2017-11-01 16:31:35 +0100
committerMichał Górny <mgorny@gentoo.org>2017-11-01 16:31:35 +0100
commitc3391d185af458b65c668c9902f596f35bf93bff (patch)
tree3ed50d9564fa9781ef42b7e4fc0e1dd1e40cb009
parentd0733ecf55f76c4700eb116439c4fd635936f956 (diff)
downloadgemato-c3391d185af458b65c668c9902f596f35bf93bff.tar.gz
recursiveloader: Support creating sub-Manifest
-rw-r--r--gemato/recursiveloader.py15
-rw-r--r--tests/test_recursiveloader.py13
2 files changed, 27 insertions, 1 deletions
diff --git a/gemato/recursiveloader.py b/gemato/recursiveloader.py
index 65dd424..a52f333 100644
--- a/gemato/recursiveloader.py
+++ b/gemato/recursiveloader.py
@@ -519,7 +519,9 @@ class ManifestRecursiveLoader(object):
self.updated_manifests -= set(gemato.compression
.get_potential_compressed_names('Manifest'))
# at this point, the list should be empty
- assert not self.updated_manifests
+ assert not self.updated_manifests, (
+ "Unlinked but updated Manifests: {}".format(
+ self.updated_manifests))
def update_entry_for_path(self, path, new_entry_type='DATA',
hashes=None):
@@ -931,3 +933,14 @@ class ManifestRecursiveLoader(object):
self.loaded_manifests[mpath].entries.remove(fe)
self.updated_manifests.add(mpath)
+
+ def create_manifest(self, path):
+ """
+ Create a new empty sub-Manifest instance at relative path @path.
+ The file will not be written until save_manifests(). No MANIFEST
+ entry for the file will be created.
+
+ Returns the new ManifestFile instance.
+ """
+
+ return self.load_manifest(path, allow_create=True)
diff --git a/tests/test_recursiveloader.py b/tests/test_recursiveloader.py
index 366522a..c115763 100644
--- a/tests/test_recursiveloader.py
+++ b/tests/test_recursiveloader.py
@@ -2649,6 +2649,19 @@ MANIFEST z/Manifest 0 MD5 d41d8cd98f00b204e9800998ecf8427e
m.save_manifests()
m.assert_directory_verifies()
+ def test_create_manifest(self):
+ m = gemato.recursiveloader.ManifestRecursiveLoader(
+ os.path.join(self.dir, 'Manifest'))
+ self.assertIsNotNone(m.create_manifest('a/y/Manifest'))
+ self.assertFalse(os.path.exists(os.path.join(
+ self.dir, 'a/y/Manifest')))
+ m.loaded_manifests['Manifest'].entries.append(
+ gemato.manifest.ManifestEntryMANIFEST(
+ 'a/y/Manifest', 0, {}))
+ m.save_manifests()
+ self.assertTrue(os.path.exists(os.path.join(
+ self.dir, 'a/y/Manifest')))
+
class AddingToMultipleManifestsTest(TempDirTestCase):
"""