# HG changeset patch # User David Soria Parra # Date 1490721698 25200 # Node ID 9d3d56aa1a9fe00bb5f0ea7dd456ca4875c561bf # Parent d73490957d6162edf064055e40b321ee819187d2 worker: flush ui buffers before running the worker a91c6275 introduces flushing ui buffers after a worker finished. If the ui was not flushed before the worker was started, fork will copy the existing buffers to the worker. This causes messages issued before the worker started to be written to the terminal for each worker. We are now flushing the ui before we start a worker and add an appropriate test which will fail before this patch. diff -r d73490957d61 -r 9d3d56aa1a9f mercurial/worker.py --- a/mercurial/worker.py Tue Mar 28 08:40:12 2017 -0700 +++ b/mercurial/worker.py Tue Mar 28 10:21:38 2017 -0700 @@ -133,6 +133,7 @@ if problem[0]: killworkers() oldchldhandler = signal.signal(signal.SIGCHLD, sigchldhandler) + ui.flush() for pargs in partition(args, workers): pid = os.fork() if pid == 0: diff -r d73490957d61 -r 9d3d56aa1a9f tests/test-worker.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-worker.t Tue Mar 28 10:21:38 2017 -0700 @@ -0,0 +1,54 @@ +Test UI worker interaction + + $ cat > t.py < from __future__ import absolute_import, print_function + > from mercurial import ( + > cmdutil, + > ui as uimod, + > worker, + > ) + > def runme(ui, args): + > for arg in args: + > ui.status('run\n') + > yield 1, arg + > cmdtable = {} + > command = cmdutil.command(cmdtable) + > @command('test', [], 'hg test [COST]') + > def t(ui, repo, cost=1.0): + > cost = float(cost) + > ui.status('start\n') + > runs = worker.worker(ui, cost, runme, (ui,), range(8)) + > for n, 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