Mercurial > hg
annotate tests/test-update-reverse.t @ 29196:bf7b8157c483 stable
strip: invalidate phase cache after stripping changeset (issue5235)
When we remove a changeset from the changelog, the phase cache must be
invalidated, otherwise it could refer to changesets that are no longer in the
repo.
To reproduce the failure, I created an extension querying the phase cache after
the strip transaction is over.
To do that, I stripped two commits with a bookmark on one of them to force
another transaction (we open a transaction for moving bookmarks)
after the strip transaction.
Without the fix in this patch, the test leads to a stacktrace showing the issue:
repair.strip(ui, repo, revs, backup)
File "/Users/lcharignon/facebook-hg-rpms/hg-crew/mercurial/repair.py", line 205, in strip
tr.close()
File "/Users/lcharignon/facebook-hg-rpms/hg-crew/mercurial/transaction.py", line 44, in _active
return func(self, *args, **kwds)
File "/Users/lcharignon/facebook-hg-rpms/hg-crew/mercurial/transaction.py", line 490, in close
self._postclosecallback[cat](self)
File "$TESTTMP/crashstrip2.py", line 4, in test
[repo.changelog.node(r) for r in repo.revs("not public()")]
File "/Users/lcharignon/facebook-hg-rpms/hg-crew/mercurial/changelog.py", line 337, in node
return super(changelog, self).node(rev)
File "/Users/lcharignon/facebook-hg-rpms/hg-crew/mercurial/revlog.py", line 377, in node
return self.index[rev][7]
IndexError: revlog index out of range
The situation was encountered in inhibit (evolve's repo) where we would crash
following the volatile set invalidation submitted by Augie in
e6f490e328635312ee214a12bc7fd3c7d46bf9ce. Before his patch the issue was masked
as we were not accessing the phasecache after stripping a revision.
This bug uncovered another but in histedit (see explanation in issue5235).
I changed the histedit test accordingly to avoid fixing two things at once.
author | Laurent Charignon <lcharignon@fb.com> |
---|---|
date | Thu, 12 May 2016 06:13:59 -0700 |
parents | bd625cd4e5e7 |
children | 5c2a4f37eace |
rev | line source |
---|---|
12279 | 1 $ hg init |
2 | |
3 $ touch a | |
4 $ hg add a | |
5 $ hg commit -m "Added a" | |
1236
67a28636ea64
Fix bug with co -C across branches, update tests
mpm@selenic.com
parents:
diff
changeset
|
6 |
12279 | 7 $ touch main |
8 $ hg add main | |
9 $ hg commit -m "Added main" | |
10 $ hg checkout 0 | |
11 0 files updated, 0 files merged, 1 files removed, 0 files unresolved | |
1236
67a28636ea64
Fix bug with co -C across branches, update tests
mpm@selenic.com
parents:
diff
changeset
|
12 |
12279 | 13 'main' should be gone: |
14 | |
15 $ ls | |
16 a | |
1236
67a28636ea64
Fix bug with co -C across branches, update tests
mpm@selenic.com
parents:
diff
changeset
|
17 |
12279 | 18 $ touch side1 |
19 $ hg add side1 | |
20 $ hg commit -m "Added side1" | |
21 created new head | |
22 $ touch side2 | |
23 $ hg add side2 | |
24 $ hg commit -m "Added side2" | |
1236
67a28636ea64
Fix bug with co -C across branches, update tests
mpm@selenic.com
parents:
diff
changeset
|
25 |
12279 | 26 $ hg log |
27 changeset: 3:91ebc10ed028 | |
28 tag: tip | |
29 user: test | |
30 date: Thu Jan 01 00:00:00 1970 +0000 | |
31 summary: Added side2 | |
32 | |
33 changeset: 2:b932d7dbb1e1 | |
34 parent: 0:c2eda428b523 | |
35 user: test | |
36 date: Thu Jan 01 00:00:00 1970 +0000 | |
37 summary: Added side1 | |
38 | |
39 changeset: 1:71a760306caf | |
40 user: test | |
41 date: Thu Jan 01 00:00:00 1970 +0000 | |
42 summary: Added main | |
43 | |
44 changeset: 0:c2eda428b523 | |
45 user: test | |
46 date: Thu Jan 01 00:00:00 1970 +0000 | |
47 summary: Added a | |
48 | |
1236
67a28636ea64
Fix bug with co -C across branches, update tests
mpm@selenic.com
parents:
diff
changeset
|
49 |
12279 | 50 $ hg heads |
51 changeset: 3:91ebc10ed028 | |
52 tag: tip | |
53 user: test | |
54 date: Thu Jan 01 00:00:00 1970 +0000 | |
55 summary: Added side2 | |
56 | |
57 changeset: 1:71a760306caf | |
58 user: test | |
59 date: Thu Jan 01 00:00:00 1970 +0000 | |
60 summary: Added main | |
61 | |
62 $ ls | |
63 a | |
64 side1 | |
65 side2 | |
1236
67a28636ea64
Fix bug with co -C across branches, update tests
mpm@selenic.com
parents:
diff
changeset
|
66 |
12279 | 67 $ hg update --debug -C 1 |
68 resolving manifests | |
18605
bcf29565d89f
manifestmerge: pass in branchmerge and force separately
Siddharth Agarwal <sid0@fb.com>
parents:
18360
diff
changeset
|
69 branchmerge: False, force: True, partial: False |
15625
efdcce3fd2d5
merge: make debug output easier to read
Martin Geisler <mg@aragost.com>
parents:
12279
diff
changeset
|
70 ancestor: 91ebc10ed028+, local: 91ebc10ed028+, remote: 71a760306caf |
18360
760c0d67ce5e
merge: process files in sorted order
Mads Kiilerich <mads@kiilerich.com>
parents:
15625
diff
changeset
|
71 side1: other deleted -> r |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
19095
diff
changeset
|
72 removing side1 |
12279 | 73 side2: other deleted -> r |
18631
e2dc5397bc82
tests: update test output (will be folded into parent)
Bryan O'Sullivan <bryano@fb.com>
parents:
18605
diff
changeset
|
74 removing side2 |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
19095
diff
changeset
|
75 main: remote created -> g |
18631
e2dc5397bc82
tests: update test output (will be folded into parent)
Bryan O'Sullivan <bryano@fb.com>
parents:
18605
diff
changeset
|
76 getting main |
12279 | 77 1 files updated, 0 files merged, 2 files removed, 0 files unresolved |
1236
67a28636ea64
Fix bug with co -C across branches, update tests
mpm@selenic.com
parents:
diff
changeset
|
78 |
12279 | 79 $ ls |
80 a | |
81 main | |
1236
67a28636ea64
Fix bug with co -C across branches, update tests
mpm@selenic.com
parents:
diff
changeset
|
82 |