##// END OF EJS Templates
icasefs: make case-folding collision detection as rename aware (issue3370)...
icasefs: make case-folding collision detection as rename aware (issue3370) if the file in target context causes case-folding collision against one in working context, current implementation aborts merging with it, even thouhg collding one (in target) is the file renamed from collided one (in working). this patch uses file copy information to know whether colliding file is renamed from collided one or not: if so, collision between them is ignored. this patch also avoids collision detection between current context and target context, if working context is clean (with --check/-c) or will be clean (with --clean/-C).

File last commit:

r16414:e8d37b78 default
r16478:cbf2ea2f stable
Show More
perf.py
227 lines | 6.8 KiB | text/x-python | PythonLexer
Matt Mackall
Add contrib/perf.py for performance testing
r7366 # perf.py - performance test routines
Dirkjan Ochtman
help: add/fix docstrings for a bunch of extensions
r8873 '''helper extension to measure performance'''
Matt Mackall
Add contrib/perf.py for performance testing
r7366
Bryan O'Sullivan
parsers: use base-16 trie for faster node->rev mapping...
r16414 from mercurial import cmdutil, scmutil, util, match, commands
Matt Mackall
Add contrib/perf.py for performance testing
r7366 import time, os, sys
Patrick Mezard
contrib/perf: profile diff of working directory changes
r9826 def timer(func, title=None):
Matt Mackall
Add contrib/perf.py for performance testing
r7366 results = []
begin = time.time()
count = 0
Martin Geisler
check-code: flag 0/1 used as constant Boolean expression
r14494 while True:
Matt Mackall
Add contrib/perf.py for performance testing
r7366 ostart = os.times()
cstart = time.time()
r = func()
cstop = time.time()
ostop = os.times()
count += 1
a, b = ostart, ostop
results.append((cstop - cstart, b[0] - a[0], b[1]-a[1]))
if cstop - begin > 3 and count >= 100:
break
if cstop - begin > 10 and count >= 3:
break
Patrick Mezard
contrib/perf: profile diff of working directory changes
r9826 if title:
sys.stderr.write("! %s\n" % title)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 if r:
sys.stderr.write("! result: %s\n" % r)
m = min(results)
sys.stderr.write("! wall %f comb %f user %f sys %f (best of %d)\n"
% (m[0], m[1] + m[2], m[1], m[2], count))
def perfwalk(ui, repo, *pats):
try:
Matt Mackall
scmutil: switch match users to supplying contexts...
r14671 m = scmutil.match(repo[None], pats, {})
Augie Fackler
dirstate: don't check state of subrepo directories
r10176 timer(lambda: len(list(repo.dirstate.walk(m, [], True, False))))
Matt Mackall
Add contrib/perf.py for performance testing
r7366 except:
try:
Matt Mackall
scmutil: switch match users to supplying contexts...
r14671 m = scmutil.match(repo[None], pats, {})
Matt Mackall
many, many trivial check-code fixups
r10282 timer(lambda: len([b for a, b, c in repo.dirstate.statwalk([], m)]))
Matt Mackall
Add contrib/perf.py for performance testing
r7366 except:
timer(lambda: len(list(cmdutil.walk(repo, pats, {}))))
def perfstatus(ui, repo, *pats):
#m = match.always(repo.root, repo.getcwd())
Benoit Boissinot
regression: missing arg from 24ce8f0c0a39 dirstate.{walk,status} changes
r10493 #timer(lambda: sum(map(len, repo.dirstate.status(m, [], False, False, False))))
Matt Mackall
Add contrib/perf.py for performance testing
r7366 timer(lambda: sum(map(len, repo.status())))
def perfheads(ui, repo):
Matt Mackall
perf: tweak tests for testing index performance improvements
r16260 timer(lambda: len(repo.changelog.headrevs()))
Matt Mackall
Add contrib/perf.py for performance testing
r7366
def perftags(ui, repo):
import mercurial.changelog, mercurial.manifest
def t():
repo.changelog = mercurial.changelog.changelog(repo.sopener)
repo.manifest = mercurial.manifest.manifest(repo.sopener)
Greg Ward
localrepo: rename in-memory tag cache instance attributes (issue548)....
r9146 repo._tags = None
Matt Mackall
Add contrib/perf.py for performance testing
r7366 return len(repo.tags())
timer(t)
def perfdirstate(ui, repo):
"a" in repo.dirstate
def d():
repo.dirstate.invalidate()
"a" in repo.dirstate
timer(d)
def perfdirstatedirs(ui, repo):
"a" in repo.dirstate
def d():
"a" in repo.dirstate._dirs
del repo.dirstate._dirs
timer(d)
def perfmanifest(ui, repo):
def d():
t = repo.manifest.tip()
m = repo.manifest.read(t)
repo.manifest.mapcache = None
repo.manifest._cache = None
timer(d)
Matt Mackall
perf: add perfchangeset to time changeset parsing
r16262 def perfchangeset(ui, repo, rev):
n = repo[rev].node()
def d():
c = repo.changelog.read(n)
Matt Mackall
perf: add a changeset test
r16266 #repo.changelog._cache = None
Matt Mackall
perf: add perfchangeset to time changeset parsing
r16262 timer(d)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 def perfindex(ui, repo):
Matt Mackall
perf: make perfindex results useful on hg with lazyparser
r13255 import mercurial.revlog
Matt Mackall
perf: restore lazyindex hack...
r13277 mercurial.revlog._prereadsize = 2**24 # disable lazy parser in old hg
Matt Mackall
revlog: only build the nodemap on demand
r13254 n = repo["tip"].node()
Matt Mackall
Add contrib/perf.py for performance testing
r7366 def d():
Matt Mackall
perf: tweak tests for testing index performance improvements
r16260 cl = mercurial.revlog.revlog(repo.sopener, "00changelog.i")
cl.rev(n)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 timer(d)
def perfstartup(ui, repo):
cmd = sys.argv[0]
def d():
os.system("HGRCPATH= %s version -q > /dev/null" % cmd)
timer(d)
def perfparents(ui, repo):
nl = [repo.changelog.node(i) for i in xrange(1000)]
def d():
for n in nl:
repo.changelog.parents(n)
timer(d)
def perflookup(ui, repo, rev):
timer(lambda: len(repo.lookup(rev)))
Matt Mackall
perf: node lookup
r16309 def perfnodelookup(ui, repo, rev):
import mercurial.revlog
mercurial.revlog._prereadsize = 2**24 # disable lazy parser in old hg
n = repo[rev].node()
def d():
cl = mercurial.revlog.revlog(repo.sopener, "00changelog.i")
cl.rev(n)
timer(d)
Bryan O'Sullivan
parsers: use base-16 trie for faster node->rev mapping...
r16414 def perfnodelookup(ui, repo, rev):
import mercurial.revlog
mercurial.revlog._prereadsize = 2**24 # disable lazy parser in old hg
n = repo[rev].node()
cl = mercurial.revlog.revlog(repo.sopener, "00changelog.i")
# behave somewhat consistently across internal API changes
if util.safehasattr(cl, 'clearcaches'):
clearcaches = cl.clearcaches
elif util.safehasattr(cl, '_nodecache'):
from mercurial.node import nullid, nullrev
def clearcaches():
cl._nodecache = {nullid: nullrev}
cl._nodepos = None
else:
def clearcaches():
pass
def d():
cl.rev(n)
clearcaches()
timer(d)
Alexander Solovyov
perf.perflog: add option to follow renames
r9932 def perflog(ui, repo, **opts):
Alexander Solovyov
contrib: add perflog and perftemplating commands to perf extension
r7872 ui.pushbuffer()
Alexander Solovyov
perf.perflog: add option to follow renames
r9932 timer(lambda: commands.log(ui, repo, rev=[], date='', user='',
copies=opts.get('rename')))
Alexander Solovyov
contrib: add perflog and perftemplating commands to perf extension
r7872 ui.popbuffer()
def perftemplating(ui, repo):
ui.pushbuffer()
timer(lambda: commands.log(ui, repo, rev=[], date='', user='',
template='{date|shortdate} [{rev}:{node|short}]'
' {author|person}: {desc|firstline}\n'))
ui.popbuffer()
Matt Mackall
perf: add case collision auditor perf
r16386 def perfcca(ui, repo):
timer(lambda: scmutil.casecollisionauditor(ui, False, repo[None]))
Bryan O'Sullivan
perf: time fncache read and write performance
r16403 def perffncacheload(ui, repo):
from mercurial import scmutil, store
s = store.store(set(['store','fncache']), repo.path, scmutil.opener)
def d():
s.fncache._load()
timer(d)
def perffncachewrite(ui, repo):
from mercurial import scmutil, store
s = store.store(set(['store','fncache']), repo.path, scmutil.opener)
s.fncache._load()
def d():
s.fncache._dirty = True
s.fncache.write()
timer(d)
Patrick Mezard
contrib/perf: profile diff of working directory changes
r9826 def perfdiffwd(ui, repo):
"""Profile diff of working directory changes"""
options = {
'w': 'ignore_all_space',
'b': 'ignore_space_change',
'B': 'ignore_blank_lines',
}
for diffopt in ('', 'w', 'b', 'B', 'wB'):
opts = dict((options[c], '1') for c in diffopt)
def d():
ui.pushbuffer()
commands.diff(ui, repo, **opts)
ui.popbuffer()
title = 'diffopts: %s' % (diffopt and ('-' + diffopt) or 'none')
timer(d, title)
Pradeepkumar Gayam
perf: add perfrevlog function to check performance of revlog
r11694 def perfrevlog(ui, repo, file_, **opts):
from mercurial import revlog
dist = opts['dist']
def d():
r = revlog.revlog(lambda fn: open(fn, 'rb'), file_)
for x in xrange(0, len(r), dist):
r.revision(r.node(x))
timer(d)
Matt Mackall
Add contrib/perf.py for performance testing
r7366 cmdtable = {
Matt Mackall
perf: add case collision auditor perf
r16386 'perfcca': (perfcca, []),
Bryan O'Sullivan
perf: time fncache read and write performance
r16403 'perffncacheload': (perffncacheload, []),
'perffncachewrite': (perffncachewrite, []),
Matt Mackall
Add contrib/perf.py for performance testing
r7366 'perflookup': (perflookup, []),
Matt Mackall
perf: node lookup
r16309 'perfnodelookup': (perfnodelookup, []),
Matt Mackall
Add contrib/perf.py for performance testing
r7366 'perfparents': (perfparents, []),
'perfstartup': (perfstartup, []),
'perfstatus': (perfstatus, []),
'perfwalk': (perfwalk, []),
'perfmanifest': (perfmanifest, []),
Matt Mackall
perf: add perfchangeset to time changeset parsing
r16262 'perfchangeset': (perfchangeset, []),
Matt Mackall
Add contrib/perf.py for performance testing
r7366 'perfindex': (perfindex, []),
'perfheads': (perfheads, []),
'perftags': (perftags, []),
'perfdirstate': (perfdirstate, []),
'perfdirstatedirs': (perfdirstate, []),
Alexander Solovyov
perf.perflog: add option to follow renames
r9932 'perflog': (perflog,
[('', 'rename', False, 'ask log to follow renames')]),
Alexander Solovyov
contrib: add perflog and perftemplating commands to perf extension
r7872 'perftemplating': (perftemplating, []),
Patrick Mezard
contrib/perf: profile diff of working directory changes
r9826 'perfdiffwd': (perfdiffwd, []),
Nicolas Dumazet
perf: break down long line
r11713 'perfrevlog': (perfrevlog,
[('d', 'dist', 100, 'distance between the revisions')],
"[INDEXFILE]"),
Matt Mackall
Add contrib/perf.py for performance testing
r7366 }