diff hgext3rd/pullbundle.py @ 4144:b5cd26712e4b

pullbundle: add some information on the cached change This also adds a way to skip "caching" smaller range in the debugcommand (not in the extensions itself).
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 25 Sep 2018 19:35:33 +0200
parents 2ddd8785f8d7
children 08b3c370e8b3
line wrap: on
line diff
--- a/hgext3rd/pullbundle.py	Tue Sep 25 18:41:51 2018 +0200
+++ b/hgext3rd/pullbundle.py	Tue Sep 25 19:35:33 2018 +0200
@@ -448,6 +448,7 @@
 
 @command('^debugpullbundlecacheoverlap',
          [('', 'count', 100, _('of "client" pulling')),
+          ('', 'min-cache', 1, _('minimum size of cached bundle')),
          ],
          _('hg debugpullbundlecacheoverlap [--client 100] REVSET'))
 def debugpullbundlecacheoverlap(ui, repo, *revs, **opts):
@@ -461,6 +462,7 @@
     if not revs:
         raise error.Abort('No revision selected')
     count = opts['count']
+    min_cache = opts['min_cache']
 
     bundlehits = collections.defaultdict(lambda: 0)
     pullstats = []
@@ -469,6 +471,8 @@
 
     repo.ui.write("gathering %d sample pulls within %d revisions\n"
                   % (count, len(actionrevs)))
+    if 1 < min_cache:
+        repo.ui.write("  not caching ranges smaller than %d changesets\n" % min_cache)
     for i in xrange(count):
         repo.ui.progress('gathering data', i, total=count)
         outgoing = takeonesample(repo, actionrevs)
@@ -476,17 +480,21 @@
         hitranges = 0
         hitchanges = 0
         totalchanges = 0
+        largeranges = []
         for rangeid, __ in ranges:
             length = rlen(rangeid)
             totalchanges += length
             if bundlehits[rangeid]:
                 hitranges += 1
                 hitchanges += rlen(rangeid)
-            bundlehits[rangeid] += 1
+            if min_cache <= length:
+                bundlehits[rangeid] += 1
+                largeranges.append(rangeid)
+
         stats = (len(outgoing.missing),
                  totalchanges,
                  hitchanges,
-                 len(ranges),
+                 len(largeranges),
                  hitranges,
                  )
         pullstats.append(stats)
@@ -503,7 +511,10 @@
         sizes.append(entry[0])
         changesmissing.append(entry[1] - entry[2])
         changesratio.append(entry[2] / float(entry[1]))
-        rangesratio.append(entry[4] / float(entry[3]))
+        if entry[3]:
+            rangesratio.append(entry[4] / float(entry[3]))
+        else:
+            rangesratio.append(1)
         bundlecount.append(entry[3])
         totalchanges += entry[1]
         totalcached += entry[2]
@@ -511,6 +522,8 @@
     cachedsizes = []
     cachedhits = []
     for rangeid, hits in bundlehits.items():
+        if hits <= 0:
+            continue
         length = rlen(rangeid)
         cachedsizes.append(length)
         cachedhits.append(hits)