[PATCH] Teach 'git-apply --whitespace=strip' to remove empty lines at the end of file
From: Marco Costalba <hidden>
Date: 2016-06-15 22:43:11
Subsystem:
the rest · Maintainer:
Linus Torvalds
Signed-off-by: Marco Costalba <redacted> --- 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