annotate tests/test-diff-newlines.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 cf0f3cb8a332
children 405b6bd015df
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12143
bf840a3d1af2 tests: unify test-diff-newlines
Adrian Buehlmann <adrian@cadifra.com>
parents: 2248
diff changeset
1 $ hg init
bf840a3d1af2 tests: unify test-diff-newlines
Adrian Buehlmann <adrian@cadifra.com>
parents: 2248
diff changeset
2
15522
cf0f3cb8a332 tests: don't use stdout redirection for test data
Mads Kiilerich <mads@kiilerich.com>
parents: 12942
diff changeset
3 $ python -c 'file("a", "wb").write("confuse str.splitlines\nembedded\rnewline\n")'
12143
bf840a3d1af2 tests: unify test-diff-newlines
Adrian Buehlmann <adrian@cadifra.com>
parents: 2248
diff changeset
4 $ hg ci -Ama -d '1 0'
bf840a3d1af2 tests: unify test-diff-newlines
Adrian Buehlmann <adrian@cadifra.com>
parents: 2248
diff changeset
5 adding a
bf840a3d1af2 tests: unify test-diff-newlines
Adrian Buehlmann <adrian@cadifra.com>
parents: 2248
diff changeset
6
bf840a3d1af2 tests: unify test-diff-newlines
Adrian Buehlmann <adrian@cadifra.com>
parents: 2248
diff changeset
7 $ echo clean diff >> a
bf840a3d1af2 tests: unify test-diff-newlines
Adrian Buehlmann <adrian@cadifra.com>
parents: 2248
diff changeset
8 $ hg ci -mb -d '2 0'
2248
b914f0557832 fix diffs containing embedded "\r".
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff changeset
9
12143
bf840a3d1af2 tests: unify test-diff-newlines
Adrian Buehlmann <adrian@cadifra.com>
parents: 2248
diff changeset
10 $ hg diff -r0 -r1
bf840a3d1af2 tests: unify test-diff-newlines
Adrian Buehlmann <adrian@cadifra.com>
parents: 2248
diff changeset
11 diff -r 107ba6f817b5 -r 310ce7989cdc a
bf840a3d1af2 tests: unify test-diff-newlines
Adrian Buehlmann <adrian@cadifra.com>
parents: 2248
diff changeset
12 --- a/a Thu Jan 01 00:00:01 1970 +0000
bf840a3d1af2 tests: unify test-diff-newlines
Adrian Buehlmann <adrian@cadifra.com>
parents: 2248
diff changeset
13 +++ b/a Thu Jan 01 00:00:02 1970 +0000
bf840a3d1af2 tests: unify test-diff-newlines
Adrian Buehlmann <adrian@cadifra.com>
parents: 2248
diff changeset
14 @@ -1,2 +1,3 @@
bf840a3d1af2 tests: unify test-diff-newlines
Adrian Buehlmann <adrian@cadifra.com>
parents: 2248
diff changeset
15 confuse str.splitlines
12942
05fffd665170 tests: use (esc) for all non-ASCII test output
Mads Kiilerich <mads@kiilerich.com>
parents: 12143
diff changeset
16 embedded\rnewline (esc)
12143
bf840a3d1af2 tests: unify test-diff-newlines
Adrian Buehlmann <adrian@cadifra.com>
parents: 2248
diff changeset
17 +clean diff
bf840a3d1af2 tests: unify test-diff-newlines
Adrian Buehlmann <adrian@cadifra.com>
parents: 2248
diff changeset
18