##// END OF EJS Templates
wireprotov2: implement commands as a generator of objects...
wireprotov2: implement commands as a generator of objects Previously, wire protocol version 2 inherited version 1's model of having separate types to represent the results of different wire protocol commands. As I implemented more powerful commands in future commits, I found I was using a common pattern of returning a special type to hold a generator. This meant the command function required a closure to do most of the work. That made logic flow more difficult to follow. I also noticed that many commands were effectively a sequence of objects to be CBOR encoded. I think it makes sense to define version 2 commands as generators. This way, commands can simply emit the data structures they wish to send to the client. This eliminates the need for a closure in command functions and removes encoding from the bodies of commands. As part of this commit, the handling of response objects has been moved into the serverreactor class. This puts the reactor in the driver's seat with regards to CBOR encoding and error handling. Having error handling in the function that emits frames is particularly important because exceptions in that function can lead to things getting in a bad state: I'm fairly certain that uncaught exceptions in the frame generator were causing deadlocks. I also introduced a dedicated error type for explicit error reporting in command handlers. This will be used in subsequent commits. There's still a bit of work to be done here, especially around formalizing the error handling "protocol." I've added yet another TODO to track this so we don't forget. Test output changed because we're using generators and no longer know we are at the end of the data until we hit the end of the generator. This means we can't emit the end-of-stream flag until we've exhausted the generator. Hence the introduction of 0-sized end-of-stream frames. Differential Revision: https://phab.mercurial-scm.org/D4472

File last commit:

