summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--morphlib/morphset.py20
-rw-r--r--morphlib/morphset_tests.py6
2 files changed, 26 insertions, 0 deletions
diff --git a/morphlib/morphset.py b/morphlib/morphset.py
index 468bcbe9..10583326 100644
--- a/morphlib/morphset.py
+++ b/morphlib/morphset.py
@@ -202,3 +202,23 @@ class MorphologySet(object):
self._traverse_specs(process_spec, wanted_spec)
+ def list_refs(self):
+ '''Return a set of all the (repo, ref) pairs in the MorphologySet.
+
+ This does not dirty the morphologies so they do not need to be
+ written back to the disk.
+
+ '''
+ known = set()
+
+ def wanted_spec(m, kind, spec):
+ return (spec['repo'], spec['ref']) not in known
+
+ def process_spec(spec):
+ known.add((spec['repo'], spec['ref']))
+ return False
+
+ self._traverse_specs(process_spec, wanted_spec)
+
+ return known
+
diff --git a/morphlib/morphset_tests.py b/morphlib/morphset_tests.py
index 69a7057f..24f3d91a 100644
--- a/morphlib/morphset_tests.py
+++ b/morphlib/morphset_tests.py
@@ -185,3 +185,9 @@ class MorphologySetTests(unittest.TestCase):
}
])
+ def test_list_refs(self):
+ self.morphs.add_morphology(self.system)
+ self.morphs.add_morphology(self.stratum)
+ self.assertEqual(sorted(self.morphs.list_refs()),
+ [('test:foo-chunk', 'master'),
+ ('test:morphs', 'master')])