# HG changeset patch # User Alpar Juttner # 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]