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:
Junio C Hamano 2008-01-30 13:19:58 -08:00
Родитель 61e08ccacb
Коммит 8441a9a842
1 изменённых файлов: 19 добавлений и 17 удалений

Просмотреть файл

@ -1642,7 +1642,7 @@ static void remove_last_line(struct image *img)
img->len -= img->line[--img->nr].len; 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) unsigned ws_rule)
{ {
/* /*
@ -1659,12 +1659,6 @@ static int apply_line(char *output, const char *patch, int plen,
int need_fix_leading_space = 0; int need_fix_leading_space = 0;
char *buf; char *buf;
if ((ws_error_action != correct_ws_error) || !whitespace_error ||
*patch != '+') {
memcpy(output, patch + 1, plen);
return plen;
}
/* /*
* Strip trailing whitespace * Strip trailing whitespace
*/ */
@ -1821,7 +1815,7 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
while (size > 0) { while (size > 0) {
char first; char first;
int len = linelen(patch, size); int len = linelen(patch, size);
int plen; int plen, added;
int added_blank_line = 0; int added_blank_line = 0;
if (!len) if (!len)
@ -1866,17 +1860,25 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
break; break;
/* Fall-through for ' ' */ /* Fall-through for ' ' */
case '+': case '+':
if (first != '+' || !no_add) { /* --no-add does not add new lines */
int added = apply_line(new, patch, if (first == '+' && no_add)
plen, ws_rule); 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, add_line_info(&postimage, new, added,
(first == '+' ? 0 : LINE_COMMON)); (first == '+' ? 0 : LINE_COMMON));
new += added; new += added;
if (first == '+' && if (first == '+' &&
added == 1 && new[-1] == '\n') added == 1 && new[-1] == '\n')
added_blank_line = 1; added_blank_line = 1;
}
break; break;
case '@': case '\\': case '@': case '\\':
/* Ignore it, we already handled it */ /* Ignore it, we already handled it */