view tests/test-commandserver.py.out @ 20182:04036798ebed

branches: avoid unnecessary changectx.branch() calls This requires reading from the changelog, which can be costly over NFS. Note that this does not totally remove reading from the changelog; we still do that when calling changectx.closesbranch(). That call will be removed in a later patch. Running hg branches on the PyPy repo (with 996) over a busy NFS server, before this change: $ time hg --profile branches > /dev/null CallCount Recursive Total(s) Inline(s) module:lineno(function) 2042 0 2.2827 2.2827 <open> 2036 0 0.9840 0.9840 <method 'close' of 'file' objects> 2036 0 0.0464 0.0464 <method 'read' of 'file' objects> 5233 0 0.1985 0.0453 mercurial.repoview:161(changelog) 10462 0 0.0791 0.0314 mercurial.changelog:133(tip) 5233 0 0.0388 0.0176 mercurial.localrepo:26(__get__) 10462 0 0.0250 0.0126 <len> 5233 0 0.0059 0.0039 mercurial.repoview:112(filterrevs) 10462 0 0.0029 0.0029 <hash> 2034 0 0.0444 0.0444 <method 'seek' of 'file' objects> 5340 0 0.0390 0.0390 mercurial.revlog:296(rev) 2582 0 0.0371 0.0371 <zlib.decompress> 3155 0 0.1963 0.0366 mercurial.context:202(__init__) 3155 0 0.1238 0.0306 mercurial.repoview:161(changelog) 3155 0 0.0261 0.0080 mercurial.changelog:183(rev) 9465 0 0.0061 0.0061 <isinstance> 1096 0 0.0023 0.0023 <binascii.unhexlify> 4251 0 0.0014 0.0014 <len> 2059 0 3.7341 0.0332 mercurial.changelog:270(read) 2059 0 3.6304 0.0307 mercurial.revlog:907(revision) 2057 0 0.0262 0.0137 mercurial.changelog:28(decodeextra) 4118 0 0.0094 0.0094 <method 'split' of 'str' objects> 4118 0 0.0270 0.0048 mercurial.encoding:61(tolocal) 2059 0 0.0040 0.0040 <method 'index' of 'str' objects> 10462 0 0.0791 0.0314 mercurial.changelog:133(tip) 10462 0 0.0289 0.0207 mercurial.changelog:190(node) 10462 0 0.0188 0.0091 <len> 52433 20932 0.0478 0.0310 <len> 20932 0 0.0221 0.0168 mercurial.revlog:262(__len__) 2059 0 3.6304 0.0307 mercurial.revlog:907(revision) real 0m4.361s user 0m0.986s sys 0m0.237s After this change: $ time hg --profile branches > /dev/null CallCount Recursive Total(s) Inline(s) module:lineno(function) 1069 0 1.1098 1.1098 <open> 1063 0 0.4865 0.4865 <method 'close' of 'file' objects> 4122 0 0.1811 0.0404 mercurial.repoview:161(changelog) 8240 0 0.0712 0.0272 mercurial.changelog:133(tip) 4122 0 0.0378 0.0177 mercurial.localrepo:26(__get__) 8240 0 0.0221 0.0115 <len> 4122 0 0.0057 0.0033 mercurial.repoview:112(filterrevs) 8240 0 0.0025 0.0025 <hash> 3029 0 0.1979 0.0371 mercurial.context:202(__init__) 3029 0 0.1278 0.0310 mercurial.repoview:161(changelog) 3029 0 0.0230 0.0081 mercurial.changelog:183(rev) 9087 0 0.0061 0.0061 <isinstance> 1096 0 0.0026 0.0026 <binascii.unhexlify> 4125 0 0.0014 0.0014 <len> 4229 0 0.0337 0.0337 mercurial.revlog:296(rev) 1061 0 0.0296 0.0296 <method 'seek' of 'file' objects> 1063 0 0.0292 0.0292 <method 'read' of 'file' objects> 8240 0 0.0712 0.0272 mercurial.changelog:133(tip) 8240 0 0.0271 0.0196 mercurial.changelog:190(node) 8240 0 0.0169 0.0083 <len> 40476 16488 0.0422 0.0271 <len> 16488 0 0.0193 0.0152 mercurial.revlog:262(__len__) 1342 0 0.0241 0.0241 <zlib.decompress> 9445 0 0.0336 0.0224 mercurial.changelog:190(node) 9445 0 0.0112 0.0112 mercurial.revlog:317(node) 1074 0 1.9102 0.0224 mercurial.changelog:270(read) 1074 0 1.8397 0.0202 mercurial.revlog:907(revision) 1073 0 0.0187 0.0099 mercurial.changelog:28(decodeextra) 2148 0 0.0061 0.0061 <method 'split' of 'str' objects> 2148 0 0.0184 0.0034 mercurial.encoding:61(tolocal) real 0m2.402s user 0m0.735s sys 0m0.177s
author Brodie Rao <brodie@sf.io>
date Fri, 15 Nov 2013 23:18:08 -0500
parents 49d4919d21c2
children 69a0d22b9677
line wrap: on
line source


