Mercurial > hg
annotate tests/test-clone-update-order.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 | 701df761aa94 |
children | eb586ed5d8ce |
rev | line source |
---|---|
12286
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
1 $ hg init |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
2 $ echo foo > bar |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
3 $ hg commit -Am default |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
4 adding bar |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
5 $ hg up -r null |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
6 0 files updated, 0 files merged, 1 files removed, 0 files unresolved |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
7 $ hg branch mine |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
8 marked working directory as branch mine |
15615 | 9 (branches are permanent and global, did you want a bookmark?) |
12286
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
10 $ echo hello > world |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
11 $ hg commit -Am hello |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
12 adding world |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
13 $ hg up -r null |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
14 0 files updated, 0 files merged, 1 files removed, 0 files unresolved |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
15 $ hg branch other |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
16 marked working directory as branch other |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
17 $ echo good > bye |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
18 $ hg commit -Am other |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
19 adding bye |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
20 $ hg up -r mine |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
21 1 files updated, 0 files merged, 1 files removed, 0 files unresolved |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
22 |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
23 $ hg clone -U -u . .#other ../b -r 0 -r 1 -r 2 -b other |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
24 abort: cannot specify both --noupdate and --updaterev |
12316
4134686b83e1
tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents:
12286
diff
changeset
|
25 [255] |
10637
7ce62865d72a
commands: document and test hg clone update priority
timeless <timeless@gmail.com>
parents:
diff
changeset
|
26 |
12286
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
27 $ hg clone -U .#other ../b -r 0 -r 1 -r 2 -b other |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
28 adding changesets |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
29 adding manifests |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
30 adding file changes |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
31 added 3 changesets with 3 changes to 3 files (+2 heads) |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
32 $ rm -rf ../b |
10637
7ce62865d72a
commands: document and test hg clone update priority
timeless <timeless@gmail.com>
parents:
diff
changeset
|
33 |
12286
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
34 $ hg clone -u . .#other ../b -r 0 -r 1 -r 2 -b other |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
35 adding changesets |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
36 adding manifests |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
37 adding file changes |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
38 added 3 changesets with 3 changes to 3 files (+2 heads) |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
39 updating to branch mine |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
40 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
41 $ rm -rf ../b |
10637
7ce62865d72a
commands: document and test hg clone update priority
timeless <timeless@gmail.com>
parents:
diff
changeset
|
42 |
12286
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
43 $ hg clone -u 0 .#other ../b -r 0 -r 1 -r 2 -b other |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
44 adding changesets |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
45 adding manifests |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
46 adding file changes |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
47 added 3 changesets with 3 changes to 3 files (+2 heads) |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
48 updating to branch default |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
49 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
50 $ rm -rf ../b |
10637
7ce62865d72a
commands: document and test hg clone update priority
timeless <timeless@gmail.com>
parents:
diff
changeset
|
51 |
12286
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
52 $ hg clone -u 1 .#other ../b -r 0 -r 1 -r 2 -b other |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
53 adding changesets |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
54 adding manifests |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
55 adding file changes |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
56 added 3 changesets with 3 changes to 3 files (+2 heads) |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
57 updating to branch mine |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
58 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
59 $ rm -rf ../b |
10637
7ce62865d72a
commands: document and test hg clone update priority
timeless <timeless@gmail.com>
parents:
diff
changeset
|
60 |
12286
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
61 $ hg clone -u 2 .#other ../b -r 0 -r 1 -r 2 -b other |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
62 adding changesets |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
63 adding manifests |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
64 adding file changes |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
65 added 3 changesets with 3 changes to 3 files (+2 heads) |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
66 updating to branch other |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
67 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
68 $ rm -rf ../b |
10637
7ce62865d72a
commands: document and test hg clone update priority
timeless <timeless@gmail.com>
parents:
diff
changeset
|
69 |
12286
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
70 Test -r mine ... mine is ignored: |
10637
7ce62865d72a
commands: document and test hg clone update priority
timeless <timeless@gmail.com>
parents:
diff
changeset
|
71 |
12286
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
72 $ hg clone -u 2 .#other ../b -r mine -r 0 -r 1 -r 2 -b other |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
73 adding changesets |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
74 adding manifests |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
75 adding file changes |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
76 added 3 changesets with 3 changes to 3 files (+2 heads) |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
77 updating to branch other |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
78 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
79 $ rm -rf ../b |
10637
7ce62865d72a
commands: document and test hg clone update priority
timeless <timeless@gmail.com>
parents:
diff
changeset
|
80 |
12286
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
81 $ hg clone .#other ../b -b default -b mine |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
82 adding changesets |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
83 adding manifests |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
84 adding file changes |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
85 added 3 changesets with 3 changes to 3 files (+2 heads) |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
86 updating to branch default |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
87 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
88 $ rm -rf ../b |
10637
7ce62865d72a
commands: document and test hg clone update priority
timeless <timeless@gmail.com>
parents:
diff
changeset
|
89 |
12286
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
90 $ hg clone .#other ../b |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
91 adding changesets |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
92 adding manifests |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
93 adding file changes |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
94 added 1 changesets with 1 changes to 1 files |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
95 updating to branch other |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
96 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
97 $ rm -rf ../b |
10637
7ce62865d72a
commands: document and test hg clone update priority
timeless <timeless@gmail.com>
parents:
diff
changeset
|
98 |
12286
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
99 $ hg clone -U . ../c -r 1 -r 2 > /dev/null |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
100 $ hg clone ../c ../b |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
101 updating to branch other |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
102 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
103 $ rm -rf ../b ../c |
63352a7a8c1c
tests: unify test-clone-update-order
Adrian Buehlmann <adrian@cadifra.com>
parents:
10637
diff
changeset
|
104 |