comparison tests/test-devel-warnings.t @ 25300:678d0bfdd31a

repair: forbid strip from inside a transaction Stripping inside a transaction will (at best) crash or (at worst) result in very unexpected results. We explicitly forbid it early.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Sat, 23 May 2015 21:18:47 -0700
parents 8f88f768e24c
children c88082baf693
comparison
equal deleted inserted replaced
25299:4f07fb1d7fbb 25300:678d0bfdd31a
1 1
2 $ cat << EOF > buggylocking.py 2 $ cat << EOF > buggylocking.py
3 > """A small extension that acquire locks in the wrong order 3 > """A small extension that acquire locks in the wrong order
4 > """ 4 > """
5 > 5 >
6 > from mercurial import cmdutil 6 > from mercurial import cmdutil, repair
7 > 7 >
8 > cmdtable = {} 8 > cmdtable = {}
9 > command = cmdutil.command(cmdtable) 9 > command = cmdutil.command(cmdtable)
10 > 10 >
11 > @command('buggylocking', [], '') 11 > @command('buggylocking', [], '')
36 > def nowaitlocking(ui, repo): 36 > def nowaitlocking(ui, repo):
37 > lo = repo.lock() 37 > lo = repo.lock()
38 > wl = repo.wlock(wait=False) 38 > wl = repo.wlock(wait=False)
39 > wl.release() 39 > wl.release()
40 > lo.release() 40 > lo.release()
41 >
42 > @command('stripintr', [], '')
43 > def stripintr(ui, repo):
44 > lo = repo.lock()
45 > tr = repo.transaction('foobar')
46 > try:
47 > repair.strip(repo.ui, repo, [repo['.'].node()])
48 > finally:
49 > lo.release()
41 > EOF 50 > EOF
42 51
43 $ cat << EOF >> $HGRCPATH 52 $ cat << EOF >> $HGRCPATH
44 > [extensions] 53 > [extensions]
45 > buggylocking=$TESTTMP/buggylocking.py 54 > buggylocking=$TESTTMP/buggylocking.py
85 */mercurial/dispatch.py:* in <lambda> (glob) 94 */mercurial/dispatch.py:* in <lambda> (glob)
86 */mercurial/util.py:* in check (glob) 95 */mercurial/util.py:* in check (glob)
87 $TESTTMP/buggylocking.py:* in buggylocking (glob) 96 $TESTTMP/buggylocking.py:* in buggylocking (glob)
88 $ hg properlocking 97 $ hg properlocking
89 $ hg nowaitlocking 98 $ hg nowaitlocking
99
100 $ echo a > a
101 $ hg add a
102 $ hg commit -m a
103 $ hg stripintr
104 saved backup bundle to $TESTTMP/lock-checker/.hg/strip-backup/cb9a9f314b8b-cc5ccb0b-backup.hg (glob)
105 abort: programming error: cannot strip from inside a transaction
106 (contact your extension maintainer)
107 [255]
108
90 $ cd .. 109 $ cd ..