Raw
1 #!/bin/sh
2 #
3 # Copyright (c) 2005 Junio C Hamano
4 #
5
6 test_description='git apply --stat --summary test, with --recount
7
8 '
9
10 . ./test-lib.sh
11
12 UNC='s/^\(@@ -[1-9][0-9]*\),[0-9]* \(+[1-9][0-9]*\),[0-9]* @@/\1,999 \2,999 @@/'
13
14 num=0
15 while read title
16 do
17 num=$(( $num + 1 ))
18 test_expect_success "$title" '
19 git apply --stat --summary \
20 <"$TEST_DIRECTORY/t4100/t-apply-$num.patch" >current &&
21 test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
22 '
23
24 test_expect_success "$title with recount" '
25 sed -e "$UNC" <"$TEST_DIRECTORY/t4100/t-apply-$num.patch" |
26 git apply --recount --stat --summary >current &&
27 test_cmp "$TEST_DIRECTORY"/t4100/t-apply-$num.expect current
28 '
29 done <<\EOF
30 rename
31 copy
32 rewrite
33 mode
34 non git (1)
35 non git (2)
36 non git (3)
37 incomplete (1)
38 incomplete (2)
39 EOF
40
41 test_expect_success 'applying a hunk header which overflows fails' '
42 cat >patch <<-\EOF &&
43 diff -u a/file b/file
44 --- a/file
45 +++ b/file
46 @@ -98765432109876543210 +98765432109876543210 @@
47 -a
48 +b
49 EOF
50 test_must_fail git apply patch 2>err &&
51 echo "error: corrupt patch at patch:4" >expect &&
52 test_cmp expect err
53 '
54
55 test_expect_success 'applying a hunk header which overflows from stdin fails' '
56 cat >patch <<-\EOF &&
57 diff -u a/file b/file
58 --- a/file
59 +++ b/file
60 @@ -98765432109876543210 +98765432109876543210 @@
61 -a
62 +b
63 EOF
64 test_must_fail git apply <patch 2>err &&
65 echo "error: corrupt patch at <stdin>:4" >expect &&
66 test_cmp expect err
67 '
68
69 test_expect_success 'applying multiple patches reports the corrupted input' '
70 cat >good.patch <<-\EOF &&
71 diff -u a/file b/file
72 --- a/file
73 +++ b/file
74 @@ -1 +1 @@
75 -a
76 +b
77 EOF
78 cat >bad.patch <<-\EOF &&
79 diff -u a/file b/file
80 --- a/file
81 +++ b/file
82 @@ -98765432109876543210 +98765432109876543210 @@
83 -a
84 +b
85 EOF
86 test_must_fail git apply --stat --summary good.patch bad.patch 2>err &&
87 echo "error: corrupt patch at bad.patch:4" >expect &&
88 test_cmp expect err
89 '
90
91 test_expect_success 'applying a patch without a header reports the input' '
92 cat >fragment.patch <<-\EOF &&
93 @@ -1 +1 @@
94 -a
95 +b
96 EOF
97 test_must_fail git apply fragment.patch 2>err &&
98 echo "error: patch fragment without header at fragment.patch:1: @@ -1 +1 @@" >expect &&
99 test_cmp expect err
100 '
101
102 test_expect_success 'applying a patch with a missing filename reports the input' '
103 cat >missing.patch <<-\EOF &&
104 diff --git a/f b/f
105 index 7898192..6178079 100644
106 --- a/f
107 @@ -1 +1 @@
108 -a
109 +b
110 EOF
111 test_must_fail git apply missing.patch 2>err &&
112 echo "error: git diff header lacks filename information at missing.patch:4" >expect &&
113 test_cmp expect err
114 '
115
116 test_expect_success 'empty default filename reports the input' '
117 cat >empty-name.patch <<-\EOF &&
118 diff --git "a/""b/"
119
120 --- /dev/null
121 +++ "
122 @@ -0,0 +1 @@
123 +
124 EOF
125 test_must_fail git apply empty-name.patch 2>err &&
126 test_grep "git diff header lacks filename information" err
127 '
128
129 test_expect_success 'abandoned git header does not reuse names' '
130 cat >abandoned-git-header.patch <<-\EOF &&
131 diff --git a/foo b/foo
132
133 --- /dev/null
134 +++ b/foo
135 @@ -0,0 +1 @@
136 +x
137 EOF
138 git apply --check abandoned-git-header.patch
139 '
140
141 test_expect_success 'applying a patch with an invalid mode reports the input' '
142 cat >mode.patch <<-\EOF &&
143 diff --git a/f b/f
144 old mode 10x644
145 EOF
146 test_must_fail git apply mode.patch 2>err &&
147 cat >expect <<-\EOF &&
148 error: invalid mode at mode.patch:2: 10x644
149
150 EOF
151 test_cmp expect err
152 '
153
154 test_expect_success 'applying a patch with only garbage reports the input' '
155 cat >garbage.patch <<-\EOF &&
156 diff --git a/f b/f
157 --- a/f
158 +++ b/f
159 this is garbage
160 EOF
161 test_must_fail git apply garbage.patch 2>err &&
162 echo "error: patch with only garbage at garbage.patch:4" >expect &&
163 test_cmp expect err
164 '
165 test_done