r36142:0dde5f53 default
r39595:07b58266 default
Show More
test-devel-warnings.t
385 lines | 16.6 KiB | text/troff | Tads3Lexer
/ tests / test-devel-warnings.t
Pierre-Yves David
devel: move the lock-checking code into core...
r24386
$ cat << EOF > buggylocking.py
Pierre-Yves David
test: update the docstring of 'test-devel-warnings.t' extension...
r27270 > """A small extension that tests our developer warnings
Pierre-Yves David
devel: move the lock-checking code into core...
r24386 > """
>
Yuya Nishihara
error: add hint to ProgrammingError...
r32340 > from mercurial import error, registrar, repair, util
Pierre-Yves David
devel: move the lock-checking code into core...
r24386 >
> cmdtable = {}
Yuya Nishihara
registrar: move cmdutil.command to registrar module (API)...
r32337 > command = registrar.command(cmdtable)
Pierre-Yves David
devel: move the lock-checking code into core...
r24386 >
Pulkit Goyal
py3: make sure the commands name are bytes in test-devel-warnings.t
r32971 > @command(b'buggylocking', [], '')
Pierre-Yves David
devel: move the lock-checking code into core...
r24386 > def buggylocking(ui, repo):
> lo = repo.lock()
> wl = repo.wlock()
Matt Mackall
tests: avoid deprecation warning
r24392 > wl.release()
> lo.release()
Pierre-Yves David
wlock: only issue devel warning when actually acquiring the lock...
r24744 >
Pulkit Goyal
py3: make sure the commands name are bytes in test-devel-warnings.t
r32971 > @command(b'buggytransaction', [], '')
Pierre-Yves David
test: extract develwarn transaction testing in its own command...
r29185 > def buggylocking(ui, repo):
Augie Fackler
tests: add tons of b prefixes in test-devel-warnings.t...
r36142 > tr = repo.transaction(b'buggy')
Pierre-Yves David
test: extract develwarn transaction testing in its own command...
r29185 > # make sure we rollback the transaction as we don't want to rely on the__del__
> tr.release()
>
Pulkit Goyal
py3: make sure the commands name are bytes in test-devel-warnings.t
r32971 > @command(b'properlocking', [], '')
Pierre-Yves David
wlock: only issue devel warning when actually acquiring the lock...
r24744 > def properlocking(ui, repo):
> """check that reentrance is fine"""
> wl = repo.wlock()
> lo = repo.lock()
Augie Fackler
tests: add tons of b prefixes in test-devel-warnings.t...
r36142 > tr = repo.transaction(b'proper')
> tr2 = repo.transaction(b'proper')
Pierre-Yves David
wlock: only issue devel warning when actually acquiring the lock...
r24744 > lo2 = repo.lock()
> wl2 = repo.wlock()
> wl2.release()
> lo2.release()
> tr2.close()
> tr.close()
> lo.release()
> wl.release()
Pierre-Yves David
wlock: do not warn for non-wait locking...
r24750 >
Pulkit Goyal
py3: make sure the commands name are bytes in test-devel-warnings.t
r32971 > @command(b'nowaitlocking', [], '')
Pierre-Yves David
wlock: do not warn for non-wait locking...
r24750 > def nowaitlocking(ui, repo):
> lo = repo.lock()
> wl = repo.wlock(wait=False)
> wl.release()
> lo.release()
Pierre-Yves David
repair: forbid strip from inside a transaction...
r25300 >
Boris Feld
repovfs: add a ward to check if locks are properly taken...
r33436 > @command(b'no-wlock-write', [], '')
> def nowlockwrite(ui, repo):
Augie Fackler
tests: add tons of b prefixes in test-devel-warnings.t...
r36142 > with repo.vfs(b'branch', b'a'):
Boris Feld
repovfs: add a ward to check if locks are properly taken...
r33436 > pass
>
Boris Feld
reposvfs: add a ward to check if locks are properly taken...
r33437 > @command(b'no-lock-write', [], '')
> def nolockwrite(ui, repo):
Augie Fackler
tests: add tons of b prefixes in test-devel-warnings.t...
r36142 > with repo.svfs(b'fncache', b'a'):
Boris Feld
reposvfs: add a ward to check if locks are properly taken...
r33437 > pass
>
Pulkit Goyal
py3: make sure the commands name are bytes in test-devel-warnings.t
r32971 > @command(b'stripintr', [], '')
Pierre-Yves David
repair: forbid strip from inside a transaction...
r25300 > def stripintr(ui, repo):
> lo = repo.lock()
Augie Fackler
tests: add tons of b prefixes in test-devel-warnings.t...
r36142 > tr = repo.transaction(b'foobar')
Pierre-Yves David
repair: forbid strip from inside a transaction...
r25300 > try:
Augie Fackler
tests: add tons of b prefixes in test-devel-warnings.t...
r36142 > repair.strip(repo.ui, repo, [repo[b'.'].node()])
Pierre-Yves David
repair: forbid strip from inside a transaction...
r25300 > finally:
> lo.release()
Pulkit Goyal
py3: make sure the commands name are bytes in test-devel-warnings.t
r32971 > @command(b'oldanddeprecated', [], '')
Pierre-Yves David
ui: add a 'deprecwarn' helper to issue deprecation warnings...
r27275 > def oldanddeprecated(ui, repo):
> """test deprecation warning API"""
> def foobar(ui):
Augie Fackler
tests: add tons of b prefixes in test-devel-warnings.t...
r36142 > ui.deprecwarn(b'foorbar is deprecated, go shopping', b'42.1337')
Pierre-Yves David
ui: add a 'deprecwarn' helper to issue deprecation warnings...
r27275 > foobar(ui)
Pulkit Goyal
py3: make sure the commands name are bytes in test-devel-warnings.t
r32971 > @command(b'nouiwarning', [], '')
Pierre-Yves David
util: add a way to issue deprecation warning without a UI object...
r31950 > def nouiwarning(ui, repo):
Augie Fackler
tests: add tons of b prefixes in test-devel-warnings.t...
r36142 > util.nouideprecwarn(b'this is a test', b'13.37')
Pulkit Goyal
py3: make sure the commands name are bytes in test-devel-warnings.t
r32971 > @command(b'programmingerror', [], '')
Yuya Nishihara
error: add hint to ProgrammingError...
r32340 > def programmingerror(ui, repo):
Augie Fackler
tests: add tons of b prefixes in test-devel-warnings.t...
r36142 > raise error.ProgrammingError(b'something went wrong', hint=b'try again')
Pierre-Yves David
devel: move the lock-checking code into core...
r24386 > EOF
$ cat << EOF >> $HGRCPATH
> [extensions]
> buggylocking=$TESTTMP/buggylocking.py
timeless
ui: log devel warnings
r28498 > mock=$TESTDIR/mockblackbox.py
> blackbox=
Pierre-Yves David
devel: move the lock-checking code into core...
r24386 > [devel]
Pierre-Yves David
devel: rename 'all' to 'all-warnings' (BC)...
r25290 > all-warnings=1
Pierre-Yves David
devel: move the lock-checking code into core...
r24386 > EOF
$ hg init lock-checker
$ cd lock-checker
$ hg buggylocking
timeless
tests: relax test-devel-warnings to reduce false positives...
r28016 devel-warn: "wlock" acquired after "lock" at: $TESTTMP/buggylocking.py:* (buggylocking) (glob)
Pierre-Yves David
devel: move the lock-checking code into core...
r24386 $ cat << EOF >> $HGRCPATH
> [devel]
> all=0
> check-locks=1
> EOF
$ hg buggylocking
timeless
tests: relax test-devel-warnings to reduce false positives...
r28016 devel-warn: "wlock" acquired after "lock" at: $TESTTMP/buggylocking.py:* (buggylocking) (glob)
Saurabh Singh
test-devel-warnings: make the test compatible with chg...
r34465 #if no-chg
Pierre-Yves David
devel: move the lock-checking code into core...
r24386 $ hg buggylocking --traceback
Pierre-Yves David
devel-warn: add a prefix to all messages ("devel-warn: ")...
r24755 devel-warn: "wlock" acquired after "lock" at:
Gregory Szorc
tests: make hg frame optional...
r35669 */hg:* in <module> (glob) (?)
Pierre-Yves David
devel: move the lock-checking code into core...
r24386 */mercurial/dispatch.py:* in run (glob)
*/mercurial/dispatch.py:* in dispatch (glob)
*/mercurial/dispatch.py:* in _runcatch (glob)
Yuya Nishihara
dispatch: mark callcatch() as a private function
r32040 */mercurial/dispatch.py:* in _callcatch (glob)
Jun Wu
dispatch: move part of callcatch to scmutil...
r30520 */mercurial/scmutil.py* in callcatch (glob)
Jun Wu
dispatch: split global error handling out so it can be reused...
r29761 */mercurial/dispatch.py:* in _runcatchfunc (glob)
Pierre-Yves David
devel: move the lock-checking code into core...
r24386 */mercurial/dispatch.py:* in _dispatch (glob)
*/mercurial/dispatch.py:* in runcommand (glob)
*/mercurial/dispatch.py:* in _runcommand (glob)
*/mercurial/dispatch.py:* in <lambda> (glob)
*/mercurial/util.py:* in check (glob)
$TESTTMP/buggylocking.py:* in buggylocking (glob)
Saurabh Singh
test-devel-warnings: make the test compatible with chg...
r34465 #else
$ hg buggylocking --traceback
devel-warn: "wlock" acquired after "lock" at:
Gregory Szorc
tests: make hg frame optional...
r35669 */hg:* in <module> (glob) (?)
Saurabh Singh
test-devel-warnings: make the test compatible with chg...
r34465 */mercurial/dispatch.py:* in run (glob)
*/mercurial/dispatch.py:* in dispatch (glob)
*/mercurial/dispatch.py:* in _runcatch (glob)
*/mercurial/dispatch.py:* in _callcatch (glob)
*/mercurial/scmutil.py:* in callcatch (glob)
*/mercurial/dispatch.py:* in _runcatchfunc (glob)
*/mercurial/dispatch.py:* in _dispatch (glob)
*/mercurial/dispatch.py:* in runcommand (glob)
*/mercurial/dispatch.py:* in _runcommand (glob)
*/mercurial/dispatch.py:* in <lambda> (glob)
*/mercurial/util.py:* in check (glob)
*/mercurial/commands.py:* in serve (glob)
*/mercurial/server.py:* in runservice (glob)
*/mercurial/commandserver.py:* in run (glob)
*/mercurial/commandserver.py:* in _mainloop (glob)
*/mercurial/commandserver.py:* in _runworker (glob)
*/mercurial/commandserver.py:* in _serverequest (glob)
*/mercurial/commandserver.py:* in serve (glob)
*/mercurial/commandserver.py:* in serveone (glob)
*/mercurial/chgserver.py:* in runcommand (glob)
*/mercurial/commandserver.py:* in runcommand (glob)
*/mercurial/dispatch.py:* in dispatch (glob)
*/mercurial/dispatch.py:* in _runcatch (glob)
*/mercurial/dispatch.py:* in _callcatch (glob)
*/mercurial/scmutil.py:* in callcatch (glob)
*/mercurial/dispatch.py:* in _runcatchfunc (glob)
*/mercurial/dispatch.py:* in _dispatch (glob)
*/mercurial/dispatch.py:* in runcommand (glob)
*/mercurial/dispatch.py:* in _runcommand (glob)
*/mercurial/dispatch.py:* in <lambda> (glob)
*/mercurial/util.py:* in check (glob)
$TESTTMP/buggylocking.py:* in buggylocking (glob)
#endif
Pierre-Yves David
wlock: only issue devel warning when actually acquiring the lock...
r24744 $ hg properlocking
Pierre-Yves David
wlock: do not warn for non-wait locking...
r24750 $ hg nowaitlocking
Pierre-Yves David
repair: forbid strip from inside a transaction...
r25300
Boris Feld
repovfs: add a ward to check if locks are properly taken...
r33436 Writing without lock
$ hg no-wlock-write
devel-warn: write with no wlock: "branch" at: $TESTTMP/buggylocking.py:* (nowlockwrite) (glob)
Boris Feld
reposvfs: add a ward to check if locks are properly taken...
r33437 $ hg no-lock-write
devel-warn: write with no lock: "fncache" at: $TESTTMP/buggylocking.py:* (nolockwrite) (glob)
test: add a small comment to explain a section of test-devel-warning...
r33251 Stripping from a transaction
Pierre-Yves David
repair: forbid strip from inside a transaction...
r25300 $ echo a > a
$ hg add a
$ hg commit -m a
Jun Wu
repair: use ProgrammingError
r31645 $ hg stripintr 2>&1 | egrep -v '^(\*\*| )'
Traceback (most recent call last):
Boris Feld
pypy: fix failing test-devel-warnings.t with Pypy5.6.0...
r33610 *ProgrammingError: cannot strip from inside a transaction (glob)
Pierre-Yves David
repair: forbid strip from inside a transaction...
r25300
Pierre-Yves David
ui: add a 'deprecwarn' helper to issue deprecation warnings...
r27275 $ hg oldanddeprecated
devel-warn: foorbar is deprecated, go shopping
timeless
tests: relax test-devel-warnings to reduce false positives...
r28016 (compatibility will be dropped after Mercurial-42.1337, update your code.) at: $TESTTMP/buggylocking.py:* (oldanddeprecated) (glob)
Pierre-Yves David
devel-warn: issue a warning for old style revsets...
r25630
Saurabh Singh
test-devel-warnings: make the test compatible with chg...
r34465 #if no-chg
Pierre-Yves David
ui: add a 'deprecwarn' helper to issue deprecation warnings...
r27275 $ hg oldanddeprecated --traceback
devel-warn: foorbar is deprecated, go shopping
(compatibility will be dropped after Mercurial-42.1337, update your code.) at:
Gregory Szorc
tests: make hg frame optional...
r35669 */hg:* in <module> (glob) (?)
Pierre-Yves David
ui: add a 'deprecwarn' helper to issue deprecation warnings...
r27275 */mercurial/dispatch.py:* in run (glob)
*/mercurial/dispatch.py:* in dispatch (glob)
*/mercurial/dispatch.py:* in _runcatch (glob)
Yuya Nishihara
dispatch: mark callcatch() as a private function
r32040 */mercurial/dispatch.py:* in _callcatch (glob)
Jun Wu
dispatch: move part of callcatch to scmutil...
r30520 */mercurial/scmutil.py* in callcatch (glob)
Jun Wu
dispatch: split global error handling out so it can be reused...
r29761 */mercurial/dispatch.py:* in _runcatchfunc (glob)
Pierre-Yves David
ui: add a 'deprecwarn' helper to issue deprecation warnings...
r27275 */mercurial/dispatch.py:* in _dispatch (glob)
*/mercurial/dispatch.py:* in runcommand (glob)
*/mercurial/dispatch.py:* in _runcommand (glob)
*/mercurial/dispatch.py:* in <lambda> (glob)
*/mercurial/util.py:* in check (glob)
$TESTTMP/buggylocking.py:* in oldanddeprecated (glob)
Saurabh Singh
test-devel-warnings: make the test compatible with chg...
r34465 #else
$ hg oldanddeprecated --traceback
devel-warn: foorbar is deprecated, go shopping
(compatibility will be dropped after Mercurial-42.1337, update your code.) at:
*/hg:* in <module> (glob)
*/mercurial/dispatch.py:* in run (glob)
*/mercurial/dispatch.py:* in dispatch (glob)
*/mercurial/dispatch.py:* in _runcatch (glob)
*/mercurial/dispatch.py:* in _callcatch (glob)
*/mercurial/scmutil.py:* in callcatch (glob)
*/mercurial/dispatch.py:* in _runcatchfunc (glob)
*/mercurial/dispatch.py:* in _dispatch (glob)
*/mercurial/dispatch.py:* in runcommand (glob)
*/mercurial/dispatch.py:* in _runcommand (glob)
*/mercurial/dispatch.py:* in <lambda> (glob)
*/mercurial/util.py:* in check (glob)
*/mercurial/commands.py:* in serve (glob)
*/mercurial/server.py:* in runservice (glob)
*/mercurial/commandserver.py:* in run (glob)
*/mercurial/commandserver.py:* in _mainloop (glob)
*/mercurial/commandserver.py:* in _runworker (glob)
*/mercurial/commandserver.py:* in _serverequest (glob)
*/mercurial/commandserver.py:* in serve (glob)
*/mercurial/commandserver.py:* in serveone (glob)
*/mercurial/chgserver.py:* in runcommand (glob)
*/mercurial/commandserver.py:* in runcommand (glob)
*/mercurial/dispatch.py:* in dispatch (glob)
*/mercurial/dispatch.py:* in _runcatch (glob)
*/mercurial/dispatch.py:* in _callcatch (glob)
*/mercurial/scmutil.py:* in callcatch (glob)
*/mercurial/dispatch.py:* in _runcatchfunc (glob)
*/mercurial/dispatch.py:* in _dispatch (glob)
*/mercurial/dispatch.py:* in runcommand (glob)
*/mercurial/dispatch.py:* in _runcommand (glob)
*/mercurial/dispatch.py:* in <lambda> (glob)
*/mercurial/util.py:* in check (glob)
$TESTTMP/buggylocking.py:* in oldanddeprecated (glob)
#endif
#if no-chg
Yuya Nishihara
revset: stop supporting predicate that returns plain list (API)...
r31809 $ hg blackbox -l 7
timeless
ui: log devel warnings
r28498 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated
1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> devel-warn: foorbar is deprecated, go shopping
(compatibility will be dropped after Mercurial-42.1337, update your code.) at: $TESTTMP/buggylocking.py:* (oldanddeprecated) (glob)
1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated exited 0 after * seconds (glob)
1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated --traceback
1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> devel-warn: foorbar is deprecated, go shopping
(compatibility will be dropped after Mercurial-42.1337, update your code.) at:
Gregory Szorc
tests: make hg frame optional...
r35669 */hg:* in <module> (glob) (?)
timeless
ui: log devel warnings
r28498 */mercurial/dispatch.py:* in run (glob)
*/mercurial/dispatch.py:* in dispatch (glob)
*/mercurial/dispatch.py:* in _runcatch (glob)
Yuya Nishihara
dispatch: mark callcatch() as a private function
r32040 */mercurial/dispatch.py:* in _callcatch (glob)
Jun Wu
dispatch: move part of callcatch to scmutil...
r30520 */mercurial/scmutil.py* in callcatch (glob)
Jun Wu
dispatch: split global error handling out so it can be reused...
r29761 */mercurial/dispatch.py:* in _runcatchfunc (glob)
timeless
ui: log devel warnings
r28498 */mercurial/dispatch.py:* in _dispatch (glob)
*/mercurial/dispatch.py:* in runcommand (glob)
*/mercurial/dispatch.py:* in _runcommand (glob)
*/mercurial/dispatch.py:* in <lambda> (glob)
*/mercurial/util.py:* in check (glob)
$TESTTMP/buggylocking.py:* in oldanddeprecated (glob)
1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated --traceback exited 0 after * seconds (glob)
Yuya Nishihara
revset: stop supporting predicate that returns plain list (API)...
r31809 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> blackbox -l 7
Saurabh Singh
test-devel-warnings: make the test compatible with chg...
r34465 #else
$ hg blackbox -l 7
1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated
1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> devel-warn: foorbar is deprecated, go shopping
(compatibility will be dropped after Mercurial-42.1337, update your code.) at: $TESTTMP/buggylocking.py:* (oldanddeprecated) (glob)
1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated exited 0 after * seconds (glob)
1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated --traceback
1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> devel-warn: foorbar is deprecated, go shopping
(compatibility will be dropped after Mercurial-42.1337, update your code.) at:
*/hg:* in <module> (glob)
*/mercurial/dispatch.py:* in run (glob)
*/mercurial/dispatch.py:* in dispatch (glob)
*/mercurial/dispatch.py:* in _runcatch (glob)
*/mercurial/dispatch.py:* in _callcatch (glob)
*/mercurial/scmutil.py:* in callcatch (glob)
*/mercurial/dispatch.py:* in _runcatchfunc (glob)
*/mercurial/dispatch.py:* in _dispatch (glob)
*/mercurial/dispatch.py:* in runcommand (glob)
*/mercurial/dispatch.py:* in _runcommand (glob)
*/mercurial/dispatch.py:* in <lambda> (glob)
*/mercurial/util.py:* in check (glob)
*/mercurial/commands.py:* in serve (glob)
*/mercurial/server.py:* in runservice (glob)
*/mercurial/commandserver.py:* in run (glob)
*/mercurial/commandserver.py:* in _mainloop (glob)
*/mercurial/commandserver.py:* in _runworker (glob)
*/mercurial/commandserver.py:* in _serverequest (glob)
*/mercurial/commandserver.py:* in serve (glob)
*/mercurial/commandserver.py:* in serveone (glob)
*/mercurial/chgserver.py:* in runcommand (glob)
*/mercurial/commandserver.py:* in runcommand (glob)
*/mercurial/dispatch.py:* in dispatch (glob)
*/mercurial/dispatch.py:* in _runcatch (glob)
*/mercurial/dispatch.py:* in _callcatch (glob)
*/mercurial/scmutil.py:* in callcatch (glob)
*/mercurial/dispatch.py:* in _runcatchfunc (glob)
*/mercurial/dispatch.py:* in _dispatch (glob)
*/mercurial/dispatch.py:* in runcommand (glob)
*/mercurial/dispatch.py:* in _runcommand (glob)
*/mercurial/dispatch.py:* in <lambda> (glob)
*/mercurial/util.py:* in check (glob)
$TESTTMP/buggylocking.py:* in oldanddeprecated (glob)
1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated --traceback exited 0 after * seconds (glob)
1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> blackbox -l 7
#endif
Pierre-Yves David
test: extract develwarn transaction testing in its own command...
r29185
Test programming error failure:
Pierre-Yves David
transaction: turn lack of locking into a hard failure (API)...
r29186 $ hg buggytransaction 2>&1 | egrep -v '^ '
** Unknown exception encountered with possibly-broken third-party extension buggylocking
** which supports versions unknown of Mercurial.
** Please disable buggylocking and try your action again.
** If that fixes the bug please report it to the extension author.
** Python * (glob)
** Mercurial Distributed SCM (*) (glob)
** Extensions loaded: * (glob)
Yuya Nishihara
error: add hint to ProgrammingError...
r32340 ** ProgrammingError: transaction requires locking
Pierre-Yves David
transaction: turn lack of locking into a hard failure (API)...
r29186 Traceback (most recent call last):
Boris Feld
pypy: fix failing test-devel-warnings.t with Pypy5.6.0...
r33610 *ProgrammingError: transaction requires locking (glob)
Pierre-Yves David
test: extract develwarn transaction testing in its own command...
r29185
Yuya Nishihara
error: add hint to ProgrammingError...
r32340 $ hg programmingerror 2>&1 | egrep -v '^ '
** Unknown exception encountered with possibly-broken third-party extension buggylocking
** which supports versions unknown of Mercurial.
** Please disable buggylocking and try your action again.
** If that fixes the bug please report it to the extension author.
** Python * (glob)
** Mercurial Distributed SCM (*) (glob)
** Extensions loaded: * (glob)
** ProgrammingError: something went wrong
** (try again)
Traceback (most recent call last):
Boris Feld
pypy: fix failing test-devel-warnings.t with Pypy5.6.0...
r33610 *ProgrammingError: something went wrong (glob)
Yuya Nishihara
error: add hint to ProgrammingError...
r32340
Pierre-Yves David
util: add a way to issue deprecation warning without a UI object...
r31950 Old style deprecation warning
$ hg nouiwarning
test: glob a line number in test-devel-warnings.t...
r33252 $TESTTMP/buggylocking.py:*: DeprecationWarning: this is a test (glob)
Pierre-Yves David
util: add a way to issue deprecation warning without a UI object...
r31950 (compatibility will be dropped after Mercurial-13.37, update your code.)
Augie Fackler
tests: add tons of b prefixes in test-devel-warnings.t...
r36142 util.nouideprecwarn(b'this is a test', b'13.37')
Pierre-Yves David
util: add a way to issue deprecation warning without a UI object...
r31950
(disabled outside of test run)
$ HGEMITWARNINGS= hg nouiwarning
configitems: issue a devel warning when overriding default config...
r32987 Test warning on config option access and registration
$ cat << EOF > ${TESTTMP}/buggyconfig.py
> """A small extension that tests our developer warnings for config"""
>
Boris Feld
configitems: handle case were the default value is not static...
r33471 > from mercurial import registrar, configitems
configitems: issue a devel warning when overriding default config...
r32987 >
> cmdtable = {}
> command = registrar.command(cmdtable)
>
configitems: add a devel warning for extensions items overiding core one...
r33128 > configtable = {}
> configitem = registrar.configitem(configtable)
>
Augie Fackler
tests: add tons of b prefixes in test-devel-warnings.t...
r36142 > configitem(b'test', b'some', default=b'foo')
> configitem(b'test', b'dynamic', default=configitems.dynamicdefault)
> configitem(b'test', b'callable', default=list)
configitems: add a devel warning for extensions items overiding core one...
r33128 > # overwrite a core config
Augie Fackler
tests: add tons of b prefixes in test-devel-warnings.t...
r36142 > configitem(b'ui', b'quiet', default=False)
> configitem(b'ui', b'interactive', default=None)
configitems: add a devel warning for extensions items overiding core one...
r33128 >
Pulkit Goyal
py3: make sure commands name are bytes in tests
r33097 > @command(b'buggyconfig')
configitems: issue a devel warning when overriding default config...
r32987 > def cmdbuggyconfig(ui, repo):
Augie Fackler
tests: add tons of b prefixes in test-devel-warnings.t...
r36142 > repo.ui.config(b'ui', b'quiet', True)
> repo.ui.config(b'ui', b'interactive', False)
> repo.ui.config(b'test', b'some', b'bar')
> repo.ui.config(b'test', b'some', b'foo')
> repo.ui.config(b'test', b'dynamic', b'some-required-default')
> repo.ui.config(b'test', b'dynamic')
> repo.ui.config(b'test', b'callable', [])
> repo.ui.config(b'test', b'callable', b'foo')
> repo.ui.config(b'test', b'unregistered')
> repo.ui.config(b'unregistered', b'unregistered')
configitems: issue a devel warning when overriding default config...
r32987 > EOF
$ hg --config "extensions.buggyconfig=${TESTTMP}/buggyconfig.py" buggyconfig
Boris Feld
extensions: factor extra data loading out...
r34187 devel-warn: extension 'buggyconfig' overwrite config item 'ui.interactive' at: */mercurial/extensions.py:* (_loadextra) (glob)
devel-warn: extension 'buggyconfig' overwrite config item 'ui.quiet' at: */mercurial/extensions.py:* (_loadextra) (glob)
Yuya Nishihara
configitems: relax warning about unwanted default value...
r34949 devel-warn: specifying a mismatched default value for a registered config item: 'ui.quiet' 'True' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
devel-warn: specifying a mismatched default value for a registered config item: 'ui.interactive' 'False' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
devel-warn: specifying a mismatched default value for a registered config item: 'test.some' 'bar' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
Boris Feld
configitems: handle case were the default value is not static...
r33471 devel-warn: config item requires an explicit default value: 'test.dynamic' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
Yuya Nishihara
configitems: relax warning about unwanted default value...
r34949 devel-warn: specifying a mismatched default value for a registered config item: 'test.callable' 'foo' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
Boris Feld
configitems: adds a developer warning when accessing undeclared configuration...
r34859 devel-warn: accessing unregistered config item: 'test.unregistered' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
devel-warn: accessing unregistered config item: 'unregistered.unregistered' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob)
configitems: issue a devel warning when overriding default config...
r32987
Pierre-Yves David
devel: move the lock-checking code into core...
r24386 $ cd ..