2015-01-16 13:51:10 +03:00
|
|
|
|
|
|
|
$ cat << EOF > buggylocking.py
|
|
|
|
> """A small extension that acquire locks in the wrong order
|
|
|
|
> """
|
|
|
|
>
|
|
|
|
> from mercurial import cmdutil
|
|
|
|
>
|
|
|
|
> cmdtable = {}
|
|
|
|
> command = cmdutil.command(cmdtable)
|
|
|
|
>
|
|
|
|
> @command('buggylocking', [], '')
|
|
|
|
> def buggylocking(ui, repo):
|
2015-03-11 07:03:45 +03:00
|
|
|
> tr = repo.transaction('buggy')
|
2015-01-16 13:51:10 +03:00
|
|
|
> lo = repo.lock()
|
|
|
|
> wl = repo.wlock()
|
2015-03-19 23:21:08 +03:00
|
|
|
> wl.release()
|
|
|
|
> lo.release()
|
2015-04-12 17:01:48 +03:00
|
|
|
>
|
|
|
|
> @command('properlocking', [], '')
|
|
|
|
> def properlocking(ui, repo):
|
|
|
|
> """check that reentrance is fine"""
|
|
|
|
> wl = repo.wlock()
|
|
|
|
> lo = repo.lock()
|
|
|
|
> tr = repo.transaction('proper')
|
|
|
|
> tr2 = repo.transaction('proper')
|
|
|
|
> lo2 = repo.lock()
|
|
|
|
> wl2 = repo.wlock()
|
|
|
|
> wl2.release()
|
|
|
|
> lo2.release()
|
|
|
|
> tr2.close()
|
|
|
|
> tr.close()
|
|
|
|
> lo.release()
|
|
|
|
> wl.release()
|
2015-04-12 22:37:59 +03:00
|
|
|
>
|
|
|
|
> @command('nowaitlocking', [], '')
|
|
|
|
> def nowaitlocking(ui, repo):
|
|
|
|
> lo = repo.lock()
|
|
|
|
> wl = repo.wlock(wait=False)
|
|
|
|
> wl.release()
|
|
|
|
> lo.release()
|
2015-01-16 13:51:10 +03:00
|
|
|
> EOF
|
|
|
|
|
|
|
|
$ cat << EOF >> $HGRCPATH
|
|
|
|
> [extensions]
|
|
|
|
> buggylocking=$TESTTMP/buggylocking.py
|
|
|
|
> [devel]
|
|
|
|
> all=1
|
|
|
|
> EOF
|
|
|
|
|
|
|
|
$ hg init lock-checker
|
|
|
|
$ cd lock-checker
|
|
|
|
$ hg buggylocking
|
2015-04-12 21:27:42 +03:00
|
|
|
transaction with no lock at: $TESTTMP/buggylocking.py:11 (buggylocking)
|
|
|
|
"wlock" acquired after "lock" at: $TESTTMP/buggylocking.py:13 (buggylocking)
|
2015-01-16 13:51:10 +03:00
|
|
|
$ cat << EOF >> $HGRCPATH
|
|
|
|
> [devel]
|
|
|
|
> all=0
|
|
|
|
> check-locks=1
|
|
|
|
> EOF
|
|
|
|
$ hg buggylocking
|
2015-04-12 21:27:42 +03:00
|
|
|
transaction with no lock at: $TESTTMP/buggylocking.py:11 (buggylocking)
|
|
|
|
"wlock" acquired after "lock" at: $TESTTMP/buggylocking.py:13 (buggylocking)
|
2015-01-16 13:51:10 +03:00
|
|
|
$ hg buggylocking --traceback
|
2015-04-12 21:26:11 +03:00
|
|
|
transaction with no lock at:
|
2015-04-01 02:09:21 +03:00
|
|
|
*/hg:* in * (glob)
|
2015-03-11 07:03:45 +03:00
|
|
|
*/mercurial/dispatch.py:* in run (glob)
|
|
|
|
*/mercurial/dispatch.py:* in dispatch (glob)
|
|
|
|
*/mercurial/dispatch.py:* in _runcatch (glob)
|
|
|
|
*/mercurial/dispatch.py:* in _dispatch (glob)
|
|
|
|
*/mercurial/dispatch.py:* in runcommand (glob)
|
|
|
|
*/mercurial/dispatch.py:* in _runcommand (glob)
|
|
|
|
*/mercurial/dispatch.py:* in checkargs (glob)
|
|
|
|
*/mercurial/dispatch.py:* in <lambda> (glob)
|
|
|
|
*/mercurial/util.py:* in check (glob)
|
|
|
|
$TESTTMP/buggylocking.py:* in buggylocking (glob)
|
2015-04-12 21:26:11 +03:00
|
|
|
"wlock" acquired after "lock" at:
|
2015-04-01 02:09:21 +03:00
|
|
|
*/hg:* in * (glob)
|
2015-01-16 13:51:10 +03:00
|
|
|
*/mercurial/dispatch.py:* in run (glob)
|
|
|
|
*/mercurial/dispatch.py:* in dispatch (glob)
|
|
|
|
*/mercurial/dispatch.py:* in _runcatch (glob)
|
|
|
|
*/mercurial/dispatch.py:* in _dispatch (glob)
|
|
|
|
*/mercurial/dispatch.py:* in runcommand (glob)
|
|
|
|
*/mercurial/dispatch.py:* in _runcommand (glob)
|
|
|
|
*/mercurial/dispatch.py:* in checkargs (glob)
|
|
|
|
*/mercurial/dispatch.py:* in <lambda> (glob)
|
|
|
|
*/mercurial/util.py:* in check (glob)
|
|
|
|
$TESTTMP/buggylocking.py:* in buggylocking (glob)
|
2015-04-12 17:01:48 +03:00
|
|
|
$ hg properlocking
|
2015-04-12 22:37:59 +03:00
|
|
|
$ hg nowaitlocking
|
2015-01-16 13:51:10 +03:00
|
|
|
$ cd ..
|