testing hellomessage:

o, 'capabilities: getencoding runcommand\nencoding: ***'
 runcommand id
000000000000 tip

testing unknowncommand:

abort: unknown command unknowncommand

testing checkruncommand:

 runcommand 
Mercurial Distributed SCM

basic commands:

 add           add the specified files on the next commit
 annotate      show changeset information by line for each file
 clone         make a copy of an existing repository
 commit        commit the specified files or all outstanding changes
 diff          diff repository (or selected files)
 export        dump the header and diffs for one or more changesets
 forget        forget the specified files on the next commit
 init          create a new repository in the given directory
 log           show revision history of entire repository or files
 merge         merge working directory with another revision
 pull          pull changes from the specified source
 push          push changes to the specified destination
 remove        remove the specified files on the next commit
 serve         start stand-alone webserver
 status        show changed files in the working directory
 summary       summarize working directory state
 update        update working directory (or switch revisions)

use "hg help" for the full list of commands or "hg -v" for details
 runcommand id --quiet
000000000000
 runcommand id
000000000000 tip
 runcommand id --config ui.quiet=True
000000000000
 runcommand id
000000000000 tip

testing inputeof:

server exit code = 1

testing serverinput:

 runcommand import -
applying patch from stdin
 runcommand log
changeset:   0:eff892de26ec
tag:         tip
user:        test
date:        Thu Jan 01 00:00:00 1970 +0000
summary:     1


testing cwd:

 runcommand --cwd foo st bar
? bar
 runcommand st foo/bar
? foo/bar

testing localhgrc:

 runcommand showconfig
bundle.mainreporoot=$TESTTMP
defaults.backout=-d "0 0"
defaults.commit=-d "0 0"
defaults.shelve=--date "0 0"
defaults.tag=-d "0 0"
ui.slash=True
ui.interactive=False
ui.foo=bar
 runcommand init foo
 runcommand -R foo showconfig ui defaults
defaults.backout=-d "0 0"
defaults.commit=-d "0 0"
defaults.shelve=--date "0 0"
defaults.tag=-d "0 0"
ui.slash=True
ui.interactive=False

testing hookoutput:

 runcommand --config hooks.pre-identify=python:test-commandserver.hook id
hook talking
now try to read something: 'some input'
eff892de26ec tip

testing outsidechanges:

 runcommand status
M a
 runcommand tip
changeset:   1:d3a0a68be6de
tag:         tip
user:        test
date:        Thu Jan 01 00:00:00 1970 +0000
summary:     2

 runcommand status

testing bookmarks:

 runcommand bookmarks
no bookmarks set
 runcommand bookmarks
   bm1                       1:d3a0a68be6de
   bm2                       1:d3a0a68be6de
 runcommand bookmarks
 * bm1                       1:d3a0a68be6de
   bm2                       1:d3a0a68be6de
 runcommand bookmarks bm3
 runcommand commit -Amm
 runcommand bookmarks
   bm1                       1:d3a0a68be6de
   bm2                       1:d3a0a68be6de
 * bm3                       2:aef17e88f5f0

testing tagscache:

 runcommand id -t -r 0

 runcommand id -t -r 0
foo

testing setphase:

 runcommand phase -r .
3: draft
 runcommand phase -r .
3: public

testing rollback:

 runcommand phase -r . -p
no phases changed
 runcommand commit -Am.
 runcommand rollback
repository tip rolled back to revision 3 (undo commit)
working directory now based on revision 3
 runcommand phase -r .
3: public

testing branch:

 runcommand branch
default
marked working directory as branch foo
(branches are permanent and global, did you want a bookmark?)
 runcommand branch
foo
marked working directory as branch default
(branches are permanent and global, did you want a bookmark?)

testing hgignore:

 runcommand commit -Am.
adding .hgignore
 runcommand status -i -u
I ignored-file

testing phasecacheafterstrip:

 runcommand update -C 0
1 files updated, 0 files merged, 2 files removed, 0 files unresolved
 runcommand commit -Am. a
created new head
 runcommand log -Gq
@  5:731265503d86
|
| o  4:7966c8e3734d
| |
| o  3:b9b85890c400
| |
| o  2:aef17e88f5f0
| |
| o  1:d3a0a68be6de
|/
o  0:eff892de26ec

 runcommand phase -p .
 runcommand phase .
5: public
 runcommand branches
default                        1:731265503d86