diff options
author | Richard Maw <richard.maw@codethink.co.uk> | 2013-09-19 13:29:48 +0000 |
---|---|---|
committer | Richard Maw <richard.maw@codethink.co.uk> | 2013-09-24 10:35:21 +0000 |
commit | 68cc00437b4804d5fac3a96ea9aa7f50ce9609ab (patch) | |
tree | 6254abaeb9c626409a0cd1e2f18a15964070d232 | |
parent | b26aaa04c61ca93b6b8b89b0bd693723f4339b42 (diff) | |
download | morph-68cc00437b4804d5fac3a96ea9aa7f50ce9609ab.tar.gz |
MorphSet: add unpetrify_all() method
Add an unpetrify method to MorphSet, since it's a good place to put it
and may be needed for merge.
-rw-r--r-- | morphlib/morphset.py | 13 | ||||
-rw-r--r-- | morphlib/morphset_tests.py | 14 |
2 files changed, 27 insertions, 0 deletions
diff --git a/morphlib/morphset.py b/morphlib/morphset.py index 2343cbae..3c07d58e 100644 --- a/morphlib/morphset.py +++ b/morphlib/morphset.py @@ -272,3 +272,16 @@ class MorphologySet(object): self._traverse_specs(process_chunk_spec, wanted_chunk_spec) + def unpetrify_all(self): + '''If a spec is petrified, unpetrify it. + + ''' + + def wanted_spec(m, kind, spec): + return ('unpetrify-ref' in spec and + morphlib.git.is_valid_sha1(spec['ref'])) + def process_spec(m, kind, spec): + spec['ref'] = spec.pop('unpetrify-ref') + return True + + self._traverse_specs(process_spec, wanted_spec) diff --git a/morphlib/morphset_tests.py b/morphlib/morphset_tests.py index fa8fa030..d6908844 100644 --- a/morphlib/morphset_tests.py +++ b/morphlib/morphset_tests.py @@ -222,3 +222,17 @@ class MorphologySetTests(unittest.TestCase): } ]) + def test_unpetrify_all(self): + self.morphs.add_morphology(self.system) + self.morphs.add_morphology(self.stratum) + self.morphs.petrify_chunks({('test:foo-chunk', 'master'): '0'*40}) + self.morphs.unpetrify_all() + self.assertEqual( + self.stratum['chunks'], + [ + { + 'repo': 'test:foo-chunk', + 'ref': 'master', + 'morph': 'foo-chunk', + } + ]) |