##// END OF EJS Templates
hook: add hook name information to external hook...
hook: add hook name information to external hook While we are here, we can also add the hook name information to external hook.

File last commit:

r31010:09ec648c default
r31747:aff7b32b default
Show More
test-commandserver.t
913 lines | 27.4 KiB | text/troff | Tads3Lexer
/ tests / test-commandserver.t
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568 #if windows
$ PYTHONPATH="$TESTDIR/../contrib;$PYTHONPATH"
#else
$ PYTHONPATH="$TESTDIR/../contrib:$PYTHONPATH"
#endif
$ export PYTHONPATH
Yuya Nishihara
ui: separate option to show prompt echo, enabled only in tests (issue4417)...
r23053 typical client does not want echo-back messages, so test without it:
$ grep -v '^promptecho ' < $HGRCPATH >> $HGRCPATH.new
$ mv $HGRCPATH.new $HGRCPATH
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568 $ hg init repo
$ cd repo
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485 >>> from __future__ import print_function
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568 >>> from hgclient import readchannel, runcommand, check
>>> @check
... def hellomessage(server):
... ch, data = readchannel(server)
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485 ... print('%c, %r' % (ch, data))
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568 ... # run an arbitrary command to make sure the next thing the server
... # sends isn't part of the hello message
... runcommand(server, ['id'])
Yuya Nishihara
cmdserver: include pid of server handling requests in hello message...
r23036 o, 'capabilities: getencoding runcommand\nencoding: *\npid: *' (glob)
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand id
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 000000000000 tip
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
>>> from hgclient import check
>>> @check
... def unknowncommand(server):
... server.stdin.write('unknowncommand\n')
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 abort: unknown command unknowncommand
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def checkruncommand(server):
... # hello block
... readchannel(server)
...
... # no args
... runcommand(server, [])
...
... # global options
... runcommand(server, ['id', '--quiet'])
...
... # make sure global options don't stick through requests
... runcommand(server, ['id'])
...
... # --config
... runcommand(server, ['id', '--config', 'ui.quiet=True'])
...
... # make sure --config doesn't stick
... runcommand(server, ['id'])
...
... # negative return code should be masked
... runcommand(server, ['id', '-runknown'])
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 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
anatoly techtonik
merge: be precise about what merged into what in short desc
r23400 merge merge another revision into working directory
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 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)
timeless
help: use single quotes in use warning
r29974 (use 'hg help' for the full list of commands or 'hg -v' for details)
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand id --quiet
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 000000000000
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand id
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 000000000000 tip
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand id --config ui.quiet=True
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 000000000000
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand id
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 000000000000 tip
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand id -runknown
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 abort: unknown revision 'unknown'!
[255]
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
>>> from hgclient import readchannel, check
>>> @check
... def inputeof(server):
... readchannel(server)
... server.stdin.write('runcommand\n')
... # close stdin while server is waiting for input
... server.stdin.close()
...
... # server exits with 1 if the pipe closed while reading the command
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485 ... print('server exit code =', server.wait())
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 server exit code = 1
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
timeless
test-commandserver: handle cStringIO.StringIO/io.StringIO divergence
r28836 >>> from hgclient import readchannel, runcommand, check, stringio
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568 >>> @check
... def serverinput(server):
... readchannel(server)
...
... patch = """
... # HG changeset patch
... # User test
... # Date 0 0
... # Node ID c103a3dec114d882c98382d684d8af798d09d857
... # Parent 0000000000000000000000000000000000000000
... 1
...
... diff -r 000000000000 -r c103a3dec114 a
... --- /dev/null Thu Jan 01 00:00:00 1970 +0000
... +++ b/a Thu Jan 01 00:00:00 1970 +0000
... @@ -0,0 +1,1 @@
... +1
... """
...
timeless
test-commandserver: handle cStringIO.StringIO/io.StringIO divergence
r28836 ... runcommand(server, ['import', '-'], input=stringio(patch))
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568 ... runcommand(server, ['log'])
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand import -
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 applying patch from stdin
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand log
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 changeset: 0:eff892de26ec
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 1
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
Yuya Nishihara
histedit: use ui.fin to read commands from stdin...
r30262 check that "histedit --commands=-" can read rules from the input channel:
>>> import cStringIO
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def serverinput(server):
... readchannel(server)
... rules = 'pick eff892de26ec\n'
... runcommand(server, ['histedit', '0', '--commands=-',
... '--config', 'extensions.histedit='],
... input=cStringIO.StringIO(rules))
*** runcommand histedit 0 --commands=- --config extensions.histedit=
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568 check that --cwd doesn't persist between requests:
$ mkdir foo
$ touch foo/bar
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def cwd(server):
... readchannel(server)
... runcommand(server, ['--cwd', 'foo', 'st', 'bar'])
... runcommand(server, ['st', 'foo/bar'])
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand --cwd foo st bar
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 ? bar
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand st foo/bar
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 ? foo/bar
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
$ rm foo/bar
check that local configs for the cached repo aren't inherited when -R is used:
$ cat <<EOF >> .hg/hgrc
> [ui]
> foo = bar
> EOF
>>> from hgclient import readchannel, sep, runcommand, check
>>> @check
... def localhgrc(server):
... readchannel(server)
...
... # the cached repo local hgrc contains ui.foo=bar, so showconfig should
... # show it
... runcommand(server, ['showconfig'], outfilter=sep)
...
... # but not for this repo
... runcommand(server, ['init', 'foo'])
... runcommand(server, ['-R', 'foo', 'showconfig', 'ui', 'defaults'])
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand showconfig
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 bundle.mainreporoot=$TESTTMP/repo
defaults.backout=-d "0 0"
defaults.commit=-d "0 0"
defaults.shelve=--date "0 0"
defaults.tag=-d "0 0"
Pierre-Yves David
devel: rename 'all' to 'all-warnings' (BC)...
r25290 devel.all-warnings=true
Matt Harbison
run-tests: set a default largefiles usercache in the default hgrc file...
r23388 largefiles.usercache=$TESTTMP/.cache/largefiles
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 ui.slash=True
ui.interactive=False
ui.mergemarkers=detailed
timeless
tests: tolerate http2...
r28996 ui.usehttp2=true (?)
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 ui.foo=bar
ui.nontty=true
Jun Wu
runtests: set web.address to localhost...
r31009 web.address=localhost
Jun Wu
runtests: always set web.ipv6...
r31010 web\.ipv6=(?:True|False) (re)
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand init foo
*** runcommand -R foo showconfig ui defaults
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 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.mergemarkers=detailed
timeless
tests: tolerate http2...
r28996 ui.usehttp2=true (?)
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 ui.nontty=true
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
$ rm -R foo
#if windows
$ PYTHONPATH="$TESTTMP/repo;$PYTHONPATH"
#else
$ PYTHONPATH="$TESTTMP/repo:$PYTHONPATH"
#endif
$ cat <<EOF > hook.py
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485 > from __future__ import print_function
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568 > import sys
> def hook(**args):
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485 > print('hook talking')
> print('now try to read something: %r' % sys.stdin.read())
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568 > EOF
timeless
test-commandserver: handle cStringIO.StringIO/io.StringIO divergence
r28836 >>> from hgclient import readchannel, runcommand, check, stringio
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568 >>> @check
... def hookoutput(server):
... readchannel(server)
... runcommand(server, ['--config',
... 'hooks.pre-identify=python:hook.hook',
... 'id'],
timeless
test-commandserver: handle cStringIO.StringIO/io.StringIO divergence
r28836 ... input=stringio('some input'))
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand --config hooks.pre-identify=python:hook.hook id
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 eff892de26ec tip
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
$ rm hook.py*
$ echo a >> a
>>> import os
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def outsidechanges(server):
... readchannel(server)
... runcommand(server, ['status'])
... os.system('hg ci -Am2')
... runcommand(server, ['tip'])
... runcommand(server, ['status'])
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand status
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 M a
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand tip
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 changeset: 1:d3a0a68be6de
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 2
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand status
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
>>> import os
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def bookmarks(server):
... readchannel(server)
... runcommand(server, ['bookmarks'])
...
... # changes .hg/bookmarks
... os.system('hg bookmark -i bm1')
... os.system('hg bookmark -i bm2')
... runcommand(server, ['bookmarks'])
...
... # changes .hg/bookmarks.current
... os.system('hg upd bm1 -q')
... runcommand(server, ['bookmarks'])
...
... runcommand(server, ['bookmarks', 'bm3'])
... f = open('a', 'ab')
... f.write('a\n')
... f.close()
... runcommand(server, ['commit', '-Amm'])
... runcommand(server, ['bookmarks'])
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand bookmarks
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 no bookmarks set
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand bookmarks
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 bm1 1:d3a0a68be6de
bm2 1:d3a0a68be6de
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand bookmarks
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 * bm1 1:d3a0a68be6de
bm2 1:d3a0a68be6de
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand bookmarks bm3
*** runcommand commit -Amm
*** runcommand bookmarks
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 bm1 1:d3a0a68be6de
bm2 1:d3a0a68be6de
* bm3 2:aef17e88f5f0
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
>>> import os
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def tagscache(server):
... readchannel(server)
... runcommand(server, ['id', '-t', '-r', '0'])
... os.system('hg tag -r 0 foo')
... runcommand(server, ['id', '-t', '-r', '0'])
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand id -t -r 0
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand id -t -r 0
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 foo
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
>>> import os
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def setphase(server):
... readchannel(server)
... runcommand(server, ['phase', '-r', '.'])
... os.system('hg phase -r . -p')
... runcommand(server, ['phase', '-r', '.'])
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand phase -r .
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 3: draft
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand phase -r .
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 3: public
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
$ echo a >> a
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def rollback(server):
... readchannel(server)
... runcommand(server, ['phase', '-r', '.', '-p'])
... runcommand(server, ['commit', '-Am.'])
... runcommand(server, ['rollback'])
... runcommand(server, ['phase', '-r', '.'])
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand phase -r . -p
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 no phases changed
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand commit -Am.
*** runcommand rollback
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 repository tip rolled back to revision 3 (undo commit)
working directory now based on revision 3
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand phase -r .
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 3: public
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
>>> import os
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def branch(server):
... readchannel(server)
... runcommand(server, ['branch'])
... os.system('hg branch foo')
... runcommand(server, ['branch'])
... os.system('hg branch default')
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand branch
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 default
marked working directory as branch foo
(branches are permanent and global, did you want a bookmark?)
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand branch
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 foo
marked working directory as branch default
(branches are permanent and global, did you want a bookmark?)
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
$ touch .hgignore
>>> import os
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def hgignore(server):
... readchannel(server)
... runcommand(server, ['commit', '-Am.'])
... f = open('ignored-file', 'ab')
... f.write('')
... f.close()
... f = open('.hgignore', 'ab')
... f.write('ignored-file')
... f.close()
... runcommand(server, ['status', '-i', '-u'])
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand commit -Am.
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 adding .hgignore
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand status -i -u
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 I ignored-file
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
Yuya Nishihara
localrepo: recreate phasecache if changelog was modified (issue4855)...
r26405 cache of non-public revisions should be invalidated on repository change
(issue4855):
>>> import os
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def phasesetscacheaftercommit(server):
... readchannel(server)
... # load _phasecache._phaserevs and _phasesets
... runcommand(server, ['log', '-qr', 'draft()'])
... # create draft commits by another process
... for i in xrange(5, 7):
Matt Harbison
test-commandserver: generate files with a fixed EOL for test stability...
r26431 ... f = open('a', 'ab')
... f.seek(0, os.SEEK_END)
... f.write('a\n')
... f.close()
Yuya Nishihara
localrepo: recreate phasecache if changelog was modified (issue4855)...
r26405 ... os.system('hg commit -Aqm%d' % i)
... # new commits should be listed as draft revisions
... runcommand(server, ['log', '-qr', 'draft()'])
*** runcommand log -qr draft()
4:7966c8e3734d
*** runcommand log -qr draft()
4:7966c8e3734d
5:41f6602d1c4f
6:10501e202c35
>>> import os
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def phasesetscacheafterstrip(server):
... readchannel(server)
... # load _phasecache._phaserevs and _phasesets
... runcommand(server, ['log', '-qr', 'draft()'])
... # strip cached revisions by another process
... os.system('hg --config extensions.strip= strip -q 5')
... # shouldn't abort by "unknown revision '6'"
... runcommand(server, ['log', '-qr', 'draft()'])
*** runcommand log -qr draft()
4:7966c8e3734d
5:41f6602d1c4f
6:10501e202c35
*** runcommand log -qr draft()
4:7966c8e3734d
cache of phase roots should be invalidated on strip (issue3827):
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568 >>> import os
>>> from hgclient import readchannel, sep, runcommand, check
>>> @check
... def phasecacheafterstrip(server):
... readchannel(server)
...
... # create new head, 5:731265503d86
... runcommand(server, ['update', '-C', '0'])
... f = open('a', 'ab')
... f.write('a\n')
... f.close()
... runcommand(server, ['commit', '-Am.', 'a'])
... runcommand(server, ['log', '-Gq'])
...
... # make it public; draft marker moves to 4:7966c8e3734d
... runcommand(server, ['phase', '-p', '.'])
... # load _phasecache.phaseroots
... runcommand(server, ['phase', '.'], outfilter=sep)
...
... # strip 1::4 outside server
... os.system('hg -q --config extensions.mq= strip 1')
...
... # shouldn't raise "7966c8e3734d: no node!"
... runcommand(server, ['branches'])
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand update -C 0
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
(leaving bookmark bm3)
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand commit -Am. a
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 created new head
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand log -Gq
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 @ 5:731265503d86
|
| o 4:7966c8e3734d
| |
| o 3:b9b85890c400
| |
| o 2:aef17e88f5f0
| |
| o 1:d3a0a68be6de
|/
o 0:eff892de26ec
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand phase -p .
*** runcommand phase .
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 5: public
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand branches
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 default 1:731265503d86
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
Yuya Nishihara
localrepo: refresh filecache stats only if transaction finished successfully...
r26251 in-memory cache must be reloaded if transaction is aborted. otherwise
changelog and manifest would have invalid node:
$ echo a >> a
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def txabort(server):
... readchannel(server)
... runcommand(server, ['commit', '--config', 'hooks.pretxncommit=false',
... '-mfoo'])
... runcommand(server, ['verify'])
*** runcommand commit --config hooks.pretxncommit=false -mfoo
transaction abort!
rollback completed
abort: pretxncommit hook exited with status 1
[255]
*** runcommand verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
1 files, 2 changesets, 2 total revisions
$ hg revert --no-backup -aq
Durham Goode
obsolete: update tests to use obsolete options...
r22955 $ cat >> .hg/hgrc << EOF
> [experimental]
> evolution=createmarkers
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568 > EOF
>>> import os
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def obsolete(server):
... readchannel(server)
...
... runcommand(server, ['up', 'null'])
... runcommand(server, ['phase', '-df', 'tip'])
... cmd = 'hg debugobsolete `hg log -r tip --template {node}`'
... if os.name == 'nt':
... cmd = 'sh -c "%s"' % cmd # run in sh, not cmd.exe
... os.system(cmd)
... runcommand(server, ['log', '--hidden'])
... runcommand(server, ['log'])
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand up null
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand phase -df tip
*** runcommand log --hidden
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 changeset: 1:731265503d86
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: .
changeset: 0:eff892de26ec
bookmark: bm1
bookmark: bm2
bookmark: bm3
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 1
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand log
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 changeset: 0:eff892de26ec
bookmark: bm1
bookmark: bm2
bookmark: bm3
tag: tip
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: 1
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
$ cat <<EOF >> .hg/hgrc
> [extensions]
> mq =
> EOF
>>> import os
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def mqoutsidechanges(server):
... readchannel(server)
...
... # load repo.mq
... runcommand(server, ['qapplied'])
... os.system('hg qnew 0.diff')
... # repo.mq should be invalidated
... runcommand(server, ['qapplied'])
...
... runcommand(server, ['qpop', '--all'])
... os.system('hg qqueue --create foo')
... # repo.mq should be recreated to point to new queue
... runcommand(server, ['qqueue', '--active'])
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand qapplied
*** runcommand qapplied
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 0.diff
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand qpop --all
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 popping 0.diff
patch queue now empty
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand qqueue --active
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 foo
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
$ cat <<EOF > dbgui.py
Yuya Nishihara
cmdserver: protect pipe server streams against corruption caused by direct io...
r23324 > import os, sys
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568 > from mercurial import cmdutil, commands
> cmdtable = {}
> command = cmdutil.command(cmdtable)
> @command("debuggetpass", norepo=True)
> def debuggetpass(ui):
> ui.write("%s\\n" % ui.getpass())
Yuya Nishihara
ui: disable echo back of prompt input if ui is set to non-tty purposely...
r22783 > @command("debugprompt", norepo=True)
> def debugprompt(ui):
> ui.write("%s\\n" % ui.prompt("prompt:"))
Yuya Nishihara
cmdserver: protect pipe server streams against corruption caused by direct io...
r23324 > @command("debugreadstdin", norepo=True)
> def debugreadstdin(ui):
> ui.write("read: %r\n" % sys.stdin.read(1))
> @command("debugwritestdout", norepo=True)
> def debugwritestdout(ui):
> os.write(1, "low-level stdout fd and\n")
> sys.stdout.write("stdout should be redirected to /dev/null\n")
> sys.stdout.flush()
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568 > EOF
$ cat <<EOF >> .hg/hgrc
> [extensions]
> dbgui = dbgui.py
> EOF
timeless
test-commandserver: handle cStringIO.StringIO/io.StringIO divergence
r28836 >>> from hgclient import readchannel, runcommand, check, stringio
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568 >>> @check
... def getpass(server):
... readchannel(server)
... runcommand(server, ['debuggetpass', '--config',
... 'ui.interactive=True'],
timeless
test-commandserver: handle cStringIO.StringIO/io.StringIO divergence
r28836 ... input=stringio('1234\n'))
Yuya Nishihara
ui: check EOF of getpass() response read from command-server channel...
r30814 ... runcommand(server, ['debuggetpass', '--config',
... 'ui.interactive=True'],
... input=stringio('\n'))
... runcommand(server, ['debuggetpass', '--config',
... 'ui.interactive=True'],
... input=stringio(''))
Yuya Nishihara
ui: disable echo back of prompt input if ui is set to non-tty purposely...
r22783 ... runcommand(server, ['debugprompt', '--config',
... 'ui.interactive=True'],
timeless
test-commandserver: handle cStringIO.StringIO/io.StringIO divergence
r28836 ... input=stringio('5678\n'))
Yuya Nishihara
cmdserver: protect pipe server streams against corruption caused by direct io...
r23324 ... runcommand(server, ['debugreadstdin'])
... runcommand(server, ['debugwritestdout'])
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand debuggetpass --config ui.interactive=True
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 password: 1234
Yuya Nishihara
ui: check EOF of getpass() response read from command-server channel...
r30814 *** runcommand debuggetpass --config ui.interactive=True
password:
*** runcommand debuggetpass --config ui.interactive=True
password: abort: response expected
[255]
Yuya Nishihara
ui: disable echo back of prompt input if ui is set to non-tty purposely...
r22783 *** runcommand debugprompt --config ui.interactive=True
prompt: 5678
Yuya Nishihara
cmdserver: protect pipe server streams against corruption caused by direct io...
r23324 *** runcommand debugreadstdin
read: ''
*** runcommand debugwritestdout
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
Yuya Nishihara
cmdserver: use given streams as pipe channels like other commands...
r23322 run commandserver in commandserver, which is silly but should work:
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485 >>> from __future__ import print_function
timeless
test-commandserver: handle cStringIO.StringIO/io.StringIO divergence
r28836 >>> from hgclient import readchannel, runcommand, check, stringio
Yuya Nishihara
cmdserver: use given streams as pipe channels like other commands...
r23322 >>> @check
... def nested(server):
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485 ... print('%c, %r' % readchannel(server))
Yuya Nishihara
cmdserver: use given streams as pipe channels like other commands...
r23322 ... class nestedserver(object):
timeless
test-commandserver: handle cStringIO.StringIO/io.StringIO divergence
r28836 ... stdin = stringio('getencoding\n')
... stdout = stringio()
Yuya Nishihara
cmdserver: use given streams as pipe channels like other commands...
r23322 ... runcommand(server, ['serve', '--cmdserver', 'pipe'],
... output=nestedserver.stdout, input=nestedserver.stdin)
... nestedserver.stdout.seek(0)
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485 ... print('%c, %r' % readchannel(nestedserver)) # hello
... print('%c, %r' % readchannel(nestedserver)) # getencoding
Yuya Nishihara
cmdserver: use given streams as pipe channels like other commands...
r23322 o, 'capabilities: getencoding runcommand\nencoding: *\npid: *' (glob)
*** runcommand serve --cmdserver pipe
o, 'capabilities: getencoding runcommand\nencoding: *\npid: *' (glob)
r, '*' (glob)
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
start without repository:
$ cd ..
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485 >>> from __future__ import print_function
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568 >>> from hgclient import readchannel, runcommand, check
>>> @check
... def hellomessage(server):
... ch, data = readchannel(server)
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485 ... print('%c, %r' % (ch, data))
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568 ... # run an arbitrary command to make sure the next thing the server
... # sends isn't part of the hello message
... runcommand(server, ['id'])
Yuya Nishihara
cmdserver: include pid of server handling requests in hello message...
r23036 o, 'capabilities: getencoding runcommand\nencoding: *\npid: *' (glob)
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand id
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 abort: there is no Mercurial repository here (.hg not found)
[255]
Yuya Nishihara
test-commandserver: port test functions from .py to .t...
r22568
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def startwithoutrepo(server):
... readchannel(server)
... runcommand(server, ['init', 'repo2'])
... runcommand(server, ['id', '-R', 'repo2'])
Yuya Nishihara
test-commandserver: make runcommand message bolder...
r22572 *** runcommand init repo2
*** runcommand id -R repo2
Yuya Nishihara
test-commandserver: add stub for .t test by copying .out with 2-space indent...
r22567 000000000000 tip
Yuya Nishihara
cmdserver: add service that listens on unix domain socket and forks process...
r22994
Yuya Nishihara
dispatch: error out on invalid -R path even if optionalrepo (issue4805) (BC)...
r26142 don't fall back to cwd if invalid -R path is specified (issue4805):
$ cd repo
$ hg serve --cmdserver pipe -R ../nonexistent
abort: repository ../nonexistent not found!
[255]
$ cd ..
Yuya Nishihara
cmdserver: add service that listens on unix domain socket and forks process...
r22994 unix domain socket:
$ cd repo
$ hg update -q
Matt Mackall
tests: don't try to test unix sockets on vfat
r23095 #if unix-socket unix-permissions
Yuya Nishihara
cmdserver: add service that listens on unix domain socket and forks process...
r22994
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485 >>> from __future__ import print_function
timeless
test-commandserver: handle cStringIO.StringIO/io.StringIO divergence
r28836 >>> from hgclient import unixserver, readchannel, runcommand, check, stringio
Yuya Nishihara
cmdserver: add service that listens on unix domain socket and forks process...
r22994 >>> server = unixserver('.hg/server.sock', '.hg/server.log')
>>> def hellomessage(conn):
... ch, data = readchannel(conn)
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485 ... print('%c, %r' % (ch, data))
Yuya Nishihara
cmdserver: add service that listens on unix domain socket and forks process...
r22994 ... runcommand(conn, ['id'])
>>> check(hellomessage, server.connect)
Yuya Nishihara
cmdserver: include pid of server handling requests in hello message...
r23036 o, 'capabilities: getencoding runcommand\nencoding: *\npid: *' (glob)
Yuya Nishihara
cmdserver: add service that listens on unix domain socket and forks process...
r22994 *** runcommand id
eff892de26ec tip bm1/bm2/bm3
>>> def unknowncommand(conn):
... readchannel(conn)
... conn.stdin.write('unknowncommand\n')
>>> check(unknowncommand, server.connect) # error sent to server.log
>>> def serverinput(conn):
... readchannel(conn)
... patch = """
... # HG changeset patch
... # User test
... # Date 0 0
... 2
...
... diff -r eff892de26ec -r 1ed24be7e7a0 a
... --- a/a
... +++ b/a
... @@ -1,1 +1,2 @@
... 1
... +2
... """
timeless
test-commandserver: handle cStringIO.StringIO/io.StringIO divergence
r28836 ... runcommand(conn, ['import', '-'], input=stringio(patch))
Yuya Nishihara
cmdserver: add service that listens on unix domain socket and forks process...
r22994 ... runcommand(conn, ['log', '-rtip', '-q'])
>>> check(serverinput, server.connect)
*** runcommand import -
applying patch from stdin
*** runcommand log -rtip -q
2:1ed24be7e7a0
>>> server.shutdown()
$ cat .hg/server.log
listening at .hg/server.sock
abort: unknown command unknowncommand
killed!
Yuya Nishihara
cmdserver: write early exception to 'e' channel in 'unix' mode...
r28511 $ rm .hg/server.log
if server crashed before hello, traceback will be sent to 'e' channel as
last ditch:
$ cat <<EOF >> .hg/hgrc
> [cmdserver]
> log = inexistent/path.log
> EOF
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485 >>> from __future__ import print_function
Yuya Nishihara
cmdserver: write early exception to 'e' channel in 'unix' mode...
r28511 >>> from hgclient import unixserver, readchannel, check
>>> server = unixserver('.hg/server.sock', '.hg/server.log')
>>> def earlycrash(conn):
... while True:
... try:
... ch, data = readchannel(conn)
... if not data.startswith(' '):
Pulkit Goyal
py3: make files use absolute_import and print_function...
r29485 ... print('%c, %r' % (ch, data))
Yuya Nishihara
cmdserver: write early exception to 'e' channel in 'unix' mode...
r28511 ... except EOFError:
... break
>>> check(earlycrash, server.connect)
e, 'Traceback (most recent call last):\n'
e, "IOError: *" (glob)
>>> server.shutdown()
$ cat .hg/server.log | grep -v '^ '
listening at .hg/server.sock
Traceback (most recent call last):
IOError: * (glob)
killed!
Matt Mackall
tests: don't try to test unix sockets on vfat
r23095 #endif
#if no-unix-socket
Yuya Nishihara
cmdserver: add service that listens on unix domain socket and forks process...
r22994
$ hg serve --cmdserver unix -a .hg/server.sock
abort: unsupported platform
[255]
#endif
FUJIWARA Katsunori
repoview: discard filtered changelog if index isn't shared with unfiltered...
r28265
$ cd ..
Test that accessing to invalid changelog cache is avoided at
subsequent operations even if repo object is reused even after failure
of transaction (see 0a7610758c42 also)
"hg log" after failure of transaction is needed to detect invalid
cache in repoview: this can't detect by "hg verify" only.
Combination of "finalization" and "empty-ness of changelog" (2 x 2 =
4) are tested, because '00changelog.i' are differently changed in each
cases.
$ cat > $TESTTMP/failafterfinalize.py <<EOF
> # extension to abort transaction after finalization forcibly
> from mercurial import commands, error, extensions, lock as lockmod
> def fail(tr):
> raise error.Abort('fail after finalization')
> def reposetup(ui, repo):
> class failrepo(repo.__class__):
> def commitctx(self, ctx, error=False):
> if self.ui.configbool('failafterfinalize', 'fail'):
> # 'sorted()' by ASCII code on category names causes
> # invoking 'fail' after finalization of changelog
> # using "'cl-%i' % id(self)" as category name
> self.currenttransaction().addfinalize('zzzzzzzz', fail)
> return super(failrepo, self).commitctx(ctx, error)
> repo.__class__ = failrepo
> EOF
$ hg init repo3
$ cd repo3
$ cat <<EOF >> $HGRCPATH
> [ui]
> logtemplate = {rev} {desc|firstline} ({files})\n
>
> [extensions]
> failafterfinalize = $TESTTMP/failafterfinalize.py
> EOF
- test failure with "empty changelog"
$ echo foo > foo
$ hg add foo
Mads Kiilerich
spelling: fixes of non-dictionary words
r30332 (failure before finalization)
FUJIWARA Katsunori
repoview: discard filtered changelog if index isn't shared with unfiltered...
r28265
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def abort(server):
... readchannel(server)
... runcommand(server, ['commit',
... '--config', 'hooks.pretxncommit=false',
... '-mfoo'])
... runcommand(server, ['log'])
... runcommand(server, ['verify', '-q'])
*** runcommand commit --config hooks.pretxncommit=false -mfoo
transaction abort!
rollback completed
abort: pretxncommit hook exited with status 1
[255]
*** runcommand log
*** runcommand verify -q
Mads Kiilerich
spelling: fixes of non-dictionary words
r30332 (failure after finalization)
FUJIWARA Katsunori
repoview: discard filtered changelog if index isn't shared with unfiltered...
r28265
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def abort(server):
... readchannel(server)
... runcommand(server, ['commit',
... '--config', 'failafterfinalize.fail=true',
... '-mfoo'])
... runcommand(server, ['log'])
... runcommand(server, ['verify', '-q'])
*** runcommand commit --config failafterfinalize.fail=true -mfoo
transaction abort!
rollback completed
abort: fail after finalization
[255]
*** runcommand log
*** runcommand verify -q
- test failure with "not-empty changelog"
$ echo bar > bar
$ hg add bar
$ hg commit -mbar bar
(failure before finalization)
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def abort(server):
... readchannel(server)
... runcommand(server, ['commit',
... '--config', 'hooks.pretxncommit=false',
... '-mfoo', 'foo'])
... runcommand(server, ['log'])
... runcommand(server, ['verify', '-q'])
*** runcommand commit --config hooks.pretxncommit=false -mfoo foo
transaction abort!
rollback completed
abort: pretxncommit hook exited with status 1
[255]
*** runcommand log
0 bar (bar)
*** runcommand verify -q
(failure after finalization)
>>> from hgclient import readchannel, runcommand, check
>>> @check
... def abort(server):
... readchannel(server)
... runcommand(server, ['commit',
... '--config', 'failafterfinalize.fail=true',
... '-mfoo', 'foo'])
... runcommand(server, ['log'])
... runcommand(server, ['verify', '-q'])
*** runcommand commit --config failafterfinalize.fail=true -mfoo foo
transaction abort!
rollback completed
abort: fail after finalization
[255]
*** runcommand log
0 bar (bar)
*** runcommand verify -q