From c3391d185af458b65c668c9902f596f35bf93bff Mon Sep 17 00:00:00 2001 From: Michał Górny Date: Wed, 1 Nov 2017 16:31:35 +0100 Subject: recursiveloader: Support creating sub-Manifest --- gemato/recursiveloader.py | 15 ++++++++++++++- tests/test_recursiveloader.py | 13 +++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) 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): """ -- cgit v1.2.3