##// END OF EJS Templates
hgweb: support constructing URLs from an alternate base URL...
hgweb: support constructing URLs from an alternate base URL The web.baseurl config option allows server operators to define a custom URL for hosted content. The way it works today is that hgwebdir parses this config option into URL components then updates the appropriate WSGI environment variables so the request "lies" about its details. For example, SERVER_NAME is updated to reflect the alternate base URL's hostname. The WSGI environment should not be modified because WSGI applications may want to know the original request details (for debugging, etc). This commit teaches our request parser about the existence of an alternate base URL. If defined, the advertised URL and other self-reflected paths will take the alternate base URL into account. The hgweb WSGI application didn't use web.baseurl. But hgwebdir did. We update hgwebdir to alter the environment parsing accordingly. The old code around environment manipulation has been removed. With this change, parserequestfromenv() has grown to a bit unwieldy. Now that practically everyone is using it, it is obvious that there is some unused features that can be trimmed. So look for this in follow-up commits. Differential Revision: https://phab.mercurial-scm.org/D2822

File last commit:

r36200:4f043998 default
r36916:219b2335 default
Show More
test-worker.t
128 lines | 3.0 KiB | text/troff | Tads3Lexer
David Soria Parra
worker: flush ui buffers before running the worker...
r31696 Test UI worker interaction
$ cat > t.py <<EOF
> from __future__ import absolute_import, print_function
Jun Wu
test-worker: exercise more about "killworkers" situation...
r32114 > import time
David Soria Parra
worker: flush ui buffers before running the worker...
r31696 > from mercurial import (
Yuya Nishihara
dispatch: print traceback in scmutil.callcatch() if --traceback specified...
r32041 > error,
Yuya Nishihara
registrar: move cmdutil.command to registrar module (API)...
r32337 > registrar,
David Soria Parra
worker: flush ui buffers before running the worker...
r31696 > ui as uimod,
> worker,
> )
Yuya Nishihara
dispatch: print traceback in scmutil.callcatch() if --traceback specified...
r32041 > def abort(ui, args):
> if args[0] == 0:
> # by first worker for test stability
Pulkit Goyal
py3: add b'' prefixes in test-worker.t...
r36200 > raise error.Abort(b'known exception')
Yuya Nishihara
dispatch: print traceback in scmutil.callcatch() if --traceback specified...
r32041 > return runme(ui, [])
Yuya Nishihara
worker: print traceback for uncaught exception unconditionally...
r32043 > def exc(ui, args):
> if args[0] == 0:
> # by first worker for test stability
> raise Exception('unknown exception')
> return runme(ui, [])
David Soria Parra
worker: flush ui buffers before running the worker...
r31696 > def runme(ui, args):
> for arg in args:
Pulkit Goyal
py3: add b'' prefixes in test-worker.t...
r36200 > ui.status(b'run\n')
David Soria Parra
worker: flush ui buffers before running the worker...
r31696 > yield 1, arg
Jun Wu
test-worker: exercise more about "killworkers" situation...
r32114 > time.sleep(0.1) # easier to trigger killworkers code path
Yuya Nishihara
dispatch: print traceback in scmutil.callcatch() if --traceback specified...
r32041 > functable = {
Pulkit Goyal
py3: add b'' prefixes in test-worker.t...
r36200 > b'abort': abort,
> b'exc': exc,
> b'runme': runme,
Yuya Nishihara
dispatch: print traceback in scmutil.callcatch() if --traceback specified...
r32041 > }
David Soria Parra
worker: flush ui buffers before running the worker...
r31696 > cmdtable = {}
Yuya Nishihara
registrar: move cmdutil.command to registrar module (API)...
r32337 > command = registrar.command(cmdtable)
Pulkit Goyal
py3: add b'' prefixes in test-worker.t...
r36200 > @command(b'test', [], b'hg test [COST] [FUNC]')
> def t(ui, repo, cost=1.0, func=b'runme'):
David Soria Parra
worker: flush ui buffers before running the worker...
r31696 > cost = float(cost)
Yuya Nishihara
dispatch: print traceback in scmutil.callcatch() if --traceback specified...
r32041 > func = functable[func]
Pulkit Goyal
py3: add b'' prefixes in test-worker.t...
r36200 > ui.status(b'start\n')
Yuya Nishihara
dispatch: print traceback in scmutil.callcatch() if --traceback specified...
r32041 > runs = worker.worker(ui, cost, func, (ui,), range(8))
David Soria Parra
worker: flush ui buffers before running the worker...
r31696 > for n, i in runs:
> pass
Pulkit Goyal
py3: add b'' prefixes in test-worker.t...
r36200 > ui.status(b'done\n')
David Soria Parra
worker: flush ui buffers before running the worker...
r31696 > EOF
$ abspath=`pwd`/t.py
$ hg init
Run tests with worker enable by forcing a heigh cost
$ hg --config "extensions.t=$abspath" test 100000.0
start
run
run
run
run
run
run
run
run
done
Run tests without worker by forcing a low cost
$ hg --config "extensions.t=$abspath" test 0.0000001
start
run
run
run
run
run
run
run
run
done
Yuya Nishihara
dispatch: print traceback in scmutil.callcatch() if --traceback specified...
r32041
Yuya Nishihara
test-worker: disable tests of forked workers on Windows...
r32061 #if no-windows
Yuya Nishihara
dispatch: print traceback in scmutil.callcatch() if --traceback specified...
r32041 Known exception should be caught, but printed if --traceback is enabled
Jun Wu
test-worker: exercise more about "killworkers" situation...
r32114 $ hg --config "extensions.t=$abspath" --config 'worker.numcpus=8' \
> test 100000.0 abort 2>&1
Yuya Nishihara
dispatch: print traceback in scmutil.callcatch() if --traceback specified...
r32041 start
abort: known exception
Yuya Nishihara
worker: propagate exit code to main process...
r32042 [255]
Yuya Nishihara
dispatch: print traceback in scmutil.callcatch() if --traceback specified...
r32041
Jun Wu
test-worker: exercise more about "killworkers" situation...
r32114 $ hg --config "extensions.t=$abspath" --config 'worker.numcpus=8' \
Jun Wu
test-worker: capture tracebacks more reliably...
r32113 > test 100000.0 abort --traceback 2>&1 | egrep '^(SystemExit|Abort)'
Abort: known exception
SystemExit: 255
Yuya Nishihara
worker: print traceback for uncaught exception unconditionally...
r32043
Traceback must be printed for unknown exceptions
Jun Wu
test-worker: exercise more about "killworkers" situation...
r32114 $ hg --config "extensions.t=$abspath" --config 'worker.numcpus=8' \
Jun Wu
test-worker: capture tracebacks more reliably...
r32113 > test 100000.0 exc 2>&1 | grep '^Exception'
Exception: unknown exception
Yuya Nishihara
test-worker: disable tests of forked workers on Windows...
r32061
Jun Wu
worker: rewrite error handling so os._exit covers all cases...
r32112 Workers should not do cleanups in all cases
$ cat > $TESTTMP/detectcleanup.py <<EOF
> from __future__ import absolute_import
> import atexit
> import os
> import time
> oldfork = os.fork
> count = 0
> parentpid = os.getpid()
> def delayedfork():
> global count
> count += 1
> pid = oldfork()
> # make it easier to test SIGTERM hitting other workers when they have
> # not set up error handling yet.
> if count > 1 and pid == 0:
> time.sleep(0.1)
> return pid
> os.fork = delayedfork
> def cleanup():
> if os.getpid() != parentpid:
> os.write(1, 'should never happen\n')
> atexit.register(cleanup)
> EOF
$ hg --config "extensions.t=$abspath" --config worker.numcpus=8 --config \
> "extensions.d=$TESTTMP/detectcleanup.py" test 100000 abort
start
abort: known exception
[255]
Yuya Nishihara
test-worker: disable tests of forked workers on Windows...
r32061 #endif