Mercurial > hg
view tests/test-bundle2.t @ 20836:a8b4541bb961
grep: reuse the first "util.binary()" result for efficiency
Before this patch, to check whether the file in the specified revision
is binary or not, "util.binary()" is invoked via internal function
"binary()" of "hg grep" once per a line of "hg grep" output, even
though binary-ness is not changed in the same file.
This patch reuses the first "util.binary()" invocation result by
annotating internal function "binary()" with "@util.cachefunc".
Performance improvement measured by "hgperf grep -r 88d8e568add1 vfs
mercurial/scmutil.py":
before this patch:
! wall 0.024000 comb 0.015600 user 0.015600 sys 0.000000 (best of 118)
after this patch:
! wall 0.023000 comb 0.015600 user 0.015600 sys 0.000000 (best of 123)
Status of recent(88d8e568add1) "mercurial/scmutil.py":
# of lines: 919 (may affect cost of search)
# of bytes: 29633 (may affect cost of "util.binary()")
# of matches: 22 (may affect frequency of "util.binary()")
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Sat, 15 Feb 2014 19:52:36 +0900 |
parents | 8532f5e1b9df |
children | cff562fe77a0 |
line wrap: on
line source
Create an extension to test bundle2 API $ cat > bundle2.py << EOF > """A small extension to test bundle2 implementation > > Current bundle2 implementation is far too limited to be used in any core > code. We still need to be able to test it while it grow up. > """ > > import sys > from mercurial import cmdutil > from mercurial import util > from mercurial import bundle2 > cmdtable = {} > command = cmdutil.command(cmdtable) > > @command('bundle2', > [('', 'param', [], 'stream level parameter'),], > '') > def cmdbundle2(ui, repo, **opts): > """write a bundle2 container on standard ouput""" > bundler = bundle2.bundle20() > for p in opts['param']: > p = p.split('=', 1) > try: > bundler.addparam(*p) > except ValueError, exc: > raise util.Abort('%s' % exc) > > for chunk in bundler.getchunks(): > ui.write(chunk) > > @command('unbundle2', [], '') > def cmdunbundle2(ui, repo): > """read a bundle2 container from standard input""" > unbundler = bundle2.unbundle20(sys.stdin) > ui.write('options count: %i\n' % len(unbundler.params)) > for key in sorted(unbundler.params): > ui.write('- %s\n' % key) > value = unbundler.params[key] > if value is not None: > ui.write(' %s\n' % value) > parts = list(unbundler) > ui.write('parts count: %i\n' % len(parts)) > EOF $ cat >> $HGRCPATH << EOF > [extensions] > bundle2=$TESTTMP/bundle2.py > EOF The extension requires a repo (currently unused) $ hg init main $ cd main $ touch a $ hg add a $ hg commit -m 'a' Empty bundle ================= - no option - no parts Test bundling $ hg bundle2 HG20\x00\x00\x00\x00 (no-eol) (esc) Test unbundling $ hg bundle2 | hg unbundle2 options count: 0 parts count: 0 Test old style bundle are detected and refused $ hg bundle --all ../bundle.hg 1 changesets found $ hg unbundle2 < ../bundle.hg abort: unknown bundle version 10 [255] Test parameters ================= - some options - no parts advisory parameters, no value ------------------------------- Simplest possible parameters form Test generation simple option $ hg bundle2 --param 'caution' HG20\x00\x07caution\x00\x00 (no-eol) (esc) Test unbundling $ hg bundle2 --param 'caution' | hg unbundle2 options count: 1 - caution parts count: 0 Test generation multiple option $ hg bundle2 --param 'caution' --param 'meal' HG20\x00\x0ccaution meal\x00\x00 (no-eol) (esc) Test unbundling $ hg bundle2 --param 'caution' --param 'meal' | hg unbundle2 options count: 2 - caution - meal parts count: 0 advisory parameters, with value ------------------------------- Test generation $ hg bundle2 --param 'caution' --param 'meal=vegan' --param 'elephants' HG20\x00\x1ccaution meal=vegan elephants\x00\x00 (no-eol) (esc) Test unbundling $ hg bundle2 --param 'caution' --param 'meal=vegan' --param 'elephants' | hg unbundle2 options count: 3 - caution - elephants - meal vegan parts count: 0 parameter with special char in value --------------------------------------------------- Test generation $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple HG20\x00)e%7C%21%207/=babar%25%23%3D%3Dtutu simple\x00\x00 (no-eol) (esc) Test unbundling $ hg bundle2 --param 'e|! 7/=babar%#==tutu' --param simple | hg unbundle2 options count: 2 - e|! 7/ babar%#==tutu - simple parts count: 0 Test buggy input --------------------------------------------------- empty parameter name $ hg bundle2 --param '' --quiet abort: empty parameter name [255] bad parameter name $ hg bundle2 --param 42babar abort: non letter first character: '42babar' [255]