Signed-off-by: Marco Costalba <mcostalba@xxxxxxxxx> --- This one seems to pass all the tests. builtin-apply.c | 22 ++++++++++++++++++++++ 1 files changed, 22 insertions(+), 0 deletions(-) diff --git a/builtin-apply.c b/builtin-apply.c index 0399743..a96f669 100644 --- a/builtin-apply.c +++ b/builtin-apply.c @@ -1671,6 +1671,7 @@ static int apply_one_fragment(struct buffer_desc *desc, char *new = xmalloc(size); const char *oldlines, *newlines; int oldsize = 0, newsize = 0; + int trailing_added_lines = 0; unsigned long leading, trailing; int pos, lines; @@ -1699,6 +1700,15 @@ static int apply_one_fragment(struct buffer_desc *desc, else if (first == '+') first = '-'; } + /* + * Only fragments that add lines at the bottom + * of a file end with a list of '+' lines + */ + if (first == '+') + trailing_added_lines++; + else + trailing_added_lines = 0; + switch (first) { case '\n': /* Newer GNU diff, empty context line */ @@ -1738,6 +1748,18 @@ static int apply_one_fragment(struct buffer_desc *desc, newsize--; } + if (new_whitespace == strip_whitespace) { + /* Any added empty lines is already cleaned-up here + * becuase of 'strip_whitespace' flag, so just count '\n' + */ + int empty = 0; + while ( empty < trailing_added_lines + && newsize - empty - 2 > 0 + && new[newsize - empty - 2] == '\n') + empty++; + + newsize -= empty; + } oldlines = old; newlines = new; leading = frag->leading; -- 1.5.2.rc3.90.gf33e-dirty - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html