##// END OF EJS Templates
doc: unify section level between help topics...
doc: unify section level between help topics Some help topics use "-" for the top level underlining section mark, but "-" is used also for the top level categorization in generated documents: "hg.1.html", for example. So, TOC in such documents contain "sections in each topics", too. This patch changes underlining section mark in some help topics to unify section level in generated documents. After this patching, levels of each section marks are: level0 """""" level1 ====== level2 ------ level3 ...... level4 ###### And use of section markers in each documents are: - mercurial/help/*.txt can use level1 or more (now these use level1 and level2) - help for core commands can use level2 or more (now these use no section marker) - descriptions of extensions can use level2 or more (now hgext/acl uses level2) - help for commands defined in extension can use level4 or more (now "convert" of hgext/convert uses level4) "Level0" is used as top level categorization only in "doc/hg.1.txt" and the intermediate file generated by "doc/gendoc.py", so end users don't see it in "hg help" outoput and so on.

File last commit:

r16687:e34106fa default
r17267:979b107e stable
Show More
test-commandserver.py
260 lines | 6.7 KiB | text/x-python | PythonLexer
/ tests / test-commandserver.py
Idan Kamara
cmdserver: take repo.baseui as our ui...
r14882 import sys, os, struct, subprocess, cStringIO, re, shutil
Idan Kamara
tests: add basic commandserver test
r14770
def connect(path=None):
cmdline = ['hg', 'serve', '--cmdserver', 'pipe']
if path:
cmdline += ['-R', path]
server = subprocess.Popen(cmdline, stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
return server
def writeblock(server, data):
server.stdin.write(struct.pack('>I', len(data)))
server.stdin.write(data)
server.stdin.flush()
def readchannel(server):
data = server.stdout.read(5)
if not data:
Brodie Rao
cleanup: "raise SomeException()" -> "raise SomeException"
r16687 raise EOFError
Idan Kamara
tests: add basic commandserver test
r14770 channel, length = struct.unpack('>cI', data)
if channel in 'IL':
return channel, length
else:
return channel, server.stdout.read(length)
def runcommand(server, args, output=sys.stdout, error=sys.stderr, input=None):
Mads Kiilerich
tests: make test-commandserver.py output readable
r15541 print ' runcommand', ' '.join(args)
Idan Kamara
test-commandserver: flush stdout
r16117 sys.stdout.flush()
Idan Kamara
tests: add basic commandserver test
r14770 server.stdin.write('runcommand\n')
writeblock(server, '\0'.join(args))
if not input:
input = cStringIO.StringIO()
while True:
ch, data = readchannel(server)
if ch == 'o':
output.write(data)
output.flush()
elif ch == 'e':
error.write(data)
error.flush()
elif ch == 'I':
writeblock(server, input.read(data))
elif ch == 'L':
writeblock(server, input.readline(data))
elif ch == 'r':
return struct.unpack('>i', data)[0]
else:
print "unexpected channel %c: %r" % (ch, data)
if ch.isupper():
return
def check(func, repopath=None):
Mads Kiilerich
tests: make test-commandserver.py output readable
r15541 print
print 'testing %s:' % func.__name__
print
Idan Kamara
test-commandserver: flush stdout
r16117 sys.stdout.flush()
Idan Kamara
tests: add basic commandserver test
r14770 server = connect(repopath)
try:
return func(server)
finally:
server.stdin.close()
server.wait()
def unknowncommand(server):
server.stdin.write('unknowncommand\n')
def hellomessage(server):
ch, data = readchannel(server)
# escaping python tests output not supported
Brodie Rao
cleanup: eradicate long lines
r16683 print '%c, %r' % (ch, re.sub('encoding: [a-zA-Z0-9-]+', 'encoding: ***',
data))
Idan Kamara
tests: add basic commandserver test
r14770
# run an arbitrary command to make sure the next thing the server sends
# isn't part of the hello message
runcommand(server, ['id'])
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'])
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
print 'server exit code =', server.wait()
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
"""
runcommand(server, ['import', '-'], input=cStringIO.StringIO(patch))
runcommand(server, ['log'])
Idan Kamara
cmdserver: restore old working dir after dispatch when we have --cwd
r14864 def cwd(server):
""" check that --cwd doesn't persist between requests """
readchannel(server)
os.mkdir('foo')
Mads Kiilerich
tests: make test-commandserver.py independent of line ending and slash direction
r15542 f = open('foo/bar', 'wb')
Idan Kamara
test-commandserver: explicitly close opened file
r14880 f.write('a')
f.close()
Idan Kamara
cmdserver: restore old working dir after dispatch when we have --cwd
r14864 runcommand(server, ['--cwd', 'foo', 'st', 'bar'])
runcommand(server, ['st', 'foo/bar'])
os.remove('foo/bar')
Idan Kamara
cmdserver: take repo.baseui as our ui...
r14882 def localhgrc(server):
""" check that local configs for the cached repo aren't inherited when -R
is used """
readchannel(server)
Brodie Rao
cleanup: eradicate long lines
r16683 # the cached repo local hgrc contains ui.foo=bar, so showconfig should
# show it
Idan Kamara
cmdserver: take repo.baseui as our ui...
r14882 runcommand(server, ['showconfig'])
# but not for this repo
runcommand(server, ['init', 'foo'])
Mads Kiilerich
tests: make test-commandserver.py independent of line ending and slash direction
r15542 runcommand(server, ['-R', 'foo', 'showconfig', 'ui', 'defaults'])
Idan Kamara
cmdserver: take repo.baseui as our ui...
r14882 shutil.rmtree('foo')
Idan Kamara
hooks: redirect stdout/err/in to the ui descriptors when calling python hooks...
r14889 def hook(**args):
print 'hook talking'
print 'now try to read something: %r' % sys.stdin.read()
def hookoutput(server):
readchannel(server)
runcommand(server, ['--config',
Brodie Rao
cleanup: eradicate long lines
r16683 'hooks.pre-identify=python:test-commandserver.hook',
'id'],
Idan Kamara
hooks: redirect stdout/err/in to the ui descriptors when calling python hooks...
r14889 input=cStringIO.StringIO('some input'))
Idan Kamara
cmdserver: repo.invalidate() on every runcommand...
r14939 def outsidechanges(server):
readchannel(server)
Mads Kiilerich
tests: make test-commandserver.py independent of line ending and slash direction
r15542 f = open('a', 'ab')
f.write('a\n')
f.close()
Idan Kamara
cmdserver: invalidate the dirstate when running commands (issue3271)...
r16114 runcommand(server, ['status'])
Mads Kiilerich
tests: make test-commandserver.py independent of line ending and slash direction
r15542 os.system('hg ci -Am2')
Idan Kamara
cmdserver: repo.invalidate() on every runcommand...
r14939 runcommand(server, ['tip'])
Idan Kamara
cmdserver: invalidate the dirstate when running commands (issue3271)...
r16114 runcommand(server, ['status'])
Idan Kamara
cmdserver: repo.invalidate() on every runcommand...
r14939
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'])
Idan Kamara
scmutil: update cached copy when filecached attribute is assigned (issue3263)...
r16115 runcommand(server, ['bookmarks', 'bm3'])
f = open('a', 'ab')
f.write('a\n')
f.close()
runcommand(server, ['commit', '-Amm'])
runcommand(server, ['bookmarks'])
Idan Kamara
cmdserver: repo.invalidate() on every runcommand...
r14939 def tagscache(server):
readchannel(server)
runcommand(server, ['id', '-t', '-r', '0'])
os.system('hg tag -r 0 foo')
runcommand(server, ['id', '-t', '-r', '0'])
Idan Kamara
test-commandserver: test that phase data is being refreshed
r15989 def setphase(server):
readchannel(server)
runcommand(server, ['phase', '-r', '.'])
os.system('hg phase -r . -p')
runcommand(server, ['phase', '-r', '.'])
Idan Kamara
localrepo: clear _filecache on rollback (issue3261)...
r16116 def rollback(server):
readchannel(server)
runcommand(server, ['phase', '-r', '.', '-p'])
f = open('a', 'ab')
f.write('a\n')
f.close()
runcommand(server, ['commit', '-Am.'])
runcommand(server, ['rollback'])
runcommand(server, ['phase', '-r', '.'])
Idan Kamara
dirstate: filecacheify _branch...
r16201 def branch(server):
readchannel(server)
runcommand(server, ['branch'])
os.system('hg branch foo')
runcommand(server, ['branch'])
os.system('hg branch default')
Idan Kamara
dirstate: filecacheify _ignore (issue3278)...
r16202 def hgignore(server):
readchannel(server)
f = open('.hgignore', 'ab')
f.write('')
f.close()
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'])
Idan Kamara
tests: add basic commandserver test
r14770 if __name__ == '__main__':
os.system('hg init')
check(hellomessage)
check(unknowncommand)
check(checkruncommand)
check(inputeof)
check(serverinput)
Idan Kamara
cmdserver: restore old working dir after dispatch when we have --cwd
r14864 check(cwd)
Idan Kamara
cmdserver: take repo.baseui as our ui...
r14882
hgrc = open('.hg/hgrc', 'a')
hgrc.write('[ui]\nfoo=bar\n')
hgrc.close()
check(localhgrc)
Idan Kamara
hooks: redirect stdout/err/in to the ui descriptors when calling python hooks...
r14889 check(hookoutput)
Idan Kamara
cmdserver: repo.invalidate() on every runcommand...
r14939 check(outsidechanges)
check(bookmarks)
check(tagscache)
Idan Kamara
test-commandserver: test that phase data is being refreshed
r15989 check(setphase)
Idan Kamara
localrepo: clear _filecache on rollback (issue3261)...
r16116 check(rollback)
Idan Kamara
dirstate: filecacheify _branch...
r16201 check(branch)
Idan Kamara
dirstate: filecacheify _ignore (issue3278)...
r16202 check(hgignore)