]>
Commit | Line | Data |
---|---|---|
c74c7203 JN |
1 | # Helpers shared by the test scripts for diff algorithms (patience, |
2 | # histogram, etc). | |
46c8f298 TRC |
3 | |
4 | test_diff_frobnitz() { | |
5 | cat >file1 <<\EOF | |
6 | #include <stdio.h> | |
7 | ||
8 | // Frobs foo heartily | |
9 | int frobnitz(int foo) | |
10 | { | |
11 | int i; | |
12 | for(i = 0; i < 10; i++) | |
13 | { | |
14 | printf("Your answer is: "); | |
15 | printf("%d\n", foo); | |
16 | } | |
17 | } | |
18 | ||
19 | int fact(int n) | |
20 | { | |
21 | if(n > 1) | |
22 | { | |
23 | return fact(n-1) * n; | |
24 | } | |
25 | return 1; | |
26 | } | |
27 | ||
28 | int main(int argc, char **argv) | |
29 | { | |
30 | frobnitz(fact(10)); | |
31 | } | |
32 | EOF | |
33 | ||
34 | cat >file2 <<\EOF | |
35 | #include <stdio.h> | |
36 | ||
37 | int fib(int n) | |
38 | { | |
39 | if(n > 2) | |
40 | { | |
41 | return fib(n-1) + fib(n-2); | |
42 | } | |
43 | return 1; | |
44 | } | |
45 | ||
46 | // Frobs foo heartily | |
47 | int frobnitz(int foo) | |
48 | { | |
49 | int i; | |
50 | for(i = 0; i < 10; i++) | |
51 | { | |
52 | printf("%d\n", foo); | |
53 | } | |
54 | } | |
55 | ||
56 | int main(int argc, char **argv) | |
57 | { | |
58 | frobnitz(fib(10)); | |
59 | } | |
60 | EOF | |
61 | ||
d29d5001 | 62 | file1=$(git rev-parse --short $(git hash-object file1)) |
63 | file2=$(git rev-parse --short $(git hash-object file2)) | |
64 | cat >expect <<EOF | |
46c8f298 | 65 | diff --git a/file1 b/file2 |
d29d5001 | 66 | index $file1..$file2 100644 |
46c8f298 TRC |
67 | --- a/file1 |
68 | +++ b/file2 | |
69 | @@ -1,26 +1,25 @@ | |
70 | #include <stdio.h> | |
71 | ||
72 | +int fib(int n) | |
73 | +{ | |
74 | + if(n > 2) | |
75 | + { | |
76 | + return fib(n-1) + fib(n-2); | |
77 | + } | |
78 | + return 1; | |
79 | +} | |
80 | + | |
81 | // Frobs foo heartily | |
82 | int frobnitz(int foo) | |
83 | { | |
84 | int i; | |
85 | for(i = 0; i < 10; i++) | |
86 | { | |
87 | - printf("Your answer is: "); | |
88 | printf("%d\n", foo); | |
89 | } | |
90 | } | |
91 | ||
92 | -int fact(int n) | |
93 | -{ | |
94 | - if(n > 1) | |
95 | - { | |
96 | - return fact(n-1) * n; | |
97 | - } | |
98 | - return 1; | |
99 | -} | |
100 | - | |
101 | int main(int argc, char **argv) | |
102 | { | |
103 | - frobnitz(fact(10)); | |
104 | + frobnitz(fib(10)); | |
105 | } | |
106 | EOF | |
107 | ||
a4cf900e JC |
108 | cat >expect_diffstat <<EOF |
109 | file1 => file2 | 21 ++++++++++----------- | |
110 | 1 file changed, 10 insertions(+), 11 deletions(-) | |
111 | EOF | |
112 | ||
46c8f298 TRC |
113 | STRATEGY=$1 |
114 | ||
44451a2e JC |
115 | test_expect_success "setup attributes files for tests with $STRATEGY" ' |
116 | git checkout -b master && | |
a4cf900e | 117 | echo "file* diff=driver" >.gitattributes && |
44451a2e JC |
118 | git add file1 file2 .gitattributes && |
119 | git commit -m "adding files" && | |
120 | git checkout -b branchA && | |
121 | echo "file* diff=driverA" >.gitattributes && | |
122 | git add .gitattributes && | |
123 | git commit -m "adding driverA as diff driver" && | |
124 | git checkout master && | |
125 | git clone --bare --no-local . bare.git | |
126 | ' | |
127 | ||
128 | test_expect_success "$STRATEGY diff from attributes" ' | |
129 | test_must_fail git -c diff.driver.algorithm=$STRATEGY diff --no-index file1 file2 > output && | |
a4cf900e JC |
130 | test_cmp expect output |
131 | ' | |
132 | ||
44451a2e JC |
133 | test_expect_success "diff from attributes with bare repo with source" ' |
134 | git -C bare.git --attr-source=branchA -c diff.driver.algorithm=myers \ | |
135 | -c diff.driverA.algorithm=$STRATEGY \ | |
136 | diff HEAD:file1 HEAD:file2 >output && | |
137 | test_cmp expect output | |
138 | ' | |
139 | ||
140 | test_expect_success "diff from attributes with bare repo with invalid source" ' | |
141 | test_must_fail git -C bare.git --attr-source=invalid-branch diff \ | |
142 | HEAD:file1 HEAD:file2 | |
143 | ' | |
144 | ||
a4cf900e JC |
145 | test_expect_success "$STRATEGY diff from attributes has valid diffstat" ' |
146 | echo "file* diff=driver" >.gitattributes && | |
147 | git config diff.driver.algorithm "$STRATEGY" && | |
148 | test_must_fail git diff --stat --no-index file1 file2 > output && | |
149 | test_cmp expect_diffstat output | |
150 | ' | |
151 | ||
46c8f298 | 152 | test_expect_success "$STRATEGY diff" ' |
a4cf900e JC |
153 | test_must_fail git diff --no-index "--diff-algorithm=$STRATEGY" file1 file2 > output && |
154 | test_cmp expect output | |
155 | ' | |
156 | ||
157 | test_expect_success "$STRATEGY diff command line precedence before attributes" ' | |
158 | echo "file* diff=driver" >.gitattributes && | |
159 | git config diff.driver.algorithm myers && | |
160 | test_must_fail git diff --no-index "--diff-algorithm=$STRATEGY" file1 file2 > output && | |
161 | test_cmp expect output | |
162 | ' | |
163 | ||
164 | test_expect_success "$STRATEGY diff attributes precedence before config" ' | |
165 | git config diff.algorithm default && | |
166 | echo "file* diff=driver" >.gitattributes && | |
167 | git config diff.driver.algorithm "$STRATEGY" && | |
168 | test_must_fail git diff --no-index file1 file2 > output && | |
46c8f298 TRC |
169 | test_cmp expect output |
170 | ' | |
171 | ||
172 | test_expect_success "$STRATEGY diff output is valid" ' | |
173 | mv file2 expect && | |
174 | git apply < output && | |
175 | test_cmp expect file2 | |
176 | ' | |
177 | } | |
178 | ||
179 | test_diff_unique() { | |
180 | cat >uniq1 <<\EOF | |
181 | 1 | |
182 | 2 | |
183 | 3 | |
184 | 4 | |
185 | 5 | |
186 | 6 | |
187 | EOF | |
188 | ||
189 | cat >uniq2 <<\EOF | |
190 | a | |
191 | b | |
192 | c | |
193 | d | |
194 | e | |
195 | f | |
196 | EOF | |
197 | ||
d29d5001 | 198 | uniq1=$(git rev-parse --short $(git hash-object uniq1)) |
199 | uniq2=$(git rev-parse --short $(git hash-object uniq2)) | |
200 | cat >expect <<EOF | |
46c8f298 | 201 | diff --git a/uniq1 b/uniq2 |
d29d5001 | 202 | index $uniq1..$uniq2 100644 |
46c8f298 TRC |
203 | --- a/uniq1 |
204 | +++ b/uniq2 | |
205 | @@ -1,6 +1,6 @@ | |
206 | -1 | |
207 | -2 | |
208 | -3 | |
209 | -4 | |
210 | -5 | |
211 | -6 | |
212 | +a | |
213 | +b | |
214 | +c | |
215 | +d | |
216 | +e | |
217 | +f | |
218 | EOF | |
219 | ||
220 | STRATEGY=$1 | |
221 | ||
222 | test_expect_success 'completely different files' ' | |
223 | test_must_fail git diff --no-index "--$STRATEGY" uniq1 uniq2 > output && | |
224 | test_cmp expect output | |
225 | ' | |
226 | } | |
227 |