# HG changeset patch
# User Alpar Juttner <alpar@cs.elte.hu>
# Date 1226315696 0
# Node ID 4b2382fd80ef551b0f503ca15135913029ac45f1
# Parent  2d87dbd7f8c8bd68b7953e4a619e9e6e8f7e1e38
chg-len.py uses the Mercurial API directly

This makes chg-len.py much faster.

diff -r 2d87dbd7f8c8 -r 4b2382fd80ef scripts/chg-len.py
--- a/scripts/chg-len.py	Fri Nov 07 13:14:22 2008 +0000
+++ b/scripts/chg-len.py	Mon Nov 10 11:14:56 2008 +0000
@@ -1,7 +1,8 @@
 #! /usr/bin/env python
 
 import sys
-import os
+
+from mercurial import ui, hg
 
 if len(sys.argv)>1 and sys.argv[1] in ["-h","--help"]:
     print """
@@ -9,32 +10,20 @@
 in the revision graph from revison 0 to the current one.
 """
     exit(0)
-plist = os.popen("HGRCPATH='' hg parents --template='{rev}\n'").readlines()
-if len(plist)>1:
-    print "You are in the process of merging"
-    exit(1)
-PAR = int(plist[0])
 
-f = os.popen("HGRCPATH='' hg log -r 0:tip --template='{rev} {parents}\n'").\
-    readlines()
-REV = -1
-lengths=[]
-for l in f:
-    REV+=1
-    s = l.split()
-    rev = int(s[0])
-    if REV != rev:
-        print "Something is seriously wrong"
-        exit(1)
-    if len(s) == 1:
-        par1 = par2 = rev - 1
-    elif len(s) == 2:
-        par1 = par2 = int(s[1].split(":")[0])
+u = ui.ui()
+r = hg.repository(u, ".")
+N = r.changectx(".").rev()
+lengths=[0]*(N+1)
+for i in range(N+1):
+    p=r.changectx(i).parents()
+    if p[0]:
+        p0=lengths[p[0].rev()]
     else:
-        par1 = int(s[1].split(":")[0])
-        par2 = int(s[2].split(":")[0])
-    if rev == 0:
-        lengths.append(0)
+        p0=-1
+    if len(p)>1 and p[1]:
+        p1=lengths[p[1].rev()]
     else:
-        lengths.append(max(lengths[par1],lengths[par2])+1)
-print lengths[PAR]
+        p1=-1
+    lengths[i]=max(p0,p1)+1
+print lengths[N]