changeset 807:4dd1cda16fd0

evolve: add a debugobsstorestat command This commands print multiple some data about the content of the obsstore. This will be usefull to provide some metric and insight for obsolescence marker exchange.
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Thu, 20 Feb 2014 13:59:49 -0800
parents 895fadf6ba3e
children 81a3d9a24e6b
files hgext/evolve.py tests/test-evolve.t
diffstat 2 files changed, 49 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/evolve.py	Wed Feb 19 17:27:45 2014 -0800
+++ b/hgext/evolve.py	Thu Feb 20 13:59:49 2014 -0800
@@ -860,6 +860,41 @@
      _('record the specified user in metadata'), _('USER')),
 ]
 
+@command('debugobsstorestat', [], '')
+def cmddebugobsstorestat(ui, repo):
+    """print statistic about obsolescence markers in the repo"""
+    store = repo.obsstore
+    unfi = repo.unfiltered()
+    nm = unfi.changelog.nodemap
+    ui.write('markers total:              %9i\n' % len(store._all))
+    sucscount = [0, 0 , 0, 0]
+    known = 0
+    metatotallenght = 0
+    metakeys = {}
+    for mark in store:
+        if mark[0] in nm:
+            known += 1
+        nbsucs = len(mark[1])
+        sucscount[min(nbsucs, 3)] += 1
+        metatotallenght += len(mark[3])
+        meta = obsolete.decodemeta(mark[3])
+        for key in meta:
+            metakeys.setdefault(key, 0)
+            metakeys[key] += 1
+
+    ui.write('    for known precursors:   %9i\n' % known)
+    # successors data
+    ui.write('markers with no successors: %9i\n' % sucscount[0])
+    ui.write('              1 successors: %9i\n' % sucscount[1])
+    ui.write('              2 successors: %9i\n' % sucscount[2])
+    ui.write('    more than 2 successors: %9i\n' % sucscount[3])
+    # meta data info
+    ui.write('average meta length:        %9i\n'
+             % (metatotallenght/len(store._all)))
+    ui.write('    available  keys:\n')
+    for key in sorted(metakeys):
+        ui.write('    %15s:        %9i\n' % (key, metakeys[key]))
+
 
 @command('^evolve|stabilize|solve',
     [('n', 'dry-run', False, 'do not perform actions, print what to be done'),
--- a/tests/test-evolve.t	Wed Feb 19 17:27:45 2014 -0800
+++ b/tests/test-evolve.t	Thu Feb 20 13:59:49 2014 -0800
@@ -645,3 +645,17 @@
   4	: add 4 - test
   5	: add 3 - test
   11	: add 1 - test
+
+Test obsstore stat
+
+  $ hg debugobsstorestat
+  markers total:                     10
+      for known precursors:          10
+  markers with no successors:         0
+                1 successors:        10
+                2 successors:         0
+      more than 2 successors:         0
+  average meta length:               27
+      available  keys:
+                 date:               10
+                 user:               10