##// END OF EJS Templates
phabricator: warn if unable to amend, instead of aborting after posting...
phabricator: warn if unable to amend, instead of aborting after posting There was a divergence in behavior here between obsolete and strip based amending. I first noticed the abort when testing outside of the test harness, but then had trouble recreating it here after reverting the code changes. It turns out, strip based amend was successfully amending the public commit after it was posted! It looks like the protection is in the `commit --amend` command, not in the underlying code that it calls. I considered doing a preflight check and aborting. But the locks are only acquired at the end, if amending, and this is too large a section of code to be wrapped in a maybe-it's-held-or-not context manager for my tastes. Additionally, some people do post-push reviews, and amending is the default behavior, so they shouldn't see a misleading error message. The lack of a 'Differential Revision' entry in the commit message breaks a {phabreview} test, so it had to be partially conditionalized.

File last commit:

r36200:4f043998 default
r41198:0101a35d 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