]>
Commit | Line | Data |
---|---|---|
c1beba5b JH |
1 | #!/bin/sh |
2 | ||
3 | test_description='applying patch that has broken whitespaces in context' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
7 | test_expect_success setup ' | |
8 | ||
9 | >file && | |
10 | git add file && | |
11 | ||
12 | # file-0 is full of whitespace breakages | |
13 | for l in a bb c d eeee f ggg h | |
14 | do | |
15 | echo "$l " | |
16 | done >file-0 && | |
17 | ||
18 | # patch-0 creates a whitespace broken file | |
19 | cat file-0 >file && | |
20 | git diff >patch-0 && | |
21 | git add file && | |
22 | ||
23 | # file-1 is still full of whitespace breakages, | |
24 | # but has one line updated, without fixing any | |
25 | # whitespaces. | |
26 | # patch-1 records that change. | |
27 | sed -e "s/d/D/" file-0 >file-1 && | |
28 | cat file-1 >file && | |
29 | git diff >patch-1 && | |
30 | ||
31 | # patch-all is the effect of both patch-0 and patch-1 | |
32 | >file && | |
33 | git add file && | |
34 | cat file-1 >file && | |
35 | git diff >patch-all && | |
36 | ||
37 | # patch-2 is the same as patch-1 but is based | |
38 | # on a version that already has whitespace fixed, | |
39 | # and does not introduce whitespace breakages. | |
9524cf29 | 40 | sed -e "s/ \$//" patch-1 >patch-2 && |
c1beba5b JH |
41 | |
42 | # If all whitespace breakages are fixed the contents | |
43 | # should look like file-fixed | |
9524cf29 | 44 | sed -e "s/ \$//" file-1 >file-fixed |
c1beba5b JH |
45 | |
46 | ' | |
47 | ||
48 | test_expect_success nofix ' | |
49 | ||
50 | >file && | |
51 | git add file && | |
52 | ||
53 | # Baseline. Applying without fixing any whitespace | |
54 | # breakages. | |
55 | git apply --whitespace=nowarn patch-0 && | |
56 | git apply --whitespace=nowarn patch-1 && | |
57 | ||
58 | # The result should obviously match. | |
82ebb0b6 | 59 | test_cmp file-1 file |
c1beba5b JH |
60 | ' |
61 | ||
62 | test_expect_success 'withfix (forward)' ' | |
63 | ||
64 | >file && | |
65 | git add file && | |
66 | ||
67 | # The first application will munge the context lines | |
68 | # the second patch depends on. We should be able to | |
69 | # adjust and still apply. | |
70 | git apply --whitespace=fix patch-0 && | |
71 | git apply --whitespace=fix patch-1 && | |
72 | ||
82ebb0b6 | 73 | test_cmp file-fixed file |
c1beba5b JH |
74 | ' |
75 | ||
76 | test_expect_success 'withfix (backward)' ' | |
77 | ||
78 | >file && | |
79 | git add file && | |
80 | ||
81 | # Now we have a whitespace breakages on our side. | |
82 | git apply --whitespace=nowarn patch-0 && | |
83 | ||
84 | # And somebody sends in a patch based on image | |
85 | # with whitespace already fixed. | |
86 | git apply --whitespace=fix patch-2 && | |
87 | ||
88 | # The result should accept the whitespace fixed | |
89 | # postimage. But the line with "h" is beyond context | |
90 | # horizon and left unfixed. | |
91 | ||
92 | sed -e /h/d file-fixed >fixed-head && | |
93 | sed -e /h/d file >file-head && | |
82ebb0b6 | 94 | test_cmp fixed-head file-head && |
c1beba5b JH |
95 | |
96 | sed -n -e /h/p file-fixed >fixed-tail && | |
97 | sed -n -e /h/p file >file-tail && | |
98 | ||
82ebb0b6 | 99 | ! test_cmp fixed-tail file-tail |
c1beba5b JH |
100 | |
101 | ' | |
102 | ||
103 | test_done |