Mercurial > hg
annotate tests/test-manifest.t @ 26631:e077ce385609
localrepo: restore dirstate to one before rollbacking if not parent-gone
'localrepository.rollback()' explicilty restores dirstate, only if at
least one of current parents of the working directory is removed at
rollbacking (a.k.a "parent-gone").
After DirstateTransactionPlan, 'dirstate.write()' will cause marking
'.hg/dirstate' as a file to be restored at rollbacking.
https://mercurial.selenic.com/wiki/DirstateTransactionPlan
Then, 'transaction.rollback()' restores '.hg/dirstate' regardless of
parents of the working directory at that time, and this causes
unexpected dirstate changes if not "parent-gone" (e.g. "hg update" to
another branch after "hg commit" or so, then "hg rollback").
To avoid such situation, this patch restores dirstate to one before
rollbacking if not "parent-gone".
before:
b1. restore dirstate explicitly, if "parent-gone"
after:
a1. save dirstate before actual rollbacking via dirstateguard
a2. restore dirstate via 'transaction.rollback()'
a3. if "parent-gone"
- discard backup (a1)
- restore dirstate from 'undo.dirstate'
a4. otherwise, restore dirstate from backup (a1)
Even though restoring dirstate at (a3) after (a2) seems redundant,
this patch keeps this existing code path, because:
- it isn't ensured that 'dirstate.write()' was invoked at least once
while transaction running
If not, '.hg/dirstate' isn't restored at (a2).
In addition to it, rude 3rd party extension invoking
'dirstate.write()' without 'repo' while transaction running (see
subsequent patches for detail) may break consistency of a file
backup-ed by transaction.
- this patch mainly focuses on changes for DirstateTransactionPlan
Restoring dirstate at (a3) itself should be cheaper enough than
rollbacking itself. Redundancy will be removed in next step.
Newly added test is almost meaningless at this point. It will be used
to detect regression while implementing delayed dirstate write out.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Tue, 13 Oct 2015 12:25:43 -0700 |
parents | bbe56e07e07a |
children | 4441705b7111 |
rev | line source |
---|---|
12328
b63f6422d2a7
tests: fix a bunch of pointless #s in unified tests
Matt Mackall <mpm@selenic.com>
parents:
12316
diff
changeset
|
1 Source bundle was generated with the following script: |
b63f6422d2a7
tests: fix a bunch of pointless #s in unified tests
Matt Mackall <mpm@selenic.com>
parents:
12316
diff
changeset
|
2 |
5406
f11554a097c8
test-manifest: test symlink and exec bit display
Patrick Mezard <pmezard@gmail.com>
parents:
5155
diff
changeset
|
3 # hg init |
f11554a097c8
test-manifest: test symlink and exec bit display
Patrick Mezard <pmezard@gmail.com>
parents:
5155
diff
changeset
|
4 # echo a > a |
f11554a097c8
test-manifest: test symlink and exec bit display
Patrick Mezard <pmezard@gmail.com>
parents:
5155
diff
changeset
|
5 # ln -s a l |
f11554a097c8
test-manifest: test symlink and exec bit display
Patrick Mezard <pmezard@gmail.com>
parents:
5155
diff
changeset
|
6 # hg ci -Ama -d'0 0' |
f11554a097c8
test-manifest: test symlink and exec bit display
Patrick Mezard <pmezard@gmail.com>
parents:
5155
diff
changeset
|
7 # mkdir b |
f11554a097c8
test-manifest: test symlink and exec bit display
Patrick Mezard <pmezard@gmail.com>
parents:
5155
diff
changeset
|
8 # echo a > b/a |
f11554a097c8
test-manifest: test symlink and exec bit display
Patrick Mezard <pmezard@gmail.com>
parents:
5155
diff
changeset
|
9 # chmod +x b/a |
f11554a097c8
test-manifest: test symlink and exec bit display
Patrick Mezard <pmezard@gmail.com>
parents:
5155
diff
changeset
|
10 # hg ci -Amb -d'1 0' |
f11554a097c8
test-manifest: test symlink and exec bit display
Patrick Mezard <pmezard@gmail.com>
parents:
5155
diff
changeset
|
11 |
12253
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
12 $ hg init |
14116
cd3032437064
tests: move test bundles in a bundles/ subdirectory
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12346
diff
changeset
|
13 $ hg -q pull "$TESTDIR/bundles/test-manifest.hg" |
12253
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
14 |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
15 The next call is expected to return nothing: |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
16 |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
17 $ hg manifest |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
18 |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
19 $ hg co |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
20 3 files updated, 0 files merged, 0 files removed, 0 files unresolved |
5406
f11554a097c8
test-manifest: test symlink and exec bit display
Patrick Mezard <pmezard@gmail.com>
parents:
5155
diff
changeset
|
21 |
12253
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
22 $ hg manifest |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
23 a |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
24 b/a |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
25 l |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
26 |
22423
edf07a804ac4
files: add new command unifying locate and manifest functionality
Matt Mackall <mpm@selenic.com>
parents:
16907
diff
changeset
|
27 $ hg files -vr . |
edf07a804ac4
files: add new command unifying locate and manifest functionality
Matt Mackall <mpm@selenic.com>
parents:
16907
diff
changeset
|
28 2 a |
23348
bbe56e07e07a
tests: fix globs for Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
22423
diff
changeset
|
29 2 x b/a (glob) |
22423
edf07a804ac4
files: add new command unifying locate and manifest functionality
Matt Mackall <mpm@selenic.com>
parents:
16907
diff
changeset
|
30 1 l l |
edf07a804ac4
files: add new command unifying locate and manifest functionality
Matt Mackall <mpm@selenic.com>
parents:
16907
diff
changeset
|
31 $ hg files -r . -X b |
edf07a804ac4
files: add new command unifying locate and manifest functionality
Matt Mackall <mpm@selenic.com>
parents:
16907
diff
changeset
|
32 a |
edf07a804ac4
files: add new command unifying locate and manifest functionality
Matt Mackall <mpm@selenic.com>
parents:
16907
diff
changeset
|
33 l |
edf07a804ac4
files: add new command unifying locate and manifest functionality
Matt Mackall <mpm@selenic.com>
parents:
16907
diff
changeset
|
34 |
12253
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
35 $ hg manifest -v |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
36 644 a |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
37 755 * b/a |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
38 644 @ l |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
39 |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
40 $ hg manifest --debug |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
41 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 644 a |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
42 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 755 * b/a |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
43 047b75c6d7a3ef6a2243bd0e99f94f6ea6683597 644 @ l |
6737
7239e06e58e9
context: consistently return p1 context for None
Matt Mackall <mpm@selenic.com>
parents:
5406
diff
changeset
|
44 |
12253
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
45 $ hg manifest -r 0 |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
46 a |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
47 l |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
48 |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
49 $ hg manifest -r 1 |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
50 a |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
51 b/a |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
52 l |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
53 |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
54 $ hg manifest -r tip |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
55 a |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
56 b/a |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
57 l |
5155
13d23d66a6cd
manifest: accept -r for rev specification
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
58 |
12253
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
59 $ hg manifest tip |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
60 a |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
61 b/a |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
62 l |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
63 |
14399
71938479eff9
add new option --all to manifest command
Adrian Buehlmann <adrian@cadifra.com>
parents:
14116
diff
changeset
|
64 $ hg manifest --all |
71938479eff9
add new option --all to manifest command
Adrian Buehlmann <adrian@cadifra.com>
parents:
14116
diff
changeset
|
65 a |
71938479eff9
add new option --all to manifest command
Adrian Buehlmann <adrian@cadifra.com>
parents:
14116
diff
changeset
|
66 b/a |
71938479eff9
add new option --all to manifest command
Adrian Buehlmann <adrian@cadifra.com>
parents:
14116
diff
changeset
|
67 l |
12253
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
68 |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
69 The next two calls are expected to abort: |
5155
13d23d66a6cd
manifest: accept -r for rev specification
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff
changeset
|
70 |
12253
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
71 $ hg manifest -r 2 |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
72 abort: unknown revision '2'! |
12316
4134686b83e1
tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents:
12253
diff
changeset
|
73 [255] |
12253
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
74 |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
75 $ hg manifest -r tip tip |
e5aee120287b
tests: unify test-manifest*
Adrian Buehlmann <adrian@cadifra.com>
parents:
6737
diff
changeset
|
76 abort: please specify just one revision |
12316
4134686b83e1
tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents:
12253
diff
changeset
|
77 [255] |