hgext3rd/evolve/stablerange.py
changeset 2232 6b95bcc402fe
parent 2231 f872738bb5b3
child 2233 e922cd76804a
--- a/hgext3rd/evolve/stablerange.py	Fri Mar 24 10:12:02 2017 +0100
+++ b/hgext3rd/evolve/stablerange.py	Fri Mar 24 10:22:38 2017 +0100
@@ -161,6 +161,7 @@
     [
         ('', 'rev', [], 'operate on (rev, 0) ranges for rev in REVS'),
         ('', 'subranges', False, 'recursively display data for subranges too'),
+        ('', 'verify', False, 'checks subranges content (EXPENSIVE)'),
     ],
     _(''))
 def debugstablerange(ui, repo, **opts):
@@ -185,6 +186,7 @@
         ranges = [(r, 0) for r in revs]
     if ui.verbose:
         template = '%s-%d (%d, %d, %d)'
+
         def _rangestring(repo, rangeid):
             return template % (
                 short(node(rangeid[0])),
@@ -195,6 +197,7 @@
             )
     else:
         template = '%s-%d'
+
         def _rangestring(repo, rangeid):
             return template % (
                 short(node(rangeid[0])),
@@ -205,7 +208,19 @@
         subs = subranges(unfi, r)
         subsstr = ', '.join(_rangestring(unfi, s) for s in subs)
         rstr = _rangestring(unfi, r)
-        ui.status('%s - %s\n' % (rstr, subsstr))
+        if opts['verify']:
+            status = 'leaf'
+            if 1 < length(unfi, r):
+                status = 'complete'
+                revs = set(stablerange.revsfromrange(unfi, r))
+                subrevs = set()
+                for s in subs:
+                    subrevs.update(stablerange.revsfromrange(unfi, s))
+                if revs != subrevs:
+                    status = 'missing'
+            ui.status('%s [%s] - %s\n' % (rstr, status, subsstr))
+        else:
+            ui.status('%s - %s\n' % (rstr, subsstr))
 
 class stablerange(object):