Commit 7ee233a9 by Vicent Marti

Merge pull request #2375 from libgit2/rb/safecrlf-on-lf-platform

Make core.safecrlf not generate an error on LF-ending platforms
parents ff9fb448 c094197b
...@@ -138,6 +138,10 @@ static int crlf_apply_to_odb( ...@@ -138,6 +138,10 @@ static int crlf_apply_to_odb(
if (git_buf_text_gather_stats(&stats, from, false)) if (git_buf_text_gather_stats(&stats, from, false))
return GIT_PASSTHROUGH; return GIT_PASSTHROUGH;
/* If there are no CR characters to filter out, then just pass */
if (!stats.cr)
return GIT_PASSTHROUGH;
/* If safecrlf is enabled, sanity-check the result. */ /* If safecrlf is enabled, sanity-check the result. */
if (stats.cr != stats.crlf || stats.lf != stats.crlf) { if (stats.cr != stats.crlf || stats.lf != stats.crlf) {
switch (ca->safe_crlf) { switch (ca->safe_crlf) {
......
...@@ -103,12 +103,12 @@ void test_filter_crlf__with_safecrlf(void) ...@@ -103,12 +103,12 @@ void test_filter_crlf__with_safecrlf(void)
cl_git_fail(git_filter_list_apply_to_data(&out, fl, &in)); cl_git_fail(git_filter_list_apply_to_data(&out, fl, &in));
cl_assert_equal_i(giterr_last()->klass, GITERR_FILTER); cl_assert_equal_i(giterr_last()->klass, GITERR_FILTER);
/* Normalized \n fails with safecrlf */ /* Normalized \n is reversible, so does not fail with safecrlf */
in.ptr = "Normal\nLF\nonly\nline-endings.\n"; in.ptr = "Normal\nLF\nonly\nline-endings.\n";
in.size = strlen(in.ptr); in.size = strlen(in.ptr);
cl_git_fail(git_filter_list_apply_to_data(&out, fl, &in)); cl_git_pass(git_filter_list_apply_to_data(&out, fl, &in));
cl_assert_equal_i(giterr_last()->klass, GITERR_FILTER); cl_assert_equal_s(in.ptr, out.ptr);
git_filter_list_free(fl); git_filter_list_free(fl);
git_buf_free(&out); git_buf_free(&out);
......
...@@ -134,3 +134,21 @@ void test_index_crlf__autocrlf_input_text_auto_attr(void) ...@@ -134,3 +134,21 @@ void test_index_crlf__autocrlf_input_text_auto_attr(void)
cl_git_pass(git_oid_fromstr(&oid, FILE_OID_LF)); cl_git_pass(git_oid_fromstr(&oid, FILE_OID_LF));
cl_assert(git_oid_cmp(&oid, &entry->id) == 0); cl_assert(git_oid_cmp(&oid, &entry->id) == 0);
} }
void test_index_crlf__safecrlf_true_no_attrs(void)
{
cl_repo_set_bool(g_repo, "core.autocrlf", true);
cl_repo_set_bool(g_repo, "core.safecrlf", true);
cl_git_mkfile("crlf/newfile.txt", ALL_LF_TEXT_RAW);
cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
cl_git_mkfile("crlf/newfile.txt", ALL_CRLF_TEXT_RAW);
cl_git_pass(git_index_add_bypath(g_index, "newfile.txt"));
cl_git_mkfile("crlf/newfile.txt", MORE_CRLF_TEXT_RAW);
cl_git_fail(git_index_add_bypath(g_index, "newfile.txt"));
cl_git_mkfile("crlf/newfile.txt", MORE_LF_TEXT_RAW);
cl_git_fail(git_index_add_bypath(g_index, "newfile.txt"));
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment