зеркало из https://github.com/microsoft/git.git
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:
Родитель
61e08ccacb
Коммит
8441a9a842
|
@ -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 */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче