Mercurial > hg
annotate tests/test-issue1438.t @ 16506:fc4e0fecf403 stable
patch: fix patch hunk/metdata synchronization (issue3384)
Git patches are parsed in two phases: 1) extract metadata, 2) parse actual
deltas and merge them with the previous metadata. We do this to avoid
dependency issues like "modify a; copy a to b", where "b" must be copied from
the unmodified "a".
Issue3384 is caused by flaky code I wrote to synchronize the patch metadata
with the emitted hunk:
if (gitpatches and
(gitpatches[-1][0] == afile or gitpatches[-1][1] == bfile)):
gp = gitpatches.pop()[2]
With a patch like:
diff --git a/a b/c
copy from a
copy to c
--- a/a
+++ b/c
@@ -1,1 +1,2 @@
a
+a
@@ -2,1 +2,2 @@
a
+a
diff --git a/a b/a
--- a/a
+++ b/a
@@ -1,1 +1,2 @@
a
+b
the first hunk of the first block is matched with the metadata for the block
"diff --git a/a b/c", then the second hunk of the first block is matched with
the metadata of the second block "diff --git a/a b/a", because of the "or" in
the code paste above. Turning the "or" into an "and" is not enough as we have
to deal with /dev/null cases for each file.
We I remove this broken piece of code:
# copy/rename + modify should modify target, not source
if gp.op in ('COPY', 'DELETE', 'RENAME', 'ADD') or gp.mode:
afile = bfile
because "afile = bfile" set "afile" to stuff like "b/file" instead of "a/file",
and because this only happens for git patches, which afile/bfile are ignored
anyway by applydiff().
v2:
- Avoid a traceback on git metadata desynchronization
author | Patrick Mezard <patrick@mezard.eu> |
---|---|
date | Sat, 21 Apr 2012 21:40:25 +0200 |
parents | b63f6422d2a7 |
children | 7a9cbb315d84 |
rev | line source |
---|---|
12328
b63f6422d2a7
tests: fix a bunch of pointless #s in unified tests
Matt Mackall <mpm@selenic.com>
parents:
12204
diff
changeset
|
1 http://mercurial.selenic.com/bts/issue1438 |
7783
2c5b2abfb8be
patch: teach selectfile about symlinks (issue1438)
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
2 |
12204
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
3 $ "$TESTDIR/hghave" symlink || exit 80 |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
4 |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
5 $ hg init |
7783
2c5b2abfb8be
patch: teach selectfile about symlinks (issue1438)
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
6 |
12204
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
7 $ ln -s foo link |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
8 $ hg add link |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
9 $ hg ci -mbad link |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
10 $ hg rm link |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
11 $ hg ci -mok |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
12 $ hg diff -g -r 0:1 > bad.patch |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
13 |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
14 $ hg up 0 |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
15 1 files updated, 0 files merged, 0 files removed, 0 files unresolved |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
16 |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
17 $ hg import --no-commit bad.patch |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
18 applying bad.patch |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
19 |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
20 $ hg status |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
21 R link |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
22 ? bad.patch |
c55d69c5fb77
tests: unify test-issue1438 and test-issue2137
Adrian Buehlmann <adrian@cadifra.com>
parents:
7783
diff
changeset
|
23 |