Mercurial > hg
annotate tests/test-obsolete-tag-cache.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 | e8f9dffca36f |
children | ab6468270b83 |
rev | line source |
---|---|
24144
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1 $ cat >> $HGRCPATH << EOF |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
2 > [extensions] |
24760
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
3 > blackbox= |
24144
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
4 > rebase= |
24760
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
5 > mock=$TESTDIR/mockblackbox.py |
24144
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
6 > |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
7 > [experimental] |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
8 > evolution = createmarkers |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
9 > EOF |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
10 |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
11 Create a repo with some tags |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
12 |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
13 $ hg init repo |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
14 $ cd repo |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
15 $ echo initial > foo |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
16 $ hg -q commit -A -m initial |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
17 $ hg tag -m 'test tag' test1 |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
18 $ echo first > first |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
19 $ hg -q commit -A -m first |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
20 $ hg tag -m 'test2 tag' test2 |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
21 $ hg -q up -r 0 |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
22 $ echo newhead > newhead |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
23 $ hg commit -A -m newhead |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
24 adding newhead |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
25 created new head |
24760
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
26 $ hg tag -m 'test head 2 tag' head2 |
24144
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
27 |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
28 $ hg log -G -T '{rev}:{node|short} {tags} {desc}\n' |
24760
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
29 @ 5:2942a772f72a tip test head 2 tag |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
30 | |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
31 o 4:042eb6bfcc49 head2 newhead |
24144
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
32 | |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
33 | o 3:c3cb30f2d2cd test2 tag |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
34 | | |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
35 | o 2:d75775ffbc6b test2 first |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
36 | | |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
37 | o 1:5f97d42da03f test tag |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
38 |/ |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
39 o 0:55482a6fb4b1 test1 initial |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
40 |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
41 |
24760
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
42 Trigger tags cache population by doing something that accesses tags info |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
43 |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
44 $ hg tags |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
45 tip 5:2942a772f72a |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
46 head2 4:042eb6bfcc49 |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
47 test2 2:d75775ffbc6b |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
48 test1 0:55482a6fb4b1 |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
49 |
24762
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
50 $ cat .hg/cache/tags2-visible |
24760
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
51 5 2942a772f72a444bef4bef13874d515f50fa27b6 |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
52 042eb6bfcc4909bad84a1cbf6eb1ddf0ab587d41 head2 |
24144
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
53 55482a6fb4b1881fa8f746fd52cf6f096bb21c89 test1 |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
54 d75775ffbc6bca1794d300f5571272879bd280da test2 |
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
55 |
24760
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
56 Hiding a non-tip changeset should change filtered hash and cause tags recompute |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
57 |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
58 $ hg debugobsolete -d '0 0' c3cb30f2d2cd0aae008cc91a07876e3c5131fd22 -u dummyuser |
24144
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
59 |
24760
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
60 $ hg tags |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
61 tip 5:2942a772f72a |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
62 head2 4:042eb6bfcc49 |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
63 test1 0:55482a6fb4b1 |
24144
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
64 |
24762
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
65 $ cat .hg/cache/tags2-visible |
24760
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
66 5 2942a772f72a444bef4bef13874d515f50fa27b6 f34fbc9a9769ba9eff5aff3d008a6b49f85c08b1 |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
67 042eb6bfcc4909bad84a1cbf6eb1ddf0ab587d41 head2 |
24144
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
68 55482a6fb4b1881fa8f746fd52cf6f096bb21c89 test1 |
24760
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
69 |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
70 $ hg blackbox -l 4 |
26185 | 71 1970/01/01 00:00:00 bob (*)> tags (glob) |
72 1970/01/01 00:00:00 bob (*)> 2/2 cache hits/lookups in * seconds (glob) | |
73 1970/01/01 00:00:00 bob (*)> writing .hg/cache/tags2-visible with 2 tags (glob) | |
74 1970/01/01 00:00:00 bob (*)> tags exited 0 after * seconds (glob) | |
24760
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
75 |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
76 Hiding another changeset should cause the filtered hash to change |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
77 |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
78 $ hg debugobsolete -d '0 0' d75775ffbc6bca1794d300f5571272879bd280da -u dummyuser |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
79 $ hg debugobsolete -d '0 0' 5f97d42da03fd56f3b228b03dfe48af5c0adf75b -u dummyuser |
24144
a35b59d4df33
tests: add test showing tags cache drops filtered heads (issue4550)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
80 |
24760
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
81 $ hg tags |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
82 tip 5:2942a772f72a |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
83 head2 4:042eb6bfcc49 |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
84 |
24762
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
85 $ cat .hg/cache/tags2-visible |
24760
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
86 5 2942a772f72a444bef4bef13874d515f50fa27b6 2fce1eec33263d08a4d04293960fc73a555230e4 |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
87 042eb6bfcc4909bad84a1cbf6eb1ddf0ab587d41 head2 |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
88 |
410f3856196f
tags: change format of tags cache files
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24737
diff
changeset
|
89 $ hg blackbox -l 4 |
26185 | 90 1970/01/01 00:00:00 bob (*)> tags (glob) |
91 1970/01/01 00:00:00 bob (*)> 1/1 cache hits/lookups in * seconds (glob) | |
92 1970/01/01 00:00:00 bob (*)> writing .hg/cache/tags2-visible with 1 tags (glob) | |
93 1970/01/01 00:00:00 bob (*)> tags exited 0 after * seconds (glob) | |
24762
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
94 |
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
95 Resolving tags on an unfiltered repo writes a separate tags cache |
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
96 |
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
97 $ hg --hidden tags |
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
98 tip 5:2942a772f72a |
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
99 head2 4:042eb6bfcc49 |
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
100 test2 2:d75775ffbc6b |
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
101 test1 0:55482a6fb4b1 |
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
102 |
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
103 $ cat .hg/cache/tags2 |
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
104 5 2942a772f72a444bef4bef13874d515f50fa27b6 |
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
105 042eb6bfcc4909bad84a1cbf6eb1ddf0ab587d41 head2 |
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
106 55482a6fb4b1881fa8f746fd52cf6f096bb21c89 test1 |
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
107 d75775ffbc6bca1794d300f5571272879bd280da test2 |
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
108 |
1062663808ce
tags: write a separate tags cache file for unfiltered repos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
24760
diff
changeset
|
109 $ hg blackbox -l 4 |
26185 | 110 1970/01/01 00:00:00 bob (*)> --hidden tags (glob) |
111 1970/01/01 00:00:00 bob (*)> 2/2 cache hits/lookups in * seconds (glob) | |
112 1970/01/01 00:00:00 bob (*)> writing .hg/cache/tags2 with 3 tags (glob) | |
113 1970/01/01 00:00:00 bob (*)> --hidden tags exited 0 after * seconds (glob) |