Mercurial > public > mercurial-scm > hg-stable
annotate tests/test-devel-warnings.t @ 33436:9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
When the appropriate developer warnings are enabled, We wrap 'repo.vfs.audit' to
check for locks when accessing file in '.hg' for writing. Another changeset will
add a 'ward' for the store vfs (svfs).
This check system has caught a handful of locking issues that have been fixed
in previous series (mostly in 4.0). I expect another batch to be caught in third
party extensions.
We introduce two real exceptions from extensions 'blackbox.log' (because a lot of
read-only operations add entry to it), and 'last-email.txt' (because 'hg email'
is currently a read only operation and there is value to keep it this way).
In addition we are currently allowing bisect to operate outside of the lock
because the current code is a bit hard to get properly locked for now. Multiple
clean up have been made but there is still a couple of them to do and the freeze
is coming.
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Tue, 11 Jul 2017 12:38:17 +0200 |
parents | 9359cd9345a9 |
children | 0720e6265c8a |
rev | line source |
---|---|
24386
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
1 |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
2 $ cat << EOF > buggylocking.py |
27270
ba5f20450b10
test: update the docstring of 'test-devel-warnings.t' extension
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25630
diff
changeset
|
3 > """A small extension that tests our developer warnings |
24386
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
4 > """ |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
5 > |
32379
9c023179e8d0
error: add hint to ProgrammingError
Yuya Nishihara <yuya@tcha.org>
parents:
32376
diff
changeset
|
6 > from mercurial import error, registrar, repair, util |
24386
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
7 > |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
8 > cmdtable = {} |
32376
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32040
diff
changeset
|
9 > command = registrar.command(cmdtable) |
24386
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
10 > |
32989
accfa165736b
py3: make sure the commands name are bytes in test-devel-warnings.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32942
diff
changeset
|
11 > @command(b'buggylocking', [], '') |
24386
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
12 > def buggylocking(ui, repo): |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
13 > lo = repo.lock() |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
14 > wl = repo.wlock() |
24392
dc7588ce06b3
tests: avoid deprecation warning
Matt Mackall <mpm@selenic.com>
parents:
24388
diff
changeset
|
15 > wl.release() |
dc7588ce06b3
tests: avoid deprecation warning
Matt Mackall <mpm@selenic.com>
parents:
24388
diff
changeset
|
16 > lo.release() |
24744
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24555
diff
changeset
|
17 > |
32989
accfa165736b
py3: make sure the commands name are bytes in test-devel-warnings.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32942
diff
changeset
|
18 > @command(b'buggytransaction', [], '') |
29185
28e7f590be2d
test: extract develwarn transaction testing in its own command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29147
diff
changeset
|
19 > def buggylocking(ui, repo): |
28e7f590be2d
test: extract develwarn transaction testing in its own command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29147
diff
changeset
|
20 > tr = repo.transaction('buggy') |
28e7f590be2d
test: extract develwarn transaction testing in its own command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29147
diff
changeset
|
21 > # make sure we rollback the transaction as we don't want to rely on the__del__ |
28e7f590be2d
test: extract develwarn transaction testing in its own command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29147
diff
changeset
|
22 > tr.release() |
28e7f590be2d
test: extract develwarn transaction testing in its own command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29147
diff
changeset
|
23 > |
32989
accfa165736b
py3: make sure the commands name are bytes in test-devel-warnings.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32942
diff
changeset
|
24 > @command(b'properlocking', [], '') |
24744
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24555
diff
changeset
|
25 > def properlocking(ui, repo): |
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24555
diff
changeset
|
26 > """check that reentrance is fine""" |
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24555
diff
changeset
|
27 > wl = repo.wlock() |
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24555
diff
changeset
|
28 > lo = repo.lock() |
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24555
diff
changeset
|
29 > tr = repo.transaction('proper') |
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24555
diff
changeset
|
30 > tr2 = repo.transaction('proper') |
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24555
diff
changeset
|
31 > lo2 = repo.lock() |
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24555
diff
changeset
|
32 > wl2 = repo.wlock() |
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24555
diff
changeset
|
33 > wl2.release() |
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24555
diff
changeset
|
34 > lo2.release() |
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24555
diff
changeset
|
35 > tr2.close() |
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24555
diff
changeset
|
36 > tr.close() |
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24555
diff
changeset
|
37 > lo.release() |
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24555
diff
changeset
|
38 > wl.release() |
24750
aaf835407bf2
wlock: do not warn for non-wait locking
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24749
diff
changeset
|
39 > |
32989
accfa165736b
py3: make sure the commands name are bytes in test-devel-warnings.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32942
diff
changeset
|
40 > @command(b'nowaitlocking', [], '') |
24750
aaf835407bf2
wlock: do not warn for non-wait locking
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24749
diff
changeset
|
41 > def nowaitlocking(ui, repo): |
aaf835407bf2
wlock: do not warn for non-wait locking
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24749
diff
changeset
|
42 > lo = repo.lock() |
aaf835407bf2
wlock: do not warn for non-wait locking
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24749
diff
changeset
|
43 > wl = repo.wlock(wait=False) |
aaf835407bf2
wlock: do not warn for non-wait locking
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24749
diff
changeset
|
44 > wl.release() |
aaf835407bf2
wlock: do not warn for non-wait locking
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24749
diff
changeset
|
45 > lo.release() |
25300
678d0bfdd31a
repair: forbid strip from inside a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25290
diff
changeset
|
46 > |
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33254
diff
changeset
|
47 > @command(b'no-wlock-write', [], '') |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33254
diff
changeset
|
48 > def nowlockwrite(ui, repo): |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33254
diff
changeset
|
49 > with repo.vfs(b'branch', 'a'): |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33254
diff
changeset
|
50 > pass |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33254
diff
changeset
|
51 > |
32989
accfa165736b
py3: make sure the commands name are bytes in test-devel-warnings.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32942
diff
changeset
|
52 > @command(b'stripintr', [], '') |
25300
678d0bfdd31a
repair: forbid strip from inside a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25290
diff
changeset
|
53 > def stripintr(ui, repo): |
678d0bfdd31a
repair: forbid strip from inside a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25290
diff
changeset
|
54 > lo = repo.lock() |
678d0bfdd31a
repair: forbid strip from inside a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25290
diff
changeset
|
55 > tr = repo.transaction('foobar') |
678d0bfdd31a
repair: forbid strip from inside a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25290
diff
changeset
|
56 > try: |
678d0bfdd31a
repair: forbid strip from inside a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25290
diff
changeset
|
57 > repair.strip(repo.ui, repo, [repo['.'].node()]) |
678d0bfdd31a
repair: forbid strip from inside a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25290
diff
changeset
|
58 > finally: |
678d0bfdd31a
repair: forbid strip from inside a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25290
diff
changeset
|
59 > lo.release() |
32989
accfa165736b
py3: make sure the commands name are bytes in test-devel-warnings.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32942
diff
changeset
|
60 > @command(b'oldanddeprecated', [], '') |
27275
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
61 > def oldanddeprecated(ui, repo): |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
62 > """test deprecation warning API""" |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
63 > def foobar(ui): |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
64 > ui.deprecwarn('foorbar is deprecated, go shopping', '42.1337') |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
65 > foobar(ui) |
32989
accfa165736b
py3: make sure the commands name are bytes in test-devel-warnings.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32942
diff
changeset
|
66 > @command(b'nouiwarning', [], '') |
31950
cc70c6dbac30
util: add a way to issue deprecation warning without a UI object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31809
diff
changeset
|
67 > def nouiwarning(ui, repo): |
cc70c6dbac30
util: add a way to issue deprecation warning without a UI object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31809
diff
changeset
|
68 > util.nouideprecwarn('this is a test', '13.37') |
32989
accfa165736b
py3: make sure the commands name are bytes in test-devel-warnings.t
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32942
diff
changeset
|
69 > @command(b'programmingerror', [], '') |
32379
9c023179e8d0
error: add hint to ProgrammingError
Yuya Nishihara <yuya@tcha.org>
parents:
32376
diff
changeset
|
70 > def programmingerror(ui, repo): |
9c023179e8d0
error: add hint to ProgrammingError
Yuya Nishihara <yuya@tcha.org>
parents:
32376
diff
changeset
|
71 > raise error.ProgrammingError('something went wrong', hint='try again') |
24386
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
72 > EOF |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
73 |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
74 $ cat << EOF >> $HGRCPATH |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
75 > [extensions] |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
76 > buggylocking=$TESTTMP/buggylocking.py |
28498 | 77 > mock=$TESTDIR/mockblackbox.py |
78 > blackbox= | |
24386
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
79 > [devel] |
25290
8f88f768e24c
devel: rename 'all' to 'all-warnings' (BC)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24755
diff
changeset
|
80 > all-warnings=1 |
24386
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
81 > EOF |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
82 |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
83 $ hg init lock-checker |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
84 $ cd lock-checker |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
85 $ hg buggylocking |
28016
a2be6f0f58fb
tests: relax test-devel-warnings to reduce false positives
timeless <timeless@mozdev.org>
parents:
27275
diff
changeset
|
86 devel-warn: "wlock" acquired after "lock" at: $TESTTMP/buggylocking.py:* (buggylocking) (glob) |
24386
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
87 $ cat << EOF >> $HGRCPATH |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
88 > [devel] |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
89 > all=0 |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
90 > check-locks=1 |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
91 > EOF |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
92 $ hg buggylocking |
28016
a2be6f0f58fb
tests: relax test-devel-warnings to reduce false positives
timeless <timeless@mozdev.org>
parents:
27275
diff
changeset
|
93 devel-warn: "wlock" acquired after "lock" at: $TESTTMP/buggylocking.py:* (buggylocking) (glob) |
24386
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
94 $ hg buggylocking --traceback |
24755
cd89f4e6faf2
devel-warn: add a prefix to all messages ("devel-warn: ")
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24750
diff
changeset
|
95 devel-warn: "wlock" acquired after "lock" at: |
24555
1b97cc5d2272
tests: fix py2.4 glob for devel warnings
Matt Mackall <mpm@selenic.com>
parents:
24392
diff
changeset
|
96 */hg:* in * (glob) |
24386
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
97 */mercurial/dispatch.py:* in run (glob) |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
98 */mercurial/dispatch.py:* in dispatch (glob) |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
99 */mercurial/dispatch.py:* in _runcatch (glob) |
32040
0fb78cb90ca7
dispatch: mark callcatch() as a private function
Yuya Nishihara <yuya@tcha.org>
parents:
31950
diff
changeset
|
100 */mercurial/dispatch.py:* in _callcatch (glob) |
30529
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
29795
diff
changeset
|
101 */mercurial/scmutil.py* in callcatch (glob) |
29773
39149b6036e6
dispatch: split global error handling out so it can be reused
Jun Wu <quark@fb.com>
parents:
29186
diff
changeset
|
102 */mercurial/dispatch.py:* in _runcatchfunc (glob) |
24386
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
103 */mercurial/dispatch.py:* in _dispatch (glob) |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
104 */mercurial/dispatch.py:* in runcommand (glob) |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
105 */mercurial/dispatch.py:* in _runcommand (glob) |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
106 */mercurial/dispatch.py:* in <lambda> (glob) |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
107 */mercurial/util.py:* in check (glob) |
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
108 $TESTTMP/buggylocking.py:* in buggylocking (glob) |
24744
bedefc611f25
wlock: only issue devel warning when actually acquiring the lock
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24555
diff
changeset
|
109 $ hg properlocking |
24750
aaf835407bf2
wlock: do not warn for non-wait locking
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
24749
diff
changeset
|
110 $ hg nowaitlocking |
25300
678d0bfdd31a
repair: forbid strip from inside a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25290
diff
changeset
|
111 |
33436
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33254
diff
changeset
|
112 Writing without lock |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33254
diff
changeset
|
113 |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33254
diff
changeset
|
114 $ hg no-wlock-write |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33254
diff
changeset
|
115 devel-warn: write with no wlock: "branch" at: $TESTTMP/buggylocking.py:* (nowlockwrite) (glob) |
9bb4decd43b0
repovfs: add a ward to check if locks are properly taken
Boris Feld <boris.feld@octobus.net>
parents:
33254
diff
changeset
|
116 |
33253
8dff2a0d3d12
test: add a small comment to explain a section of test-devel-warning
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33140
diff
changeset
|
117 Stripping from a transaction |
8dff2a0d3d12
test: add a small comment to explain a section of test-devel-warning
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33140
diff
changeset
|
118 |
25300
678d0bfdd31a
repair: forbid strip from inside a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25290
diff
changeset
|
119 $ echo a > a |
678d0bfdd31a
repair: forbid strip from inside a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25290
diff
changeset
|
120 $ hg add a |
678d0bfdd31a
repair: forbid strip from inside a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25290
diff
changeset
|
121 $ hg commit -m a |
31650 | 122 $ hg stripintr 2>&1 | egrep -v '^(\*\*| )' |
123 Traceback (most recent call last): | |
124 mercurial.error.ProgrammingError: cannot strip from inside a transaction | |
25300
678d0bfdd31a
repair: forbid strip from inside a transaction
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25290
diff
changeset
|
125 |
27275
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
126 $ hg oldanddeprecated |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
127 devel-warn: foorbar is deprecated, go shopping |
28016
a2be6f0f58fb
tests: relax test-devel-warnings to reduce false positives
timeless <timeless@mozdev.org>
parents:
27275
diff
changeset
|
128 (compatibility will be dropped after Mercurial-42.1337, update your code.) at: $TESTTMP/buggylocking.py:* (oldanddeprecated) (glob) |
25630
c88082baf693
devel-warn: issue a warning for old style revsets
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25300
diff
changeset
|
129 |
27275
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
130 $ hg oldanddeprecated --traceback |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
131 devel-warn: foorbar is deprecated, go shopping |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
132 (compatibility will be dropped after Mercurial-42.1337, update your code.) at: |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
133 */hg:* in <module> (glob) |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
134 */mercurial/dispatch.py:* in run (glob) |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
135 */mercurial/dispatch.py:* in dispatch (glob) |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
136 */mercurial/dispatch.py:* in _runcatch (glob) |
32040
0fb78cb90ca7
dispatch: mark callcatch() as a private function
Yuya Nishihara <yuya@tcha.org>
parents:
31950
diff
changeset
|
137 */mercurial/dispatch.py:* in _callcatch (glob) |
30529
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
29795
diff
changeset
|
138 */mercurial/scmutil.py* in callcatch (glob) |
29773
39149b6036e6
dispatch: split global error handling out so it can be reused
Jun Wu <quark@fb.com>
parents:
29186
diff
changeset
|
139 */mercurial/dispatch.py:* in _runcatchfunc (glob) |
27275
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
140 */mercurial/dispatch.py:* in _dispatch (glob) |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
141 */mercurial/dispatch.py:* in runcommand (glob) |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
142 */mercurial/dispatch.py:* in _runcommand (glob) |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
143 */mercurial/dispatch.py:* in <lambda> (glob) |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
144 */mercurial/util.py:* in check (glob) |
f2cd240f2f7c
ui: add a 'deprecwarn' helper to issue deprecation warnings
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
27270
diff
changeset
|
145 $TESTTMP/buggylocking.py:* in oldanddeprecated (glob) |
31809
35b8bb1ef02b
revset: stop supporting predicate that returns plain list (API)
Yuya Nishihara <yuya@tcha.org>
parents:
31776
diff
changeset
|
146 $ hg blackbox -l 7 |
28498 | 147 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated |
148 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> devel-warn: foorbar is deprecated, go shopping | |
149 (compatibility will be dropped after Mercurial-42.1337, update your code.) at: $TESTTMP/buggylocking.py:* (oldanddeprecated) (glob) | |
150 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated exited 0 after * seconds (glob) | |
151 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated --traceback | |
152 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> devel-warn: foorbar is deprecated, go shopping | |
153 (compatibility will be dropped after Mercurial-42.1337, update your code.) at: | |
154 */hg:* in <module> (glob) | |
155 */mercurial/dispatch.py:* in run (glob) | |
156 */mercurial/dispatch.py:* in dispatch (glob) | |
157 */mercurial/dispatch.py:* in _runcatch (glob) | |
32040
0fb78cb90ca7
dispatch: mark callcatch() as a private function
Yuya Nishihara <yuya@tcha.org>
parents:
31950
diff
changeset
|
158 */mercurial/dispatch.py:* in _callcatch (glob) |
30529
4338f87dbf6f
dispatch: move part of callcatch to scmutil
Jun Wu <quark@fb.com>
parents:
29795
diff
changeset
|
159 */mercurial/scmutil.py* in callcatch (glob) |
29773
39149b6036e6
dispatch: split global error handling out so it can be reused
Jun Wu <quark@fb.com>
parents:
29186
diff
changeset
|
160 */mercurial/dispatch.py:* in _runcatchfunc (glob) |
28498 | 161 */mercurial/dispatch.py:* in _dispatch (glob) |
162 */mercurial/dispatch.py:* in runcommand (glob) | |
163 */mercurial/dispatch.py:* in _runcommand (glob) | |
164 */mercurial/dispatch.py:* in <lambda> (glob) | |
165 */mercurial/util.py:* in check (glob) | |
166 $TESTTMP/buggylocking.py:* in oldanddeprecated (glob) | |
167 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> oldanddeprecated --traceback exited 0 after * seconds (glob) | |
31809
35b8bb1ef02b
revset: stop supporting predicate that returns plain list (API)
Yuya Nishihara <yuya@tcha.org>
parents:
31776
diff
changeset
|
168 1970/01/01 00:00:00 bob @cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b (5000)> blackbox -l 7 |
29185
28e7f590be2d
test: extract develwarn transaction testing in its own command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29147
diff
changeset
|
169 |
28e7f590be2d
test: extract develwarn transaction testing in its own command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29147
diff
changeset
|
170 Test programming error failure: |
28e7f590be2d
test: extract develwarn transaction testing in its own command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29147
diff
changeset
|
171 |
29186
e0fc0ed41935
transaction: turn lack of locking into a hard failure (API)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29185
diff
changeset
|
172 $ hg buggytransaction 2>&1 | egrep -v '^ ' |
e0fc0ed41935
transaction: turn lack of locking into a hard failure (API)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29185
diff
changeset
|
173 ** Unknown exception encountered with possibly-broken third-party extension buggylocking |
e0fc0ed41935
transaction: turn lack of locking into a hard failure (API)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29185
diff
changeset
|
174 ** which supports versions unknown of Mercurial. |
e0fc0ed41935
transaction: turn lack of locking into a hard failure (API)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29185
diff
changeset
|
175 ** Please disable buggylocking and try your action again. |
e0fc0ed41935
transaction: turn lack of locking into a hard failure (API)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29185
diff
changeset
|
176 ** If that fixes the bug please report it to the extension author. |
e0fc0ed41935
transaction: turn lack of locking into a hard failure (API)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29185
diff
changeset
|
177 ** Python * (glob) |
e0fc0ed41935
transaction: turn lack of locking into a hard failure (API)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29185
diff
changeset
|
178 ** Mercurial Distributed SCM (*) (glob) |
e0fc0ed41935
transaction: turn lack of locking into a hard failure (API)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29185
diff
changeset
|
179 ** Extensions loaded: * (glob) |
32379
9c023179e8d0
error: add hint to ProgrammingError
Yuya Nishihara <yuya@tcha.org>
parents:
32376
diff
changeset
|
180 ** ProgrammingError: transaction requires locking |
29186
e0fc0ed41935
transaction: turn lack of locking into a hard failure (API)
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29185
diff
changeset
|
181 Traceback (most recent call last): |
30579 | 182 mercurial.error.ProgrammingError: transaction requires locking |
29185
28e7f590be2d
test: extract develwarn transaction testing in its own command
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
29147
diff
changeset
|
183 |
32379
9c023179e8d0
error: add hint to ProgrammingError
Yuya Nishihara <yuya@tcha.org>
parents:
32376
diff
changeset
|
184 $ hg programmingerror 2>&1 | egrep -v '^ ' |
9c023179e8d0
error: add hint to ProgrammingError
Yuya Nishihara <yuya@tcha.org>
parents:
32376
diff
changeset
|
185 ** Unknown exception encountered with possibly-broken third-party extension buggylocking |
9c023179e8d0
error: add hint to ProgrammingError
Yuya Nishihara <yuya@tcha.org>
parents:
32376
diff
changeset
|
186 ** which supports versions unknown of Mercurial. |
9c023179e8d0
error: add hint to ProgrammingError
Yuya Nishihara <yuya@tcha.org>
parents:
32376
diff
changeset
|
187 ** Please disable buggylocking and try your action again. |
9c023179e8d0
error: add hint to ProgrammingError
Yuya Nishihara <yuya@tcha.org>
parents:
32376
diff
changeset
|
188 ** If that fixes the bug please report it to the extension author. |
9c023179e8d0
error: add hint to ProgrammingError
Yuya Nishihara <yuya@tcha.org>
parents:
32376
diff
changeset
|
189 ** Python * (glob) |
9c023179e8d0
error: add hint to ProgrammingError
Yuya Nishihara <yuya@tcha.org>
parents:
32376
diff
changeset
|
190 ** Mercurial Distributed SCM (*) (glob) |
9c023179e8d0
error: add hint to ProgrammingError
Yuya Nishihara <yuya@tcha.org>
parents:
32376
diff
changeset
|
191 ** Extensions loaded: * (glob) |
9c023179e8d0
error: add hint to ProgrammingError
Yuya Nishihara <yuya@tcha.org>
parents:
32376
diff
changeset
|
192 ** ProgrammingError: something went wrong |
9c023179e8d0
error: add hint to ProgrammingError
Yuya Nishihara <yuya@tcha.org>
parents:
32376
diff
changeset
|
193 ** (try again) |
9c023179e8d0
error: add hint to ProgrammingError
Yuya Nishihara <yuya@tcha.org>
parents:
32376
diff
changeset
|
194 Traceback (most recent call last): |
9c023179e8d0
error: add hint to ProgrammingError
Yuya Nishihara <yuya@tcha.org>
parents:
32376
diff
changeset
|
195 mercurial.error.ProgrammingError: something went wrong |
9c023179e8d0
error: add hint to ProgrammingError
Yuya Nishihara <yuya@tcha.org>
parents:
32376
diff
changeset
|
196 |
31950
cc70c6dbac30
util: add a way to issue deprecation warning without a UI object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31809
diff
changeset
|
197 Old style deprecation warning |
cc70c6dbac30
util: add a way to issue deprecation warning without a UI object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31809
diff
changeset
|
198 |
cc70c6dbac30
util: add a way to issue deprecation warning without a UI object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31809
diff
changeset
|
199 $ hg nouiwarning |
33254
9359cd9345a9
test: glob a line number in test-devel-warnings.t
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33253
diff
changeset
|
200 $TESTTMP/buggylocking.py:*: DeprecationWarning: this is a test (glob) |
31950
cc70c6dbac30
util: add a way to issue deprecation warning without a UI object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31809
diff
changeset
|
201 (compatibility will be dropped after Mercurial-13.37, update your code.) |
cc70c6dbac30
util: add a way to issue deprecation warning without a UI object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31809
diff
changeset
|
202 util.nouideprecwarn('this is a test', '13.37') |
cc70c6dbac30
util: add a way to issue deprecation warning without a UI object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31809
diff
changeset
|
203 |
cc70c6dbac30
util: add a way to issue deprecation warning without a UI object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31809
diff
changeset
|
204 (disabled outside of test run) |
cc70c6dbac30
util: add a way to issue deprecation warning without a UI object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31809
diff
changeset
|
205 |
cc70c6dbac30
util: add a way to issue deprecation warning without a UI object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31809
diff
changeset
|
206 $ HGEMITWARNINGS= hg nouiwarning |
cc70c6dbac30
util: add a way to issue deprecation warning without a UI object
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31809
diff
changeset
|
207 |
33005
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
208 Test warning on config option access and registration |
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
209 |
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
210 $ cat << EOF > ${TESTTMP}/buggyconfig.py |
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
211 > """A small extension that tests our developer warnings for config""" |
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
212 > |
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
213 > from mercurial import registrar |
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
214 > |
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
215 > cmdtable = {} |
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
216 > command = registrar.command(cmdtable) |
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
217 > |
33140
bf1292c057ef
configitems: add a devel warning for extensions items overiding core one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33109
diff
changeset
|
218 > configtable = {} |
bf1292c057ef
configitems: add a devel warning for extensions items overiding core one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33109
diff
changeset
|
219 > configitem = registrar.configitem(configtable) |
bf1292c057ef
configitems: add a devel warning for extensions items overiding core one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33109
diff
changeset
|
220 > |
bf1292c057ef
configitems: add a devel warning for extensions items overiding core one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33109
diff
changeset
|
221 > configitem('test', 'some', default='foo') |
bf1292c057ef
configitems: add a devel warning for extensions items overiding core one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33109
diff
changeset
|
222 > # overwrite a core config |
bf1292c057ef
configitems: add a devel warning for extensions items overiding core one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33109
diff
changeset
|
223 > configitem('ui', 'quiet', default=False) |
bf1292c057ef
configitems: add a devel warning for extensions items overiding core one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33109
diff
changeset
|
224 > configitem('ui', 'interactive', default=None) |
bf1292c057ef
configitems: add a devel warning for extensions items overiding core one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33109
diff
changeset
|
225 > |
33109
fce4ed2912bb
py3: make sure commands name are bytes in tests
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33073
diff
changeset
|
226 > @command(b'buggyconfig') |
33005
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
227 > def cmdbuggyconfig(ui, repo): |
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
228 > repo.ui.config('ui', 'quiet', False) |
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
229 > repo.ui.config('ui', 'interactive', None) |
33140
bf1292c057ef
configitems: add a devel warning for extensions items overiding core one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33109
diff
changeset
|
230 > repo.ui.config('test', 'some', 'foo') |
33005
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
231 > EOF |
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
232 |
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
233 $ hg --config "extensions.buggyconfig=${TESTTMP}/buggyconfig.py" buggyconfig |
33140
bf1292c057ef
configitems: add a devel warning for extensions items overiding core one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33109
diff
changeset
|
234 devel-warn: extension 'buggyconfig' overwrite config item 'ui.interactive' at: */mercurial/extensions.py:* (loadall) (glob) |
bf1292c057ef
configitems: add a devel warning for extensions items overiding core one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33109
diff
changeset
|
235 devel-warn: extension 'buggyconfig' overwrite config item 'ui.quiet' at: */mercurial/extensions.py:* (loadall) (glob) |
33005
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
236 devel-warn: specifying a default value for a registered config item: 'ui.quiet' 'False' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob) |
33073
c41cbe98822c
configitems: register 'ui.interactive'
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33005
diff
changeset
|
237 devel-warn: specifying a default value for a registered config item: 'ui.interactive' 'None' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob) |
33140
bf1292c057ef
configitems: add a devel warning for extensions items overiding core one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33109
diff
changeset
|
238 devel-warn: specifying a default value for a registered config item: 'test.some' 'foo' at: $TESTTMP/buggyconfig.py:* (cmdbuggyconfig) (glob) |
33005
149b68224b08
configitems: issue a devel warning when overriding default config
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32989
diff
changeset
|
239 |
24386
d6ac30f4edef
devel: move the lock-checking code into core
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
diff
changeset
|
240 $ cd .. |