mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
c074611dee
Summary: Now that the workers are in Rust, we no longer need the forker version in Python. For now, the Python LFS extension still uses the threaded worker so keep this one for now, when that extension will be removed we can remove the rest of the worker code. In theory, not all repository would benefit from the Rust workers, but these are not supported at FB due to not being remotefilelog based. Reviewed By: DurhamG Differential Revision: D21987295 fbshipit-source-id: d17b9730651671608cf13f7abe6a9bb32251e140
95 lines
2.2 KiB
Raku
95 lines
2.2 KiB
Raku
#chg-compatible
|
|
|
|
Test UI worker interaction
|
|
|
|
$ cat > t.py <<EOF
|
|
> from __future__ import absolute_import, print_function
|
|
> import time
|
|
> from edenscm.mercurial import (
|
|
> error,
|
|
> registrar,
|
|
> ui as uimod,
|
|
> worker,
|
|
> )
|
|
> def abort(ui, args):
|
|
> if len(args) > 0 and args[0] == 0:
|
|
> # by first worker for test stability
|
|
> raise error.Abort('known exception')
|
|
> return runme(ui, [])
|
|
> def exc(ui, args):
|
|
> if len(args) > 0 and args[0] == 0:
|
|
> # by first worker for test stability
|
|
> raise Exception('unknown exception')
|
|
> return runme(ui, [])
|
|
> def runme(ui, args):
|
|
> for arg in args:
|
|
> ui.status('run\n')
|
|
> yield 1, 0, arg
|
|
> time.sleep(0.1) # easier to trigger killworkers code path
|
|
> functable = {
|
|
> 'abort': abort,
|
|
> 'exc': exc,
|
|
> 'runme': runme,
|
|
> }
|
|
> cmdtable = {}
|
|
> command = registrar.command(cmdtable)
|
|
> @command('test', [], 'hg test [COST] [FUNC]')
|
|
> def t(ui, repo, cost=1.0, func='runme'):
|
|
> cost = float(cost)
|
|
> func = functable[func]
|
|
> ui.status('start\n')
|
|
> runs = worker.worker(ui, cost, func, (ui,), range(8))
|
|
> for n, size, i in runs:
|
|
> pass
|
|
> ui.status('done\n')
|
|
> 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
|
|
|
|
#if no-windows
|
|
|
|
Known exception should be caught, but printed if --traceback is enabled
|
|
|
|
$ hg --config "extensions.t=$abspath" --config 'worker.numcpus=8' \
|
|
> test 100000.0 abort --traceback 2>&1 | egrep '^(SystemExit|(edenscm.mercurial.error.)?Abort)'
|
|
*Abort: known exception (glob)
|
|
*Abort: known exception (glob)
|
|
|
|
Traceback must be printed for unknown exceptions
|
|
|
|
$ hg --config "extensions.t=$abspath" --config 'worker.numcpus=8' \
|
|
> test 100000.0 exc 2>&1 | grep '^Exception'
|
|
Exception in thread Thread-1:
|
|
Exception: unknown exception
|
|
Exception: unknown exception
|
|
|
|
#endif
|