comparison tests/test-patch-offset @ 10135:9a4034b630c4 stable

patch: better handling of sequence of offset patch hunks (issue1941) The built-in patch implementation applied the hunks to the wrong lines of the file if the file in the repo has been modified to skew the patch line numbers and the file contains repetitive sequences of lines.
author Greg Onufer <gonufer@jazzhaiku.com>
date Wed, 09 Dec 2009 16:56:00 -0800
parents
children 0d8577e1f56b
comparison
equal deleted inserted replaced
10132:ebf69364e80f 10135:9a4034b630c4
1 #!/bin/sh
2
3 cat > writepatterns.py <<EOF
4 import sys
5
6 path = sys.argv[1]
7 patterns = sys.argv[2:]
8
9 fp = file(path, 'wb')
10 for pattern in patterns:
11 count = int(pattern[0:-1])
12 char = pattern[-1] + '\n'
13 fp.write(char*count)
14 fp.close()
15 EOF
16
17 echo % prepare repo
18 hg init a
19 cd a
20
21 # These initial lines of Xs were not in the original file used to generate
22 # the patch. So all the patch hunks need to be applied to a constant offset
23 # within this file. If the offset isn't tracked then the hunks can be
24 # applied to the wrong lines of this file.
25 python ../writepatterns.py a 34X 10A 1B 10A 1C 10A 1B 10A 1D 10A 1B 10A 1E 10A 1B 10A
26 hg commit -Am adda
27
28 # This is a cleaner patch generated via diff
29 # In this case it reproduces the problem when
30 # the output of hg export does not
31 echo % import patch
32 hg import -v -m 'b' -d '2 0' - <<EOF
33 --- a/a 2009-12-08 19:26:17.000000000 -0800
34 +++ b/a 2009-12-08 19:26:17.000000000 -0800
35 @@ -9,7 +9,7 @@
36 A
37 A
38 B
39 -A
40 +a
41 A
42 A
43 A
44 @@ -53,7 +53,7 @@
45 A
46 A
47 B
48 -A
49 +a
50 A
51 A
52 A
53 @@ -75,7 +75,7 @@
54 A
55 A
56 B
57 -A
58 +a
59 A
60 A
61 A
62 EOF
63
64 echo % compare imported changes against reference file
65 python ../writepatterns.py aref 34X 10A 1B 1a 9A 1C 10A 1B 10A 1D 10A 1B 1a 9A 1E 10A 1B 1a 9A
66 diff -u aref a
67