annotate tests/test-patch.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 0705f2ac79d6
children 75be14993fda
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11784
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
1 $ cat > patchtool.py <<EOF
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
2 > import sys
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
3 > print 'Using custom patch'
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
4 > if '--binary' in sys.argv:
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
5 > print '--binary found !'
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
6 > EOF
4645
0de7e6e27fe4 Add tests for ui.patch regression.
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
7
11784
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
8 $ echo "[ui]" >> $HGRCPATH
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
9 $ echo "patch=python ../patchtool.py" >> $HGRCPATH
4645
0de7e6e27fe4 Add tests for ui.patch regression.
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
10
11784
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
11 $ hg init a
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
12 $ cd a
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
13 $ echo a > a
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
14 $ hg commit -Ama -d '1 0'
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
15 adding a
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
16 $ echo b >> a
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
17 $ hg commit -Amb -d '2 0'
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
18 $ cd ..
4645
0de7e6e27fe4 Add tests for ui.patch regression.
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
19
11815
20a88cf7ee92 test-patch.t: typos
Christian Ebert <blacktrash@gmx.net>
parents: 11784
diff changeset
20 This test checks that:
20a88cf7ee92 test-patch.t: typos
Christian Ebert <blacktrash@gmx.net>
parents: 11784
diff changeset
21 - custom patch commands with arguments actually work
11784
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
22 - patch code does not try to add weird arguments like
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
23 --binary when custom patch commands are used. For instance
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
24 --binary is added by default under win32.
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
25
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
26 check custom patch options are honored
4645
0de7e6e27fe4 Add tests for ui.patch regression.
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
27
11784
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
28 $ hg --cwd a export -o ../a.diff tip
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
29 $ hg clone -r 0 a b
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
30 adding changesets
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
31 adding manifests
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
32 adding file changes
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
33 added 1 changesets with 1 changes to 1 files
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
34 updating to branch default
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
35 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
4645
0de7e6e27fe4 Add tests for ui.patch regression.
Patrick Mezard <pmezard@gmail.com>
parents:
diff changeset
36
11784
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
37 $ hg --cwd b import -v ../a.diff
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
38 applying ../a.diff
8a1943685dfb tests: unify test-patch
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 4645
diff changeset
39 Using custom patch
15194
0705f2ac79d6 import: simplify status reporting logic (and make it more I18N-friendly)
Greg Ward <greg@gerg.ca>
parents: 14832
diff changeset
40 applied to working directory
12645
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
41
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
42 Issue2417: hg import with # comments in description
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
43
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
44 Prepare source repo and patch:
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
45
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
46 $ rm $HGRCPATH
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
47 $ hg init c
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
48 $ cd c
14832
d60e4f227d75 patch: fix parsing patch files containing CRs not followed by LFs
Wagner Bruna <wbruna@softwareexpress.com.br>
parents: 12847
diff changeset
49 $ printf "a\rc" > a
12645
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
50 $ hg ci -A -m 0 a -d '0 0'
14832
d60e4f227d75 patch: fix parsing patch files containing CRs not followed by LFs
Wagner Bruna <wbruna@softwareexpress.com.br>
parents: 12847
diff changeset
51 $ printf "a\rb\rc" > a
12645
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
52 $ cat << eof > log
12728
80a3d1121c10 import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 12645
diff changeset
53 > first line which can't start with '# '
80a3d1121c10 import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 12645
diff changeset
54 > # second line is a comment but that shouldn't be a problem.
80a3d1121c10 import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 12645
diff changeset
55 > A patch marker like this was more problematic even after d7452292f9d3:
80a3d1121c10 import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 12645
diff changeset
56 > # HG changeset patch
80a3d1121c10 import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 12645
diff changeset
57 > # User lines looks like this - but it _is_ just a comment
12645
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
58 > eof
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
59 $ hg ci -l log -d '0 0'
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
60 $ hg export -o p 1
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
61 $ cd ..
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
62
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
63 Clone and apply patch:
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
64
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
65 $ hg clone -r 0 c d
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
66 adding changesets
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
67 adding manifests
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
68 adding file changes
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
69 added 1 changesets with 1 changes to 1 files
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
70 updating to branch default
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
71 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
72 $ cd d
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
73 $ hg import ../c/p
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
74 applying ../c/p
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
75 $ hg log -v -r 1
14832
d60e4f227d75 patch: fix parsing patch files containing CRs not followed by LFs
Wagner Bruna <wbruna@softwareexpress.com.br>
parents: 12847
diff changeset
76 changeset: 1:cd0bde79c428
12645
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
77 tag: tip
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
78 user: test
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
79 date: Thu Jan 01 00:00:00 1970 +0000
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
80 files: a
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
81 description:
12728
80a3d1121c10 import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 12645
diff changeset
82 first line which can't start with '# '
80a3d1121c10 import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 12645
diff changeset
83 # second line is a comment but that shouldn't be a problem.
80a3d1121c10 import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 12645
diff changeset
84 A patch marker like this was more problematic even after d7452292f9d3:
80a3d1121c10 import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 12645
diff changeset
85 # HG changeset patch
80a3d1121c10 import: only the first hg patch marker should be processed (issue2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 12645
diff changeset
86 # User lines looks like this - but it _is_ just a comment
12645
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
87
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
88
d7452292f9d3 import: don't strip '#' lines from patch descriptions (issue 2417)
Mads Kiilerich <mads@kiilerich.com>
parents: 11815
diff changeset
89 $ cd ..