summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Maw <richard.maw@codethink.co.uk>2013-09-19 13:29:48 +0000
committerRichard Maw <richard.maw@codethink.co.uk>2013-09-24 10:35:21 +0000
commit68cc00437b4804d5fac3a96ea9aa7f50ce9609ab (patch)
tree6254abaeb9c626409a0cd1e2f18a15964070d232
parentb26aaa04c61ca93b6b8b89b0bd693723f4339b42 (diff)
downloadmorph-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.py13
-rw-r--r--morphlib/morphset_tests.py14
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',
+ }
+ ])