Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2008-01-31 00:19:58 +0300
committerJunio C Hamano <gitster@pobox.com>2008-02-05 11:38:41 +0300
commit8441a9a84278718e9bfd49112dcc55136cea394f (patch)
tree60922b7ea390ca3e8cad1830a1ef45fd90edd6c6 /builtin-apply.c
parent61e08ccacbfdc6046ccabdfdb01f7755ed5ad8b1 (diff)
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>
Diffstat (limited to 'builtin-apply.c')
-rw-r--r--builtin-apply.c38
1 files changed, 20 insertions, 18 deletions
diff --git a/builtin-apply.c b/builtin-apply.c
index 7fb330541f..d0d008fde1 100644
--- a/builtin-apply.c
+++ b/builtin-apply.c
@@ -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));
-
- 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 */