builtin-apply.c: simplify calling site to apply_line()
The function apply_line() changed its behaviour depending on the ws_error_action, whitespace_error and if the input was a context. Make its caller responsible for such checking so that we can convert the function to copy the contents of line while fixing whitespace breakage more easily. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
61e08ccacb
commit
8441a9a842
@ -1642,7 +1642,7 @@ static void remove_last_line(struct image *img)
|
||||
img->len -= img->line[--img->nr].len;
|
||||
}
|
||||
|
||||
static int apply_line(char *output, const char *patch, int plen,
|
||||
static int copy_wsfix(char *output, const char *patch, int plen,
|
||||
unsigned ws_rule)
|
||||
{
|
||||
/*
|
||||
@ -1659,12 +1659,6 @@ static int apply_line(char *output, const char *patch, int plen,
|
||||
int need_fix_leading_space = 0;
|
||||
char *buf;
|
||||
|
||||
if ((ws_error_action != correct_ws_error) || !whitespace_error ||
|
||||
*patch != '+') {
|
||||
memcpy(output, patch + 1, plen);
|
||||
return plen;
|
||||
}
|
||||
|
||||
/*
|
||||
* Strip trailing whitespace
|
||||
*/
|
||||
@ -1821,7 +1815,7 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
|
||||
while (size > 0) {
|
||||
char first;
|
||||
int len = linelen(patch, size);
|
||||
int plen;
|
||||
int plen, added;
|
||||
int added_blank_line = 0;
|
||||
|
||||
if (!len)
|
||||
@ -1866,17 +1860,25 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
|
||||
break;
|
||||
/* Fall-through for ' ' */
|
||||
case '+':
|
||||
if (first != '+' || !no_add) {
|
||||
int added = apply_line(new, patch,
|
||||
plen, ws_rule);
|
||||
add_line_info(&postimage, new, added,
|
||||
(first == '+' ? 0 : LINE_COMMON));
|
||||
/* --no-add does not add new lines */
|
||||
if (first == '+' && no_add)
|
||||
break;
|
||||
|
||||
new += added;
|
||||
if (first == '+' &&
|
||||
added == 1 && new[-1] == '\n')
|
||||
added_blank_line = 1;
|
||||
if (first != '+' ||
|
||||
!whitespace_error ||
|
||||
ws_error_action != correct_ws_error) {
|
||||
memcpy(new, patch + 1, plen);
|
||||
added = plen;
|
||||
}
|
||||
else {
|
||||
added = copy_wsfix(new, patch, plen, ws_rule);
|
||||
}
|
||||
add_line_info(&postimage, new, added,
|
||||
(first == '+' ? 0 : LINE_COMMON));
|
||||
new += added;
|
||||
if (first == '+' &&
|
||||
added == 1 && new[-1] == '\n')
|
||||
added_blank_line = 1;
|
||||
break;
|
||||
case '@': case '\\':
|
||||
/* Ignore it, we already handled it */
|
||||
|
Loading…
Reference in New Issue
Block a user