Mercurial > hg
view tests/test-worker.t @ 32207:176ed32dc159 stable
win32mbcs: wrap underlying pycompat.bytestr to use checkwinfilename safely
win32mbcs wraps some functions, to prevent them from unintentionally
treating backslash (0x5c), which is used as the second or later byte
of multi bytes characters by problematic encodings, as a path
component delimiter on Windows platform.
This wrapping assumes that wrapped functions can safely accept unicode
string arguments.
Unfortunately, d1937bdcee8c broke this assumption by introducing
pycompat.bytestr() into util.checkwinfilename() for py3 support. After
that, wrapped checkwinfilename() always fails for non-ASCII filename
at pycompat.bytestr() invocation.
This patch wraps underlying pycompat.bytestr() function to use
util.checkwinfilename() safely.
To avoid similar regression in the future, another patch series will
add smoke testing on default branch.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Fri, 12 May 2017 21:46:14 +0900 |
parents | 6e0368b6e0bb |
children | 31763785094b |
line wrap: on
line source
Test UI worker interaction $ cat > t.py <<EOF > from __future__ import absolute_import, print_function > from mercurial import ( > cmdutil, > error, > ui as uimod, > worker, > ) > def abort(ui, args): > if args[0] == 0: > # by first worker for test stability > raise error.Abort('known exception') > return runme(ui, []) > def exc(ui, args): > if 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, arg > functable = { > 'abort': abort, > 'exc': exc, > 'runme': runme, > } > cmdtable = {} > command = cmdutil.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, 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=2' \ > test 100000.0 abort start abort: known exception [255] $ hg --config "extensions.t=$abspath" --config 'worker.numcpus=2' \ > test 100000.0 abort --traceback 2>&1 | grep '^Traceback' Traceback (most recent call last): Traceback (most recent call last): Traceback must be printed for unknown exceptions $ hg --config "extensions.t=$abspath" --config 'worker.numcpus=2' \ > test 100000.0 exc 2>&1 | grep '^Traceback' Traceback (most recent call last): #endif