Browse Source

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>
maint
Junio C Hamano 17 years ago
parent
commit
8441a9a842
  1. 38
      builtin-apply.c

38
builtin-apply.c

@ -1642,7 +1642,7 @@ static void remove_last_line(struct image *img) @@ -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, @@ -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, @@ -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, @@ -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));

new += added;
if (first == '+' &&
added == 1 && new[-1] == '\n')
added_blank_line = 1;
/* --no-add does not add new lines */
if (first == '+' && no_add)
break;

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…
Cancel
Save