Unverified Commit c3a7892f by Edward Thomson Committed by GitHub

Merge pull request #5209 from mkostyuk/apply-wrong-patch

apply: Fix a patch corruption related to EOFNL handling
parents 17d6cd45 585fbd74
...@@ -219,7 +219,7 @@ static int apply_hunk( ...@@ -219,7 +219,7 @@ static int apply_hunk(
case GIT_DIFF_LINE_CONTEXT_EOFNL: case GIT_DIFF_LINE_CONTEXT_EOFNL:
case GIT_DIFF_LINE_DEL_EOFNL: case GIT_DIFF_LINE_DEL_EOFNL:
case GIT_DIFF_LINE_ADD_EOFNL: case GIT_DIFF_LINE_ADD_EOFNL:
prev = i ? git_array_get(patch->lines, i - 1) : NULL; prev = i ? git_array_get(patch->lines, linenum - 1) : NULL;
if (prev && prev->content[prev->content_len - 1] == '\n') if (prev && prev->content[prev->content_len - 1] == '\n')
prev->content_len -= 1; prev->content_len -= 1;
break; break;
......
...@@ -131,6 +131,17 @@ void test_apply_fromdiff__lastline(void) ...@@ -131,6 +131,17 @@ void test_apply_fromdiff__lastline(void)
PATCH_ORIGINAL_TO_CHANGE_LASTLINE, NULL)); PATCH_ORIGINAL_TO_CHANGE_LASTLINE, NULL));
} }
void test_apply_fromdiff__change_middle_and_lastline_nocontext(void)
{
git_diff_options diff_opts = GIT_DIFF_OPTIONS_INIT;
diff_opts.context_lines = 0;
cl_git_pass(apply_buf(
FILE_ORIGINAL, "file.txt",
FILE_CHANGE_MIDDLE_AND_LASTLINE, "file.txt",
PATCH_ORIGINAL_TO_CHANGE_MIDDLE_AND_LASTLINE_NOCONTEXT, &diff_opts));
}
void test_apply_fromdiff__prepend(void) void test_apply_fromdiff__prepend(void)
{ {
cl_git_pass(apply_buf( cl_git_pass(apply_buf(
......
...@@ -263,6 +263,32 @@ ...@@ -263,6 +263,32 @@
"-(this line is changed)\n" \ "-(this line is changed)\n" \
"+(THIS line is changed!)\n" "+(THIS line is changed!)\n"
/* A change in the middle and a deletion of the newline at the end of the file */
#define FILE_CHANGE_MIDDLE_AND_LASTLINE \
"hey!\n" \
"this is some context!\n" \
"around some lines\n" \
"that will change\n" \
"yes it is!\n" \
"(THIS line is changed!)\n" \
"and this\n" \
"is additional context\n" \
"BELOW it! - (THIS line is changed!)"
#define PATCH_ORIGINAL_TO_CHANGE_MIDDLE_AND_LASTLINE_NOCONTEXT \
"diff --git a/file.txt b/file.txt\n" \
"index 9432026..e05d36c 100644\n" \
"--- a/file.txt\n" \
"+++ b/file.txt\n" \
"@@ -6 +6 @@ yes it is!\n" \
"-(this line is changed)\n" \
"+(THIS line is changed!)\n" \
"@@ -9 +9 @@ is additional context\n" \
"-below it!\n" \
"+BELOW it! - (THIS line is changed!)\n" \
"\\ No newline at end of file\n"
/* A deletion at the beginning of the file and a change in the middle */ /* A deletion at the beginning of the file and a change in the middle */
#define FILE_DELETE_AND_CHANGE \ #define FILE_DELETE_AND_CHANGE \
......
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