[Lemon-commits] Alpar Juttner: chg-len.py uses the Mercurial API...
Lemon HG
hg at lemon.cs.elte.hu
Mon Nov 10 12:18:59 CET 2008
details: http://lemon.cs.elte.hu/hg/lemon/rev/4b2382fd80ef
changeset: 390:4b2382fd80ef
user: Alpar Juttner <alpar [at] cs.elte.hu>
date: Mon Nov 10 11:14:56 2008 +0000
description:
chg-len.py uses the Mercurial API directly
This makes chg-len.py much faster.
diffstat:
1 file changed, 16 insertions(+), 27 deletions(-)
scripts/chg-len.py | 43 ++++++++++++++++---------------------------
diffs (60 lines):
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]
More information about the Lemon-commits
mailing list