Mercurial > hg
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 .. |