Mercurial > hg
annotate tests/test-merge-symlinks.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 | f2719b387380 |
children | b6776b34e44e |
rev | line source |
---|---|
12459
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
1 $ cat > echo.py <<EOF |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
2 > #!/usr/bin/env python |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
3 > import os, sys |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
4 > try: |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
5 > import msvcrt |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
6 > msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
7 > msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY) |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
8 > except ImportError: |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
9 > pass |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
10 > |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
11 > for k in ('HG_FILE', 'HG_MY_ISLINK', 'HG_OTHER_ISLINK', 'HG_BASE_ISLINK'): |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
12 > print k, os.environ[k] |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
13 > EOF |
7080
a6477aa893b8
tests: Windows compatibility fixes
Patrick Mezard <pmezard@gmail.com>
parents:
5408
diff
changeset
|
14 |
12459
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
15 Create 2 heads containing the same file, once as |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
16 a file, once as a link. Bundle was generated with: |
5391
786c1206a029
Test *_ISLINK merge environment vars
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
17 |
5408
36794dbe66a3
Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents:
5391
diff
changeset
|
18 # hg init t |
36794dbe66a3
Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents:
5391
diff
changeset
|
19 # cd t |
36794dbe66a3
Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents:
5391
diff
changeset
|
20 # echo a > a |
36794dbe66a3
Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents:
5391
diff
changeset
|
21 # hg ci -qAm t0 -d '0 0' |
36794dbe66a3
Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents:
5391
diff
changeset
|
22 # echo l > l |
36794dbe66a3
Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents:
5391
diff
changeset
|
23 # hg ci -qAm t1 -d '1 0' |
36794dbe66a3
Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents:
5391
diff
changeset
|
24 # hg up -C 0 |
36794dbe66a3
Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents:
5391
diff
changeset
|
25 # ln -s a l |
36794dbe66a3
Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents:
5391
diff
changeset
|
26 # hg ci -qAm t2 -d '2 0' |
36794dbe66a3
Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents:
5391
diff
changeset
|
27 # echo l2 > l2 |
36794dbe66a3
Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents:
5391
diff
changeset
|
28 # hg ci -qAm t3 -d '3 0' |
36794dbe66a3
Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents:
5391
diff
changeset
|
29 |
12459
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
30 $ hg init t |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
31 $ cd t |
14116
cd3032437064
tests: move test bundles in a bundles/ subdirectory
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
13439
diff
changeset
|
32 $ hg -q pull "$TESTDIR/bundles/test-merge-symlinks.hg" |
12459
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
33 $ hg up -C 3 |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
34 3 files updated, 0 files merged, 0 files removed, 0 files unresolved |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
35 |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
36 Merge them and display *_ISLINK vars |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
37 merge heads |
5391
786c1206a029
Test *_ISLINK merge environment vars
Patrick Mezard <pmezard@gmail.com>
parents:
diff
changeset
|
38 |
12788
de793925862e
merge: implement --tool arguments using new ui.forcemerge configurable
Steve Borho <steve@borho.org>
parents:
12459
diff
changeset
|
39 $ hg merge --tool="python ../echo.py" |
13439
d724a69309e0
util: flush stdout before calling external processes
Mads Kiilerich <mads@kiilerich.com>
parents:
12788
diff
changeset
|
40 merging l |
12459
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
41 HG_FILE l |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
42 HG_MY_ISLINK 1 |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
43 HG_OTHER_ISLINK 0 |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
44 HG_BASE_ISLINK 0 |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
45 0 files updated, 1 files merged, 0 files removed, 0 files unresolved |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
46 (branch merge, don't forget to commit) |
5408
36794dbe66a3
Test workingctx exec/link bit for copies.
Patrick Mezard <pmezard@gmail.com>
parents:
5391
diff
changeset
|
47 |
12459
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
48 Test working directory symlink bit calculation wrt copies, |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
49 especially on non-supporting systems. |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
50 merge working directory |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
51 |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
52 $ hg up -C 2 |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
53 1 files updated, 0 files merged, 1 files removed, 0 files unresolved |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
54 $ hg copy l l2 |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
55 $ HGMERGE="python ../echo.py" hg up 3 |
13439
d724a69309e0
util: flush stdout before calling external processes
Mads Kiilerich <mads@kiilerich.com>
parents:
12788
diff
changeset
|
56 merging l2 |
12459
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
57 HG_FILE l2 |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
58 HG_MY_ISLINK 1 |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
59 HG_OTHER_ISLINK 0 |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
60 HG_BASE_ISLINK 0 |
15f07e8e4742
tests: unify test-merge-symlinks
Matt Mackall <mpm@selenic.com>
parents:
7080
diff
changeset
|
61 0 files updated, 1 files merged, 0 files removed, 0 files unresolved |
16913
f2719b387380
tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents:
16907
diff
changeset
|
62 |
f2719b387380
tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents:
16907
diff
changeset
|
63 $ cd .. |