[PATCH 6 of 6] shrink-revlog: add accounting of suboptimal nodes to the new algorithms

Greg Ward greg-hg at gerg.ca
Sun Mar 7 12:58:01 CST 2010


# HG changeset patch
# User Greg Ward <greg-hg at gerg.ca>
# Date 1267986674 18000
# Node ID b4cdb9640896067683af279ae67c4923342e03b8
# Parent  387ca8b2956255b86c653e9bb0ead2f1e0b9a5bc
shrink-revlog: add accounting of suboptimal nodes to the new algorithms.

diff --git a/contrib/shrink-revlog.py b/contrib/shrink-revlog.py
--- a/contrib/shrink-revlog.py
+++ b/contrib/shrink-revlog.py
@@ -181,6 +181,7 @@
     visit = list(heads)
     visit.sort(reverse=True)
     finished = set()
+    suboptimal = 0
 
     while visit:
         cur = visit[-1]
@@ -189,9 +190,17 @@
                 visit.append(p)
                 break
         else:
+            curparents = rl.parentrevs(curr)
+            if result and result[-1] != curparents[0]:
+                suboptimal += 1
+
             result.append(cur)
             finished.add(cur)
             visit.pop()
+
+    ui.write('\n')
+    ui.write('%d suboptimal\n' % suboptimal)
+
     return result
 
 def toposort_postorderreverse(ui, rl):
@@ -218,11 +227,13 @@
     finally:
         ui.write('\n')
 
-    ui.write('sorting ...\n')
+    ui.write('sorting ...')
     result = []
     visit = list(roots)
     visit.sort()
     finished = set()
+    suboptimal = 0
+
     while visit:
         cur = visit[-1]
         for p in children[cur]:
@@ -230,9 +241,20 @@
                 visit.append(p)
                 break
         else:
+            # if cur is not the first parent of its successor, then the
+            # successor is a suboptimal node
+            if result:
+                succparents = rl.parentrevs(result[-1])
+                if succparents[0] != curr:
+                    suboptimal += 1
+
             result.append(cur)
             finished.add(cur)
             visit.pop()
+
+    ui.write('\n')
+    ui.write('%d suboptimal\n' % suboptimal)
+
     result.reverse()
     return result
 


More information about the Mercurial-devel mailing list