Merge branch 'scintilla-357'
[TortoiseGit.git] / ext / libgit2-0005-Make-CRLF-filter-behave-like-vanilla-git-for-adding-.patch
blobae6523911447cbca7dea86bbf0248b1718774ad3
1 From 9a8ca15dab6420866d69e3da1c280191a9efce4c Mon Sep 17 00:00:00 2001
2 From: Sven Strickroth <email@cs-ware.de>
3 Date: Sun, 1 Feb 2015 13:39:31 +0100
4 Subject: [PATCH 5/6] Make CRLF filter behave like vanilla git for adding files
5 in combination with attributes
7 Based on lots of manual testing (even with "malformed" files and binary) with vanilla git executable...
9 Signed-off-by: Sven Strickroth <email@cs-ware.de>
10 ---
11 CHANGELOG.md | 5 +
12 src/crlf.c | 58 +--
13 tests/filter/crlf.h | 12 +
14 tests/index/crlf.c | 1200 ++++++++++++++++++++++++++++++++++++++++++++++++++-
15 4 files changed, 1242 insertions(+), 33 deletions(-)
17 diff --git a/CHANGELOG.md b/CHANGELOG.md
18 index 412839a..881dca4 100644
19 --- a/CHANGELOG.md
20 +++ b/CHANGELOG.md
21 @@ -11,6 +11,11 @@ v0.22 + 1
22 * files containig CRLF in combination with core.autocrlf=input were accepted
23 * adding files containing CR and CRLF but not the same number failed
25 +* LF -> CRLF filter now handles files on adding to index the way vanilla git does
26 + * skip files marked as "binary" (-crlf)
27 + * especially files containing single CR chars are added as is now
28 + * honor "text" attribute for forcing a file being interpreted as text
30 * Rename and copy detection is enabled for small files.
32 * Checkout can now handle an initial checkout of a repository, making
33 diff --git a/src/crlf.c b/src/crlf.c
34 index cf75086..eef8b5f 100644
35 --- a/src/crlf.c
36 +++ b/src/crlf.c
37 @@ -124,18 +124,21 @@ static int crlf_apply_to_odb(
38 const git_buf *from,
39 const git_filter_source *src)
41 + git_buf_text_stats stats;
42 + bool is_binary;
44 /* Empty file? Nothing to do */
45 if (!git_buf_len(from))
46 return 0;
48 + is_binary = git_buf_text_gather_stats(&stats, from, false);
50 /* Heuristics to see if we can skip the conversion.
51 * Straight from Core Git.
53 if (ca->crlf_action == GIT_CRLF_AUTO || ca->crlf_action == GIT_CRLF_GUESS) {
54 - git_buf_text_stats stats;
56 - /* Check heuristics for binary vs text - returns true if binary */
57 - if (git_buf_text_gather_stats(&stats, from, false))
58 + /* Check heuristics for binary vs text */
59 + if (is_binary)
60 return GIT_PASSTHROUGH;
63 @@ -146,16 +149,26 @@ static int crlf_apply_to_odb(
64 if (stats.cr != stats.crlf)
65 return GIT_PASSTHROUGH;
67 - /* If there are no CR characters to filter out and CrLf is not set to "true", then just pass */
68 - if (!stats.cr && ca->auto_crlf != GIT_AUTO_CRLF_TRUE)
69 - return GIT_PASSTHROUGH;
70 + if (ca->crlf_action == GIT_CRLF_GUESS) {
71 + /*
72 + * If the file in the index has any CR in it, do not convert.
73 + * This is the new safer autocrlf handling.
74 + */
75 + if (has_cr_in_index(src))
76 + return GIT_PASSTHROUGH;
77 + }
78 + }
80 - /* If safecrlf is enabled, sanity-check the result. */
81 - if (stats.lf != stats.crlf) {
82 + /* If safecrlf is enabled, sanity-check the result. */
83 + if (ca->crlf_action == GIT_CRLF_INPUT ||
84 + (ca->auto_crlf == GIT_AUTO_CRLF_INPUT &&
85 + (ca->crlf_action == GIT_CRLF_GUESS || ca->crlf_action == GIT_CRLF_AUTO ||
86 + (ca->crlf_action == GIT_CRLF_TEXT && ca->eol==GIT_EOL_UNSET)))) {
87 + if (stats.crlf) {
88 switch (ca->safe_crlf) {
89 case GIT_SAFE_CRLF_FAIL:
90 giterr_set(
91 - GITERR_FILTER, "LF would be replaced by CRLF in '%s'",
92 + GITERR_FILTER, "CRLF would be replaced by LF in '%s'",
93 git_filter_source_path(src));
94 return -1;
95 case GIT_SAFE_CRLF_WARN:
96 @@ -164,11 +177,16 @@ static int crlf_apply_to_odb(
97 default:
98 break;
100 - } else if (stats.crlf && ca->auto_crlf == GIT_AUTO_CRLF_INPUT) {
102 + } else if (ca->crlf_action == GIT_CRLF_CRLF ||
103 + (ca->auto_crlf == GIT_AUTO_CRLF_TRUE &&
104 + (ca->crlf_action == GIT_CRLF_GUESS || ca->crlf_action == GIT_CRLF_AUTO ||
105 + (ca->crlf_action == GIT_CRLF_TEXT && ca->eol == GIT_EOL_UNSET)))) {
106 + if (stats.lf != stats.crlf) {
107 switch (ca->safe_crlf) {
108 case GIT_SAFE_CRLF_FAIL:
109 giterr_set(
110 - GITERR_FILTER, "CRLF would be replaced by LF in '%s'",
111 + GITERR_FILTER, "LF would be replaced by CRLF in '%s'",
112 git_filter_source_path(src));
113 return -1;
114 case GIT_SAFE_CRLF_WARN:
115 @@ -178,20 +196,12 @@ static int crlf_apply_to_odb(
116 break;
120 - if (ca->crlf_action == GIT_CRLF_GUESS) {
121 - /*
122 - * If the file in the index has any CR in it, do not convert.
123 - * This is the new safer autocrlf handling.
124 - */
125 - if (has_cr_in_index(src))
126 - return GIT_PASSTHROUGH;
129 - if (!stats.cr)
130 - return GIT_PASSTHROUGH;
133 + /* If there are no CR characters to filter out, then just pass */
134 + if (!stats.cr)
135 + return GIT_PASSTHROUGH;
137 /* Actually drop the carriage returns */
138 return git_buf_text_crlf_to_lf(to, from);
140 diff --git a/tests/filter/crlf.h b/tests/filter/crlf.h
141 index 786edfc..0a7a10d 100644
142 --- a/tests/filter/crlf.h
143 +++ b/tests/filter/crlf.h
144 @@ -11,16 +11,28 @@
145 #define ALL_LF_TEXT_RAW "lf\nlf\nlf\nlf\nlf\n"
146 #define MORE_CRLF_TEXT_RAW "crlf\r\ncrlf\r\nlf\ncrlf\r\ncrlf\r\n"
147 #define MORE_LF_TEXT_RAW "lf\nlf\ncrlf\r\nlf\nlf\n"
148 +#define BINARY_ALL_CRLF_TEXT_RAW "\01one\r\ntwo\r\nthree\r\nfour\r\n"
149 +#define BINARY_ALL_LF_TEXT_RAW "\01one\ntwo\nthree\nfour\n"
150 +#define BINARY_MIXED_LF_CR_RAW "\01" MIXED_LF_CR_RAW
151 +#define BINARY_MIXED_LF_CR_CRLF_RAW "\01" MIXED_LF_CR_CRLF_RAW
153 #define ALL_CRLF_TEXT_AS_CRLF ALL_CRLF_TEXT_RAW
154 #define ALL_LF_TEXT_AS_CRLF "lf\r\nlf\r\nlf\r\nlf\r\nlf\r\n"
155 #define MORE_CRLF_TEXT_AS_CRLF "crlf\r\ncrlf\r\nlf\r\ncrlf\r\ncrlf\r\n"
156 #define MORE_LF_TEXT_AS_CRLF "lf\r\nlf\r\ncrlf\r\nlf\r\nlf\r\n"
157 +#define BINARY_ALL_CRLF_TEXT_AS_CRLF BINARY_ALL_CRLF_TEXT_RAW
158 +#define BINARY_ALL_LF_TEXT_AS_CRLF BINARY_ALL_CRLF_TEXT_AS_CRLF
159 +#define BINARY_MIXED_LF_CR_AS_CRLF "\01" MIXED_LF_CR_AS_CRLF
160 +#define BINARY_MIXED_LF_CR_CRLF_AS_CRLF BINARY_MIXED_LF_CR_AS_CRLF
162 #define ALL_CRLF_TEXT_AS_LF "crlf\ncrlf\ncrlf\ncrlf\n"
163 #define ALL_LF_TEXT_AS_LF ALL_LF_TEXT_RAW
164 #define MORE_CRLF_TEXT_AS_LF "crlf\ncrlf\nlf\ncrlf\ncrlf\n"
165 #define MORE_LF_TEXT_AS_LF "lf\nlf\ncrlf\nlf\nlf\n"
166 +#define BINARY_ALL_CRLF_TEXT_AS_LF BINARY_ALL_CRLF_TEXT_RAW
167 +#define BINARY_ALL_LF_TEXT_AS_LF BINARY_ALL_LF_TEXT_RAW
168 +#define BINARY_MIXED_LF_CR_AS_LF BINARY_MIXED_LF_CR_RAW
169 +#define BINARY_MIXED_LF_CR_CRLF_AS_LF BINARY_MIXED_LF_CR_CRLF_RAW
171 #define FEW_UTF8_CRLF_RAW "\xe2\x9a\xbdThe rest is ASCII01.\r\nThe rest is ASCII02.\r\nThe rest is ASCII03.\r\nThe rest is ASCII04.\r\nThe rest is ASCII05.\r\nThe rest is ASCII06.\r\nThe rest is ASCII07.\r\nThe rest is ASCII08.\r\nThe rest is ASCII09.\r\nThe rest is ASCII10.\r\nThe rest is ASCII11.\r\nThe rest is ASCII12.\r\nThe rest is ASCII13.\r\nThe rest is ASCII14.\r\nThe rest is ASCII15.\r\nThe rest is ASCII16.\r\nThe rest is ASCII17.\r\nThe rest is ASCII18.\r\nThe rest is ASCII19.\r\nThe rest is ASCII20.\r\nThe rest is ASCII21.\r\nThe rest is ASCII22.\r\n"
172 #define FEW_UTF8_LF_RAW "\xe2\x9a\xbdThe rest is ASCII01.\nThe rest is ASCII02.\nThe rest is ASCII03.\nThe rest is ASCII04.\nThe rest is ASCII05.\nThe rest is ASCII06.\nThe rest is ASCII07.\nThe rest is ASCII08.\nThe rest is ASCII09.\nThe rest is ASCII10.\nThe rest is ASCII11.\nThe rest is ASCII12.\nThe rest is ASCII13.\nThe rest is ASCII14.\nThe rest is ASCII15.\nThe rest is ASCII16.\nThe rest is ASCII17.\nThe rest is ASCII18.\nThe rest is ASCII19.\nThe rest is ASCII20.\nThe rest is ASCII21.\nThe rest is ASCII22.\n"
173 diff --git a/tests/index/crlf.c b/tests/index/crlf.c
174 index 38e7916..c9d2d84 100644
175 --- a/tests/index/crlf.c
176 +++ b/tests/index/crlf.c
177 @@ -7,9 +7,34 @@
179 #define FILE_CONTENTS_LF "one\ntwo\nthree\nfour\n"
180 #define FILE_CONTENTS_CRLF "one\r\ntwo\r\nthree\r\nfour\r\n"
181 +#define FILE_CONTENTS_MORE_CRLF MORE_CRLF_TEXT_RAW
182 +#define FILE_CONTENTS_MORE_LF MORE_LF_TEXT_RAW
183 +#define FILE_CONTENTS_LF_CR MIXED_LF_CR_RAW
184 +#define FILE_CONTENTS_LF_CR_CRLF MIXED_LF_CR_CRLF_RAW
185 +#define FILE_CONTENTS_BINARY_LF "\01" FILE_CONTENTS_LF
186 +#define FILE_CONTENTS_BINARY_CRLF "\01" FILE_CONTENTS_CRLF
187 +#define FILE_CONTENTS_BINARY_LF_CR "\01" FILE_CONTENTS_LF_CR
188 +#define FILE_CONTENTS_BINARY_LF_CR_CRLF "\01" FILE_CONTENTS_LF_CR_CRLF
190 #define FILE_OID_LF "f384549cbeb481e437091320de6d1f2e15e11b4a"
191 #define FILE_OID_CRLF "7fbf4d847b191141d80f30c8ab03d2ad4cd543a9"
192 +#define FILE_OID_MORE_CRLF "0ff5a53f19bfd2b5eea1ba550295c47515678987"
193 +#define FILE_OID_MORE_LF "04de00b358f13389948756732158eaaaefa1448c"
194 +#define FILE_OID_LF_CR "d11e7ef63ba7db1db3b1b99cdbafc57a8549f8a4"
195 +#define FILE_OID_LF_CR_CRLF "417786fc35b3c71aa546e3f95eb5da3c8dad8c41"
196 +#define FILE_OID_BINARY_LF "af6fcf6da196f615d7cda269b55b5c4ecfb4a5b3"
197 +#define FILE_OID_BINARY_CRLF "85340755cfe5e28c2835781978bb1cece91b3d0f"
198 +#define FILE_OID_BINARY_LF_CR "203555c5676d75cd80d69b50beb1f4b588c59ceb"
199 +#define FILE_OID_BINARY_LF_CR_CRLF "aaf083a9cb53dac3669dcfa0e48921580d629ec7"
201 +#define CHECK_CRLF_TO_LF_ERROR cl_assert(giterr_last() != NULL && \
202 + giterr_last()->klass == GITERR_FILTER && \
203 + strstr(giterr_last()->message, "CRLF would be replaced by LF in") != NULL); \
204 + giterr_clear();
205 +#define CHECK_LF_TO_CRLF_ERROR cl_assert(giterr_last() != NULL && \
206 + giterr_last()->klass == GITERR_FILTER && \
207 + strstr(giterr_last()->message, "LF would be replaced by CRLF in") != NULL); \
208 + giterr_clear();
210 static git_repository *g_repo;
211 static git_index *g_index;
212 @@ -42,6 +67,54 @@ void test_index_crlf__autocrlf_false_no_attrs(void)
213 cl_git_pass(git_oid_fromstr(&oid,
214 (GIT_EOL_NATIVE == GIT_EOL_CRLF) ? FILE_OID_CRLF : FILE_OID_LF));
215 cl_assert_equal_oid(&oid, &entry->id);
217 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_MORE_CRLF);
218 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
219 + entry = git_index_get_bypath(g_index, "newfile.txt", 0);
220 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_MORE_CRLF));
221 + cl_assert_equal_oid(&oid, &entry->id);
223 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_MORE_LF);
224 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
225 + entry = git_index_get_bypath(g_index, "newfile.txt", 0);
226 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_MORE_LF));
227 + cl_assert_equal_oid(&oid, &entry->id);
229 + cl_git_mkfile("./crlf/newfile1.txt", FILE_CONTENTS_LF_CR);
230 + cl_git_pass(git_index_add_bypath(g_index, "newfile1.txt"));
231 + entry = git_index_get_bypath(g_index, "newfile1.txt", 0);
232 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_LF_CR));
233 + cl_assert_equal_oid(&oid, &entry->id);
235 + cl_git_mkfile("./crlf/newfile2.txt", FILE_CONTENTS_LF_CR_CRLF);
236 + cl_git_pass(git_index_add_bypath(g_index, "newfile2.txt"));
237 + entry = git_index_get_bypath(g_index, "newfile2.txt", 0);
238 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_LF_CR_CRLF));
239 + cl_assert_equal_oid(&oid, &entry->id);
241 + cl_git_mkfile("./crlf/newfile3.txt", FILE_CONTENTS_BINARY_LF);
242 + cl_git_pass(git_index_add_bypath(g_index, "newfile3.txt"));
243 + entry = git_index_get_bypath(g_index, "newfile3.txt", 0);
244 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF));
245 + cl_assert_equal_oid(&oid, &entry->id);
247 + cl_git_mkfile("./crlf/newfile4.txt", FILE_CONTENTS_BINARY_CRLF);
248 + cl_git_pass(git_index_add_bypath(g_index, "newfile4.txt"));
249 + entry = git_index_get_bypath(g_index, "newfile4.txt", 0);
250 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_CRLF));
251 + cl_assert_equal_oid(&oid, &entry->id);
253 + cl_git_mkfile("./crlf/newfile5.txt", FILE_CONTENTS_BINARY_LF_CR);
254 + cl_git_pass(git_index_add_bypath(g_index, "newfile5.txt"));
255 + entry = git_index_get_bypath(g_index, "newfile5.txt", 0);
256 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF_CR));
257 + cl_assert_equal_oid(&oid, &entry->id);
259 + cl_git_mkfile("./crlf/newfile6.txt", FILE_CONTENTS_BINARY_LF_CR_CRLF);
260 + cl_git_pass(git_index_add_bypath(g_index, "newfile6.txt"));
261 + entry = git_index_get_bypath(g_index, "newfile6.txt", 0);
262 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF_CR_CRLF));
263 + cl_assert_equal_oid(&oid, &entry->id);
266 void test_index_crlf__autocrlf_true_no_attrs(void)
267 @@ -59,6 +132,63 @@ void test_index_crlf__autocrlf_true_no_attrs(void)
269 cl_git_pass(git_oid_fromstr(&oid, FILE_OID_LF));
270 cl_assert_equal_oid(&oid, &entry->id);
272 + cl_git_mkfile("./crlf/newfile2.txt",
273 + (GIT_EOL_NATIVE == GIT_EOL_CRLF) ? FILE_CONTENTS_LF : FILE_CONTENTS_CRLF);
275 + cl_git_pass(git_index_add_bypath(g_index, "newfile2.txt"));
276 + entry = git_index_get_bypath(g_index, "newfile2.txt", 0);
278 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_LF));
279 + cl_assert_equal_oid(&oid, &entry->id);
281 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_MORE_CRLF);
282 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
283 + entry = git_index_get_bypath(g_index, "newfile.txt", 0);
284 + cl_git_pass(git_oid_fromstr(&oid, "37bb7fa3debea1cbb65576733a457347ea1bb74d"));
285 + cl_assert_equal_oid(&oid, &entry->id);
287 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_MORE_LF);
288 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
289 + entry = git_index_get_bypath(g_index, "newfile.txt", 0);
290 + cl_git_pass(git_oid_fromstr(&oid, "2cda6f203b2f56d5c416b94b28670ec3eafb1398"));
291 + cl_assert_equal_oid(&oid, &entry->id);
293 + cl_git_mkfile("./crlf/newfile3.txt", FILE_CONTENTS_LF_CR);
294 + cl_git_pass(git_index_add_bypath(g_index, "newfile3.txt"));
295 + entry = git_index_get_bypath(g_index, "newfile3.txt", 0);
296 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_LF_CR));
297 + cl_assert_equal_oid(&oid, &entry->id);
299 + cl_git_mkfile("./crlf/newfile3.txt", FILE_CONTENTS_LF_CR_CRLF);
300 + cl_git_pass(git_index_add_bypath(g_index, "newfile3.txt"));
301 + entry = git_index_get_bypath(g_index, "newfile3.txt", 0);
302 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_LF_CR_CRLF));
303 + cl_assert_equal_oid(&oid, &entry->id);
305 + cl_git_mkfile("./crlf/newfile4.txt", FILE_CONTENTS_BINARY_LF);
306 + cl_git_pass(git_index_add_bypath(g_index, "newfile4.txt"));
307 + entry = git_index_get_bypath(g_index, "newfile4.txt", 0);
308 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF));
309 + cl_assert_equal_oid(&oid, &entry->id);
311 + cl_git_mkfile("./crlf/newfile5.txt", FILE_CONTENTS_BINARY_CRLF);
312 + cl_git_pass(git_index_add_bypath(g_index, "newfile5.txt"));
313 + entry = git_index_get_bypath(g_index, "newfile5.txt", 0);
314 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_CRLF));
315 + cl_assert_equal_oid(&oid, &entry->id);
317 + cl_git_mkfile("./crlf/newfile6.txt", FILE_CONTENTS_BINARY_LF_CR);
318 + cl_git_pass(git_index_add_bypath(g_index, "newfile6.txt"));
319 + entry = git_index_get_bypath(g_index, "newfile6.txt", 0);
320 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF_CR));
321 + cl_assert_equal_oid(&oid, &entry->id);
323 + cl_git_mkfile("./crlf/newfile7.txt", FILE_CONTENTS_BINARY_LF_CR_CRLF);
324 + cl_git_pass(git_index_add_bypath(g_index, "newfile7.txt"));
325 + entry = git_index_get_bypath(g_index, "newfile7.txt", 0);
326 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF_CR_CRLF));
327 + cl_assert_equal_oid(&oid, &entry->id);
330 void test_index_crlf__autocrlf_input_no_attrs(void)
331 @@ -76,6 +206,42 @@ void test_index_crlf__autocrlf_input_no_attrs(void)
333 cl_git_pass(git_oid_fromstr(&oid, FILE_OID_LF));
334 cl_assert_equal_oid(&oid, &entry->id);
336 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_MORE_CRLF);
337 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
338 + entry = git_index_get_bypath(g_index, "newfile.txt", 0);
339 + cl_git_pass(git_oid_fromstr(&oid, "37bb7fa3debea1cbb65576733a457347ea1bb74d"));
340 + cl_assert_equal_oid(&oid, &entry->id);
342 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_MORE_LF);
343 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
344 + entry = git_index_get_bypath(g_index, "newfile.txt", 0);
345 + cl_git_pass(git_oid_fromstr(&oid, "2cda6f203b2f56d5c416b94b28670ec3eafb1398"));
346 + cl_assert_equal_oid(&oid, &entry->id);
348 + cl_git_mkfile("./crlf/newfile4.txt", FILE_CONTENTS_BINARY_LF);
349 + cl_git_pass(git_index_add_bypath(g_index, "newfile4.txt"));
350 + entry = git_index_get_bypath(g_index, "newfile4.txt", 0);
351 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF));
352 + cl_assert_equal_oid(&oid, &entry->id);
354 + cl_git_mkfile("./crlf/newfile5.txt", FILE_CONTENTS_BINARY_CRLF);
355 + cl_git_pass(git_index_add_bypath(g_index, "newfile5.txt"));
356 + entry = git_index_get_bypath(g_index, "newfile5.txt", 0);
357 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_CRLF));
358 + cl_assert_equal_oid(&oid, &entry->id);
360 + cl_git_mkfile("./crlf/newfile6.txt", FILE_CONTENTS_BINARY_LF_CR);
361 + cl_git_pass(git_index_add_bypath(g_index, "newfile6.txt"));
362 + entry = git_index_get_bypath(g_index, "newfile6.txt", 0);
363 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF_CR));
364 + cl_assert_equal_oid(&oid, &entry->id);
366 + cl_git_mkfile("./crlf/newfile7.txt", FILE_CONTENTS_BINARY_LF_CR_CRLF);
367 + cl_git_pass(git_index_add_bypath(g_index, "newfile7.txt"));
368 + entry = git_index_get_bypath(g_index, "newfile7.txt", 0);
369 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF_CR_CRLF));
370 + cl_assert_equal_oid(&oid, &entry->id);
373 void test_index_crlf__autocrlf_false_text_auto_attr(void)
374 @@ -95,6 +261,42 @@ void test_index_crlf__autocrlf_false_text_auto_attr(void)
376 cl_git_pass(git_oid_fromstr(&oid, FILE_OID_LF));
377 cl_assert_equal_oid(&oid, &entry->id);
379 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_MORE_CRLF);
380 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
381 + entry = git_index_get_bypath(g_index, "newfile.txt", 0);
382 + cl_git_pass(git_oid_fromstr(&oid, "37bb7fa3debea1cbb65576733a457347ea1bb74d"));
383 + cl_assert_equal_oid(&oid, &entry->id);
385 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_MORE_LF);
386 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
387 + entry = git_index_get_bypath(g_index, "newfile.txt", 0);
388 + cl_git_pass(git_oid_fromstr(&oid, "2cda6f203b2f56d5c416b94b28670ec3eafb1398"));
389 + cl_assert_equal_oid(&oid, &entry->id);
391 + cl_git_mkfile("./crlf/newfile3.txt", FILE_CONTENTS_BINARY_LF);
392 + cl_git_pass(git_index_add_bypath(g_index, "newfile3.txt"));
393 + entry = git_index_get_bypath(g_index, "newfile3.txt", 0);
394 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF));
395 + cl_assert_equal_oid(&oid, &entry->id);
397 + cl_git_mkfile("./crlf/newfile4.txt", FILE_CONTENTS_BINARY_CRLF);
398 + cl_git_pass(git_index_add_bypath(g_index, "newfile4.txt"));
399 + entry = git_index_get_bypath(g_index, "newfile4.txt", 0);
400 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_CRLF));
401 + cl_assert_equal_oid(&oid, &entry->id);
403 + cl_git_mkfile("./crlf/newfile5.txt", FILE_CONTENTS_BINARY_LF_CR);
404 + cl_git_pass(git_index_add_bypath(g_index, "newfile5.txt"));
405 + entry = git_index_get_bypath(g_index, "newfile5.txt", 0);
406 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF_CR));
407 + cl_assert_equal_oid(&oid, &entry->id);
409 + cl_git_mkfile("./crlf/newfile6.txt", FILE_CONTENTS_BINARY_LF_CR_CRLF);
410 + cl_git_pass(git_index_add_bypath(g_index, "newfile6.txt"));
411 + entry = git_index_get_bypath(g_index, "newfile6.txt", 0);
412 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF_CR_CRLF));
413 + cl_assert_equal_oid(&oid, &entry->id);
416 void test_index_crlf__autocrlf_true_text_auto_attr(void)
417 @@ -104,7 +306,7 @@ void test_index_crlf__autocrlf_true_text_auto_attr(void)
419 cl_git_mkfile("./crlf/.gitattributes", "* text=auto\n");
421 - cl_repo_set_bool(g_repo, "core.autocrlf", false);
422 + cl_repo_set_bool(g_repo, "core.autocrlf", true);
424 cl_git_mkfile("./crlf/newfile.txt",
425 (GIT_EOL_NATIVE == GIT_EOL_CRLF) ? FILE_CONTENTS_CRLF : FILE_CONTENTS_LF);
426 @@ -114,6 +316,42 @@ void test_index_crlf__autocrlf_true_text_auto_attr(void)
428 cl_git_pass(git_oid_fromstr(&oid, FILE_OID_LF));
429 cl_assert_equal_oid(&oid, &entry->id);
431 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_MORE_CRLF);
432 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
433 + entry = git_index_get_bypath(g_index, "newfile.txt", 0);
434 + cl_git_pass(git_oid_fromstr(&oid, "37bb7fa3debea1cbb65576733a457347ea1bb74d"));
435 + cl_assert_equal_oid(&oid, &entry->id);
437 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_MORE_LF);
438 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
439 + entry = git_index_get_bypath(g_index, "newfile.txt", 0);
440 + cl_git_pass(git_oid_fromstr(&oid, "2cda6f203b2f56d5c416b94b28670ec3eafb1398"));
441 + cl_assert_equal_oid(&oid, &entry->id);
443 + cl_git_mkfile("./crlf/newfile3.txt", FILE_CONTENTS_BINARY_LF);
444 + cl_git_pass(git_index_add_bypath(g_index, "newfile3.txt"));
445 + entry = git_index_get_bypath(g_index, "newfile3.txt", 0);
446 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF));
447 + cl_assert_equal_oid(&oid, &entry->id);
449 + cl_git_mkfile("./crlf/newfile4.txt", FILE_CONTENTS_BINARY_CRLF);
450 + cl_git_pass(git_index_add_bypath(g_index, "newfile4.txt"));
451 + entry = git_index_get_bypath(g_index, "newfile4.txt", 0);
452 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_CRLF));
453 + cl_assert_equal_oid(&oid, &entry->id);
455 + cl_git_mkfile("./crlf/newfile5.txt", FILE_CONTENTS_BINARY_LF_CR);
456 + cl_git_pass(git_index_add_bypath(g_index, "newfile5.txt"));
457 + entry = git_index_get_bypath(g_index, "newfile5.txt", 0);
458 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF_CR));
459 + cl_assert_equal_oid(&oid, &entry->id);
461 + cl_git_mkfile("./crlf/newfile6.txt", FILE_CONTENTS_BINARY_LF_CR_CRLF);
462 + cl_git_pass(git_index_add_bypath(g_index, "newfile6.txt"));
463 + entry = git_index_get_bypath(g_index, "newfile6.txt", 0);
464 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF_CR_CRLF));
465 + cl_assert_equal_oid(&oid, &entry->id);
468 void test_index_crlf__autocrlf_input_text_auto_attr(void)
469 @@ -133,6 +371,59 @@ void test_index_crlf__autocrlf_input_text_auto_attr(void)
471 cl_git_pass(git_oid_fromstr(&oid, FILE_OID_LF));
472 cl_assert_equal_oid(&oid, &entry->id);
474 + cl_git_mkfile("./crlf/newfile2.txt",
475 + (GIT_EOL_NATIVE == GIT_EOL_CRLF) ? FILE_CONTENTS_LF : FILE_CONTENTS_CRLF);
477 + cl_git_pass(git_index_add_bypath(g_index, "newfile2.txt"));
478 + entry = git_index_get_bypath(g_index, "newfile2.txt", 0);
480 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_LF));
481 + cl_assert_equal_oid(&oid, &entry->id);
483 + cl_git_mkfile("./crlf/newfile3.txt", FILE_CONTENTS_LF_CR_CRLF);
485 + cl_git_pass(git_index_add_bypath(g_index, "newfile3.txt"));
486 + entry = git_index_get_bypath(g_index, "newfile3.txt", 0);
488 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_LF_CR_CRLF));
489 + cl_assert_equal_oid(&oid, &entry->id);
491 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_MORE_CRLF);
492 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
493 + entry = git_index_get_bypath(g_index, "newfile.txt", 0);
494 + cl_git_pass(git_oid_fromstr(&oid, "37bb7fa3debea1cbb65576733a457347ea1bb74d"));
495 + cl_assert_equal_oid(&oid, &entry->id);
497 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_MORE_LF);
498 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
499 + entry = git_index_get_bypath(g_index, "newfile.txt", 0);
500 + cl_git_pass(git_oid_fromstr(&oid, "2cda6f203b2f56d5c416b94b28670ec3eafb1398"));
501 + cl_assert_equal_oid(&oid, &entry->id);
503 + cl_git_mkfile("./crlf/newfile3.txt", FILE_CONTENTS_BINARY_LF);
504 + cl_git_pass(git_index_add_bypath(g_index, "newfile3.txt"));
505 + entry = git_index_get_bypath(g_index, "newfile3.txt", 0);
506 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF));
507 + cl_assert_equal_oid(&oid, &entry->id);
509 + cl_git_mkfile("./crlf/newfile4.txt", FILE_CONTENTS_BINARY_CRLF);
510 + cl_git_pass(git_index_add_bypath(g_index, "newfile4.txt"));
511 + entry = git_index_get_bypath(g_index, "newfile4.txt", 0);
512 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_CRLF));
513 + cl_assert_equal_oid(&oid, &entry->id);
515 + cl_git_mkfile("./crlf/newfile5.txt", FILE_CONTENTS_BINARY_LF_CR);
516 + cl_git_pass(git_index_add_bypath(g_index, "newfile5.txt"));
517 + entry = git_index_get_bypath(g_index, "newfile5.txt", 0);
518 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF_CR));
519 + cl_assert_equal_oid(&oid, &entry->id);
521 + cl_git_mkfile("./crlf/newfile6.txt", FILE_CONTENTS_BINARY_LF_CR_CRLF);
522 + cl_git_pass(git_index_add_bypath(g_index, "newfile6.txt"));
523 + entry = git_index_get_bypath(g_index, "newfile6.txt", 0);
524 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF_CR_CRLF));
525 + cl_assert_equal_oid(&oid, &entry->id);
528 void test_index_crlf__safecrlf_true_autocrlf_input_text_auto_attr(void)
529 @@ -155,6 +446,45 @@ void test_index_crlf__safecrlf_true_autocrlf_input_text_auto_attr(void)
531 cl_git_mkfile("./crlf/newfile2.txt", FILE_CONTENTS_CRLF);
532 cl_git_fail(git_index_add_bypath(g_index, "newfile2.txt"));
533 + CHECK_CRLF_TO_LF_ERROR
535 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_MORE_CRLF);
536 + cl_git_fail(git_index_add_bypath(g_index, "newfile.txt"));
537 + CHECK_CRLF_TO_LF_ERROR
539 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_MORE_LF);
540 + cl_git_fail(git_index_add_bypath(g_index, "newfile.txt"));
541 + CHECK_CRLF_TO_LF_ERROR
543 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_LF_CR);
544 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
546 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_LF_CR_CRLF);
547 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
549 + cl_git_mkfile("./crlf/newfile3.txt", FILE_CONTENTS_BINARY_LF);
550 + cl_git_pass(git_index_add_bypath(g_index, "newfile3.txt"));
551 + entry = git_index_get_bypath(g_index, "newfile3.txt", 0);
552 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF));
553 + cl_assert_equal_oid(&oid, &entry->id);
555 + cl_git_mkfile("./crlf/newfile4.txt", FILE_CONTENTS_BINARY_CRLF);
556 + cl_git_pass(git_index_add_bypath(g_index, "newfile4.txt"));
557 + entry = git_index_get_bypath(g_index, "newfile4.txt", 0);
558 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_CRLF));
559 + cl_assert_equal_oid(&oid, &entry->id);
561 + cl_git_mkfile("./crlf/newfile5.txt", FILE_CONTENTS_BINARY_LF_CR);
562 + cl_git_pass(git_index_add_bypath(g_index, "newfile5.txt"));
563 + entry = git_index_get_bypath(g_index, "newfile5.txt", 0);
564 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF_CR));
565 + cl_assert_equal_oid(&oid, &entry->id);
567 + cl_git_mkfile("./crlf/newfile6.txt", FILE_CONTENTS_BINARY_LF_CR_CRLF);
568 + cl_git_pass(git_index_add_bypath(g_index, "newfile6.txt"));
569 + entry = git_index_get_bypath(g_index, "newfile6.txt", 0);
570 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF_CR_CRLF));
571 + cl_assert_equal_oid(&oid, &entry->id);
574 void test_index_crlf__safecrlf_true_autocrlf_input_text__no_attr(void)
575 @@ -173,8 +503,35 @@ void test_index_crlf__safecrlf_true_autocrlf_input_text__no_attr(void)
576 cl_git_pass(git_oid_fromstr(&oid, FILE_OID_LF));
577 cl_assert_equal_oid(&oid, &entry->id);
579 - cl_git_mkfile("./crlf/newfile2.txt", FILE_CONTENTS_CRLF);
580 - cl_git_fail(git_index_add_bypath(g_index, "newfile2.txt"));
581 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_CRLF);
582 + cl_git_fail(git_index_add_bypath(g_index, "newfile.txt"));
583 + CHECK_CRLF_TO_LF_ERROR
585 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_MORE_CRLF);
586 + cl_git_fail(git_index_add_bypath(g_index, "newfile.txt"));
587 + CHECK_CRLF_TO_LF_ERROR
589 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_MORE_LF);
590 + cl_git_fail(git_index_add_bypath(g_index, "newfile.txt"));
591 + CHECK_CRLF_TO_LF_ERROR
593 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_LF_CR);
594 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
596 + cl_git_mkfile("./crlf/newfile.txt", FILE_CONTENTS_LF_CR_CRLF);
597 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
599 + cl_git_mkfile("crlf/newfile.txt", FILE_CONTENTS_BINARY_LF);
600 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
602 + cl_git_mkfile("crlf/newfile.txt", FILE_CONTENTS_BINARY_CRLF);
603 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
605 + cl_git_mkfile("crlf/newfile.txt", FILE_CONTENTS_BINARY_LF_CR);
606 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
608 + cl_git_mkfile("crlf/newfile.txt", FILE_CONTENTS_BINARY_LF_CR_CRLF);
609 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
612 void test_index_crlf__safecrlf_true_no_attrs(void)
613 @@ -182,15 +539,840 @@ void test_index_crlf__safecrlf_true_no_attrs(void)
614 cl_repo_set_bool(g_repo, "core.autocrlf", true);
615 cl_repo_set_bool(g_repo, "core.safecrlf", true);
617 - cl_git_mkfile("crlf/newfile.txt", ALL_LF_TEXT_RAW);
618 - cl_git_fail(git_index_add_bypath(g_index, "newfile.txt")); /* vanilla git fails here (on CrLf as well as on Lf-ony platforms): "fatal: LF would be replaced by CRLF in crlf/newfile.txt" */
620 - cl_git_mkfile("crlf/newfile.txt", ALL_CRLF_TEXT_RAW);
621 + cl_git_mkfile("crlf/newfile.txt", FILE_CONTENTS_CRLF);
622 cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
624 - cl_git_mkfile("crlf/newfile.txt", MORE_CRLF_TEXT_RAW);
625 + cl_git_mkfile("crlf/newfile.txt", FILE_CONTENTS_LF);
626 cl_git_fail(git_index_add_bypath(g_index, "newfile.txt"));
627 + CHECK_LF_TO_CRLF_ERROR
629 - cl_git_mkfile("crlf/newfile.txt", MORE_LF_TEXT_RAW);
630 + cl_git_mkfile("crlf/newfile.txt", FILE_CONTENTS_MORE_CRLF);
631 cl_git_fail(git_index_add_bypath(g_index, "newfile.txt"));
632 + CHECK_LF_TO_CRLF_ERROR
634 + cl_git_mkfile("crlf/newfile.txt", FILE_CONTENTS_MORE_LF);
635 + cl_git_fail(git_index_add_bypath(g_index, "newfile.txt"));
636 + CHECK_LF_TO_CRLF_ERROR
638 + cl_git_mkfile("crlf/newfile.txt", FILE_CONTENTS_LF_CR);
639 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
641 + cl_git_mkfile("crlf/newfile.txt", FILE_CONTENTS_LF_CR_CRLF);
642 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
644 + cl_git_mkfile("crlf/newfile.txt", FILE_CONTENTS_BINARY_LF);
645 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
647 + cl_git_mkfile("crlf/newfile.txt", FILE_CONTENTS_BINARY_CRLF);
648 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
650 + cl_git_mkfile("crlf/newfile.txt", FILE_CONTENTS_BINARY_LF_CR);
651 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
653 + cl_git_mkfile("crlf/newfile.txt", FILE_CONTENTS_BINARY_LF_CR_CRLF);
654 + cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
657 +void test_index_crlf__safecrlf_true_text_eol_attrs(void)
659 + cl_repo_set_bool(g_repo, "core.autocrlf", false);
660 + cl_repo_set_bool(g_repo, "core.safecrlf", true);
662 + cl_git_mkfile("./crlf/.gitattributes", "*.crlf text eol=crlf\n*.lf text eol=lf\n");
664 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_CRLF);
665 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
667 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF);
668 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
669 + CHECK_LF_TO_CRLF_ERROR
671 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_MORE_CRLF);
672 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
673 + CHECK_LF_TO_CRLF_ERROR
675 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_MORE_LF);
676 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
677 + CHECK_LF_TO_CRLF_ERROR
679 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF_CR);
680 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
681 + CHECK_LF_TO_CRLF_ERROR
683 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF_CR_CRLF);
684 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
685 + CHECK_LF_TO_CRLF_ERROR
687 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_CRLF);
688 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
690 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF);
691 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
692 + CHECK_LF_TO_CRLF_ERROR
694 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF_CR);
695 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
696 + CHECK_LF_TO_CRLF_ERROR
698 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF_CR_CRLF);
699 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
700 + CHECK_LF_TO_CRLF_ERROR
702 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_CRLF);
703 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
704 + CHECK_CRLF_TO_LF_ERROR
706 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF);
707 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
709 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_MORE_CRLF);
710 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
711 + CHECK_CRLF_TO_LF_ERROR
713 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_MORE_LF);
714 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
715 + CHECK_CRLF_TO_LF_ERROR
717 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF_CR);
718 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
720 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF_CR_CRLF);
721 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
722 + CHECK_CRLF_TO_LF_ERROR
724 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_CRLF);
725 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
726 + CHECK_CRLF_TO_LF_ERROR
728 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF);
729 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
731 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF_CR);
732 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
734 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF_CR_CRLF);
735 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
736 + CHECK_CRLF_TO_LF_ERROR
739 +void test_index_crlf__safecrlf_true_autocrlf_true_crlf_attrs(void)
741 + cl_repo_set_bool(g_repo, "core.autocrlf", true);
742 + cl_repo_set_bool(g_repo, "core.safecrlf", true);
744 + cl_git_mkfile("./crlf/.gitattributes", "*.crlf crlf\n*.lf -crlf\n");
746 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_CRLF);
747 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
749 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF);
750 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
751 + CHECK_LF_TO_CRLF_ERROR
753 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_MORE_CRLF);
754 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
755 + CHECK_LF_TO_CRLF_ERROR
757 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_MORE_LF);
758 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
759 + CHECK_LF_TO_CRLF_ERROR
761 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF_CR);
762 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
763 + CHECK_LF_TO_CRLF_ERROR
765 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF_CR_CRLF);
766 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
767 + CHECK_LF_TO_CRLF_ERROR
769 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_CRLF);
770 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
772 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF);
773 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
774 + CHECK_LF_TO_CRLF_ERROR
776 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF_CR);
777 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
778 + CHECK_LF_TO_CRLF_ERROR
780 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF_CR_CRLF);
781 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
782 + CHECK_LF_TO_CRLF_ERROR
784 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_CRLF);
785 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
787 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF);
788 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
790 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_MORE_CRLF);
791 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
793 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_MORE_LF);
794 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
796 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF_CR);
797 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
799 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF_CR_CRLF);
800 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
802 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_CRLF);
803 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
805 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF);
806 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
808 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF_CR);
809 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
811 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF_CR_CRLF);
812 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
815 +void test_index_crlf__safecrlf_true_autocrlf_input_crlf_attrs(void)
817 + cl_repo_set_string(g_repo, "core.autocrlf", "input");
818 + cl_repo_set_bool(g_repo, "core.safecrlf", true);
820 + cl_git_mkfile("./crlf/.gitattributes", "*.crlf crlf\n*.lf -crlf\n");
822 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_CRLF);
823 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
824 + CHECK_CRLF_TO_LF_ERROR
826 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF);
827 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
829 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_MORE_CRLF);
830 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
831 + CHECK_CRLF_TO_LF_ERROR
833 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_MORE_LF);
834 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
835 + CHECK_CRLF_TO_LF_ERROR
837 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF_CR);
838 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
840 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF_CR_CRLF);
841 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
842 + CHECK_CRLF_TO_LF_ERROR
844 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_CRLF);
845 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
846 + CHECK_CRLF_TO_LF_ERROR
848 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF);
849 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
851 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF_CR);
852 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
854 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF_CR_CRLF);
855 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
856 + CHECK_CRLF_TO_LF_ERROR
858 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_CRLF);
859 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
861 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF);
862 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
864 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_MORE_CRLF);
865 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
867 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_MORE_LF);
868 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
870 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF_CR);
871 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
873 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF_CR_CRLF);
874 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
876 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_CRLF);
877 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
879 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF);
880 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
882 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF_CR);
883 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
885 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF_CR_CRLF);
886 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
889 +void test_index_crlf__safecrlf_true_autocrlf_input_eol_attrs(void)
891 + cl_repo_set_string(g_repo, "core.autocrlf", "input");
892 + cl_repo_set_bool(g_repo, "core.safecrlf", true);
894 + cl_git_mkfile("./crlf/.gitattributes", "*.crlf eol=crlf\n*.lf eol=lf\n");
896 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_CRLF);
897 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
899 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF);
900 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
901 + CHECK_LF_TO_CRLF_ERROR
903 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_MORE_CRLF);
904 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
905 + CHECK_LF_TO_CRLF_ERROR
907 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_MORE_LF);
908 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
909 + CHECK_LF_TO_CRLF_ERROR
911 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF_CR);
912 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
913 + CHECK_LF_TO_CRLF_ERROR
915 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF_CR_CRLF);
916 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
917 + CHECK_LF_TO_CRLF_ERROR
919 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_CRLF);
920 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
922 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF);
923 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
924 + CHECK_LF_TO_CRLF_ERROR
926 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF_CR);
927 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
928 + CHECK_LF_TO_CRLF_ERROR
930 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF_CR_CRLF);
931 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
932 + CHECK_LF_TO_CRLF_ERROR
934 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_CRLF);
935 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
936 + CHECK_CRLF_TO_LF_ERROR
938 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF);
939 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
941 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_MORE_CRLF);
942 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
943 + CHECK_CRLF_TO_LF_ERROR
945 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_MORE_LF);
946 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
947 + CHECK_CRLF_TO_LF_ERROR
949 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF_CR);
950 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
952 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF_CR_CRLF);
953 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
954 + CHECK_CRLF_TO_LF_ERROR
956 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_CRLF);
957 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
958 + CHECK_CRLF_TO_LF_ERROR
960 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF);
961 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
963 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF_CR);
964 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
966 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF_CR_CRLF);
967 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
968 + CHECK_CRLF_TO_LF_ERROR
971 +void test_index_crlf__safecrlf_true_autocrlf_true_eol_attrs(void)
973 + cl_repo_set_bool(g_repo, "core.autocrlf", true);
974 + cl_repo_set_bool(g_repo, "core.safecrlf", true);
976 + cl_git_mkfile("./crlf/.gitattributes", "*.crlf eol=crlf\n*.lf eol=lf\n");
978 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_CRLF);
979 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
981 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF);
982 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
983 + CHECK_LF_TO_CRLF_ERROR
985 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_MORE_CRLF);
986 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
987 + CHECK_LF_TO_CRLF_ERROR
989 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_MORE_LF);
990 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
991 + CHECK_LF_TO_CRLF_ERROR
993 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF_CR);
994 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
995 + CHECK_LF_TO_CRLF_ERROR
997 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF_CR_CRLF);
998 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
999 + CHECK_LF_TO_CRLF_ERROR
1001 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_CRLF);
1002 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
1004 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF);
1005 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1006 + CHECK_LF_TO_CRLF_ERROR
1008 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF_CR);
1009 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1010 + CHECK_LF_TO_CRLF_ERROR
1012 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF_CR_CRLF);
1013 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1014 + CHECK_LF_TO_CRLF_ERROR
1016 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_CRLF);
1017 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1018 + CHECK_CRLF_TO_LF_ERROR
1020 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF);
1021 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1023 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_MORE_CRLF);
1024 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1025 + CHECK_CRLF_TO_LF_ERROR
1027 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_MORE_LF);
1028 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1029 + CHECK_CRLF_TO_LF_ERROR
1031 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF_CR);
1032 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1034 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF_CR_CRLF);
1035 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1036 + CHECK_CRLF_TO_LF_ERROR
1038 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_CRLF);
1039 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1040 + CHECK_CRLF_TO_LF_ERROR
1042 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF);
1043 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1045 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF_CR);
1046 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1048 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF_CR_CRLF);
1049 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1050 + CHECK_CRLF_TO_LF_ERROR
1053 +void test_index_crlf__safecrlf_true_autocrlf_false_eol_attrs(void)
1055 + cl_repo_set_bool(g_repo, "core.autocrlf", false);
1056 + cl_repo_set_bool(g_repo, "core.safecrlf", true);
1058 + cl_git_mkfile("./crlf/.gitattributes", "*.crlf eol=crlf\n*.lf eol=lf\n");
1060 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_CRLF);
1061 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
1063 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF);
1064 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1065 + CHECK_LF_TO_CRLF_ERROR
1067 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_MORE_CRLF);
1068 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1069 + CHECK_LF_TO_CRLF_ERROR
1071 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_MORE_LF);
1072 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1073 + CHECK_LF_TO_CRLF_ERROR
1075 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF_CR);
1076 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1077 + CHECK_LF_TO_CRLF_ERROR
1079 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF_CR_CRLF);
1080 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1081 + CHECK_LF_TO_CRLF_ERROR
1083 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_CRLF);
1084 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
1086 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF);
1087 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1088 + CHECK_LF_TO_CRLF_ERROR
1090 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF_CR);
1091 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1092 + CHECK_LF_TO_CRLF_ERROR
1094 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF_CR_CRLF);
1095 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1096 + CHECK_LF_TO_CRLF_ERROR
1098 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_CRLF);
1099 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1100 + CHECK_CRLF_TO_LF_ERROR
1102 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF);
1103 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1105 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_MORE_CRLF);
1106 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1107 + CHECK_CRLF_TO_LF_ERROR
1109 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_MORE_LF);
1110 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1111 + CHECK_CRLF_TO_LF_ERROR
1113 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF_CR);
1114 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1116 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF_CR_CRLF);
1117 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1118 + CHECK_CRLF_TO_LF_ERROR
1120 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_CRLF);
1121 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1122 + CHECK_CRLF_TO_LF_ERROR
1124 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF);
1125 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1127 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF_CR);
1128 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1130 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF_CR_CRLF);
1131 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1132 + CHECK_CRLF_TO_LF_ERROR
1135 +void test_index_crlf__safecrlf_true_autocrlf_true_text_eol_attrs(void)
1137 + cl_repo_set_bool(g_repo, "core.autocrlf", true);
1138 + cl_repo_set_bool(g_repo, "core.safecrlf", true);
1140 + cl_git_mkfile("./crlf/.gitattributes", "*.crlf text eol=crlf\n*.lf text eol=lf\n");
1142 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_CRLF);
1143 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
1145 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF);
1146 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1147 + CHECK_LF_TO_CRLF_ERROR
1149 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_MORE_CRLF);
1150 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1151 + CHECK_LF_TO_CRLF_ERROR
1153 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_MORE_LF);
1154 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1155 + CHECK_LF_TO_CRLF_ERROR
1157 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF_CR);
1158 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1159 + CHECK_LF_TO_CRLF_ERROR
1161 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF_CR_CRLF);
1162 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1163 + CHECK_LF_TO_CRLF_ERROR
1165 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_CRLF);
1166 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
1168 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF);
1169 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1170 + CHECK_LF_TO_CRLF_ERROR
1172 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF_CR);
1173 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1174 + CHECK_LF_TO_CRLF_ERROR
1176 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF_CR_CRLF);
1177 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1178 + CHECK_LF_TO_CRLF_ERROR
1180 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_CRLF);
1181 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1182 + CHECK_CRLF_TO_LF_ERROR
1184 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF);
1185 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1187 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_MORE_CRLF);
1188 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1189 + CHECK_CRLF_TO_LF_ERROR
1191 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_MORE_LF);
1192 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1193 + CHECK_CRLF_TO_LF_ERROR
1195 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF_CR);
1196 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1198 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF_CR_CRLF);
1199 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1200 + CHECK_CRLF_TO_LF_ERROR
1202 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_CRLF);
1203 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1204 + CHECK_CRLF_TO_LF_ERROR
1206 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF);
1207 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1209 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF_CR);
1210 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1212 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF_CR_CRLF);
1213 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1214 + CHECK_CRLF_TO_LF_ERROR
1217 +void test_index_crlf__safecrlf_true_autocrlf_false_text_eol_attrs(void)
1219 + cl_repo_set_bool(g_repo, "core.autocrlf", false);
1220 + cl_repo_set_bool(g_repo, "core.safecrlf", true);
1222 + cl_git_mkfile("./crlf/.gitattributes", "*.crlf text eol=crlf\n*.lf text eol=lf\n");
1224 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_CRLF);
1225 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
1227 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF);
1228 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1229 + CHECK_LF_TO_CRLF_ERROR
1231 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_MORE_CRLF);
1232 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1233 + CHECK_LF_TO_CRLF_ERROR
1235 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_MORE_LF);
1236 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1237 + CHECK_LF_TO_CRLF_ERROR
1239 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF_CR);
1240 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1241 + CHECK_LF_TO_CRLF_ERROR
1243 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF_CR_CRLF);
1244 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1245 + CHECK_LF_TO_CRLF_ERROR
1247 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_CRLF);
1248 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
1250 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF);
1251 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1252 + CHECK_LF_TO_CRLF_ERROR
1254 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF_CR);
1255 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1256 + CHECK_LF_TO_CRLF_ERROR
1258 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_BINARY_LF_CR_CRLF);
1259 + cl_git_fail(git_index_add_bypath(g_index, "newfile.crlf"));
1260 + CHECK_LF_TO_CRLF_ERROR
1262 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_CRLF);
1263 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1264 + CHECK_CRLF_TO_LF_ERROR
1266 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF);
1267 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1269 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_MORE_CRLF);
1270 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1271 + CHECK_CRLF_TO_LF_ERROR
1273 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_MORE_LF);
1274 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1275 + CHECK_CRLF_TO_LF_ERROR
1277 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF_CR);
1278 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1280 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF_CR_CRLF);
1281 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1282 + CHECK_CRLF_TO_LF_ERROR
1284 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_CRLF);
1285 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1286 + CHECK_CRLF_TO_LF_ERROR
1288 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF);
1289 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1291 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF_CR);
1292 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1294 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_BINARY_LF_CR_CRLF);
1295 + cl_git_fail(git_index_add_bypath(g_index, "newfile.lf"));
1296 + CHECK_CRLF_TO_LF_ERROR
1299 +void test_index_crlf__attrs(void)
1301 + const git_index_entry *entry;
1302 + git_oid oid;
1304 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_LF_CR));
1306 + cl_repo_set_bool(g_repo, "core.autocrlf", false);
1307 + cl_repo_set_bool(g_repo, "core.safecrlf", false);
1309 + cl_git_mkfile("./crlf/.gitattributes", "*.crlf text eol=crlf\n*.lf text eol=lf\n");
1311 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF_CR);
1312 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
1313 + entry = git_index_get_bypath(g_index, "newfile.crlf", 0);
1314 + cl_assert_equal_oid(&oid, &entry->id);
1316 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF_CR);
1317 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1318 + entry = git_index_get_bypath(g_index, "newfile.lf", 0);
1319 + cl_assert_equal_oid(&oid, &entry->id);
1321 + cl_git_mkfile("crlf/newfile2.crlf", FILE_CONTENTS_LF_CR_CRLF);
1322 + cl_git_pass(git_index_add_bypath(g_index, "newfile2.crlf"));
1323 + entry = git_index_get_bypath(g_index, "newfile2.crlf", 0);
1324 + cl_assert_equal_oid(&oid, &entry->id);
1326 + cl_git_mkfile("crlf/newfile2.lf", FILE_CONTENTS_LF_CR_CRLF);
1327 + cl_git_pass(git_index_add_bypath(g_index, "newfile2.lf"));
1328 + entry = git_index_get_bypath(g_index, "newfile2.lf", 0);
1329 + cl_assert_equal_oid(&oid, &entry->id);
1331 + cl_git_mkfile("./crlf/newfile.crlf", FILE_CONTENTS_MORE_CRLF);
1332 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
1333 + entry = git_index_get_bypath(g_index, "newfile.crlf", 0);
1334 + cl_git_pass(git_oid_fromstr(&oid, "37bb7fa3debea1cbb65576733a457347ea1bb74d"));
1335 + cl_assert_equal_oid(&oid, &entry->id);
1337 + cl_git_mkfile("./crlf/newfile.crlf", FILE_CONTENTS_MORE_LF);
1338 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
1339 + entry = git_index_get_bypath(g_index, "newfile.crlf", 0);
1340 + cl_git_pass(git_oid_fromstr(&oid, "2cda6f203b2f56d5c416b94b28670ec3eafb1398"));
1341 + cl_assert_equal_oid(&oid, &entry->id);
1343 + cl_git_mkfile("./crlf/newfile.lf", FILE_CONTENTS_MORE_CRLF);
1344 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1345 + entry = git_index_get_bypath(g_index, "newfile.lf", 0);
1346 + cl_git_pass(git_oid_fromstr(&oid, "37bb7fa3debea1cbb65576733a457347ea1bb74d"));
1347 + cl_assert_equal_oid(&oid, &entry->id);
1349 + cl_git_mkfile("./crlf/newfile.lf", FILE_CONTENTS_MORE_LF);
1350 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1351 + entry = git_index_get_bypath(g_index, "newfile.lf", 0);
1352 + cl_git_pass(git_oid_fromstr(&oid, "2cda6f203b2f56d5c416b94b28670ec3eafb1398"));
1353 + cl_assert_equal_oid(&oid, &entry->id);
1356 +void test_index_crlf__crlf_attrs(void)
1358 + const git_index_entry *entry;
1359 + git_oid oid;
1361 + cl_repo_set_bool(g_repo, "core.autocrlf", false);
1362 + cl_repo_set_bool(g_repo, "core.safecrlf", false);
1364 + cl_git_mkfile("./crlf/.gitattributes", "*.crlf crlf\n*.lf -crlf\n");
1366 + cl_git_mkfile("./crlf/newfile.crlf", FILE_CONTENTS_MORE_CRLF);
1367 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
1368 + entry = git_index_get_bypath(g_index, "newfile.crlf", 0);
1369 + cl_git_pass(git_oid_fromstr(&oid, "37bb7fa3debea1cbb65576733a457347ea1bb74d"));
1370 + cl_assert_equal_oid(&oid, &entry->id);
1372 + cl_git_mkfile("./crlf/newfile.crlf", FILE_CONTENTS_MORE_LF);
1373 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
1374 + entry = git_index_get_bypath(g_index, "newfile.crlf", 0);
1375 + cl_git_pass(git_oid_fromstr(&oid, "2cda6f203b2f56d5c416b94b28670ec3eafb1398"));
1376 + cl_assert_equal_oid(&oid, &entry->id);
1378 + cl_git_mkfile("./crlf/newfile.lf", FILE_CONTENTS_MORE_CRLF);
1379 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1380 + entry = git_index_get_bypath(g_index, "newfile.lf", 0);
1381 + cl_git_pass(git_oid_fromstr(&oid, "0ff5a53f19bfd2b5eea1ba550295c47515678987"));
1382 + cl_assert_equal_oid(&oid, &entry->id);
1384 + cl_git_mkfile("./crlf/newfile.lf", FILE_CONTENTS_MORE_LF);
1385 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1386 + entry = git_index_get_bypath(g_index, "newfile.lf", 0);
1387 + cl_git_pass(git_oid_fromstr(&oid, "04de00b358f13389948756732158eaaaefa1448c"));
1388 + cl_assert_equal_oid(&oid, &entry->id);
1390 + cl_git_mkfile("crlf/newfile.crlf", FILE_CONTENTS_LF_CR);
1391 + cl_git_pass(git_index_add_bypath(g_index, "newfile.crlf"));
1392 + entry = git_index_get_bypath(g_index, "newfile.crlf", 0);
1393 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_LF_CR));
1394 + cl_assert_equal_oid(&oid, &entry->id);
1396 + cl_git_mkfile("crlf/newfile.lf", FILE_CONTENTS_LF_CR);
1397 + cl_git_pass(git_index_add_bypath(g_index, "newfile.lf"));
1398 + entry = git_index_get_bypath(g_index, "newfile.lf", 0);
1399 + cl_assert_equal_oid(&oid, &entry->id);
1401 + cl_git_mkfile("crlf/newfile2.crlf", FILE_CONTENTS_LF_CR_CRLF);
1402 + cl_git_pass(git_index_add_bypath(g_index, "newfile2.crlf"));
1403 + entry = git_index_get_bypath(g_index, "newfile2.crlf", 0);
1404 + cl_assert_equal_oid(&oid, &entry->id);
1406 + cl_git_mkfile("crlf/newfile2.lf", FILE_CONTENTS_LF_CR_CRLF);
1407 + cl_git_pass(git_index_add_bypath(g_index, "newfile2.lf"));
1408 + entry = git_index_get_bypath(g_index, "newfile2.lf", 0);
1409 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_LF_CR_CRLF));
1410 + cl_assert_equal_oid(&oid, &entry->id);
1412 + cl_git_mkfile("./crlf/newfile3.crlf", FILE_CONTENTS_BINARY_LF);
1413 + cl_git_pass(git_index_add_bypath(g_index, "newfile3.crlf"));
1414 + entry = git_index_get_bypath(g_index, "newfile3.crlf", 0);
1415 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF));
1416 + cl_assert_equal_oid(&oid, &entry->id);
1418 + cl_git_mkfile("./crlf/newfile4.crlf", FILE_CONTENTS_BINARY_CRLF);
1419 + cl_git_pass(git_index_add_bypath(g_index, "newfile4.crlf"));
1420 + entry = git_index_get_bypath(g_index, "newfile4.crlf", 0);
1421 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF));
1422 + cl_assert_equal_oid(&oid, &entry->id);
1424 + cl_git_mkfile("./crlf/newfile5.crlf", FILE_CONTENTS_BINARY_LF_CR);
1425 + cl_git_pass(git_index_add_bypath(g_index, "newfile5.crlf"));
1426 + entry = git_index_get_bypath(g_index, "newfile5.crlf", 0);
1427 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF_CR));
1428 + cl_assert_equal_oid(&oid, &entry->id);
1430 + cl_git_mkfile("./crlf/newfile6.crlf", FILE_CONTENTS_BINARY_LF_CR_CRLF);
1431 + cl_git_pass(git_index_add_bypath(g_index, "newfile6.crlf"));
1432 + entry = git_index_get_bypath(g_index, "newfile6.crlf", 0);
1433 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF_CR));
1434 + cl_assert_equal_oid(&oid, &entry->id);
1436 + cl_git_mkfile("./crlf/newfile3.lf", FILE_CONTENTS_BINARY_LF);
1437 + cl_git_pass(git_index_add_bypath(g_index, "newfile3.lf"));
1438 + entry = git_index_get_bypath(g_index, "newfile3.lf", 0);
1439 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF));
1440 + cl_assert_equal_oid(&oid, &entry->id);
1442 + cl_git_mkfile("./crlf/newfile4.lf", FILE_CONTENTS_BINARY_CRLF);
1443 + cl_git_pass(git_index_add_bypath(g_index, "newfile4.lf"));
1444 + entry = git_index_get_bypath(g_index, "newfile4.lf", 0);
1445 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_CRLF));
1446 + cl_assert_equal_oid(&oid, &entry->id);
1448 + cl_git_mkfile("./crlf/newfile5.lf", FILE_CONTENTS_BINARY_LF_CR);
1449 + cl_git_pass(git_index_add_bypath(g_index, "newfile5.lf"));
1450 + entry = git_index_get_bypath(g_index, "newfile5.lf", 0);
1451 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF_CR));
1452 + cl_assert_equal_oid(&oid, &entry->id);
1454 + cl_git_mkfile("./crlf/newfile6.lf", FILE_CONTENTS_BINARY_LF_CR_CRLF);
1455 + cl_git_pass(git_index_add_bypath(g_index, "newfile6.lf"));
1456 + entry = git_index_get_bypath(g_index, "newfile6.lf", 0);
1457 + cl_git_pass(git_oid_fromstr(&oid, FILE_OID_BINARY_LF_CR_CRLF));
1458 + cl_assert_equal_oid(&oid, &entry->id);
1461 1.9.5.msysgit.1