Browse Source

Trailing whitespace and no newline fix

If a patch adds a new line to the end of a file and this line ends with
one trailing whitespace character and has no newline, then
'--whitespace=fix' currently does not remove that trailing whitespace.

This patch fixes this by removing the check for trailing whitespace at
the end of the line at a hardcoded offset which does not take the
eventual absence of newline into account.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
SZEDER Gábor 16 years ago committed by Junio C Hamano
parent
commit
735c674416
  1. 18
      t/t4124-apply-ws-rule.sh
  2. 5
      ws.c

18
t/t4124-apply-ws-rule.sh

@ -148,4 +148,22 @@ do
done done
done done


create_patch () {
sed -e "s/_/ /" <<-\EOF
diff --git a/target b/target
index e69de29..8bd6648 100644
--- a/target
+++ b/target
@@ -0,0 +1 @@
+A line with trailing whitespace and no newline_
\ No newline at end of file
EOF
}

test_expect_success 'trailing whitespace & no newline at the end of file' '
>target &&
create_patch | git apply --whitespace=fix - &&
grep "newline$" target
'

test_done test_done

5
ws.c

@ -261,9 +261,8 @@ int ws_fix_copy(char *dst, const char *src, int len, unsigned ws_rule, int *erro
/* /*
* Strip trailing whitespace * Strip trailing whitespace
*/ */
if ((ws_rule & WS_TRAILING_SPACE) && if (ws_rule & WS_TRAILING_SPACE) {
(2 <= len && isspace(src[len-2]))) { if (1 < len && src[len - 1] == '\n') {
if (src[len - 1] == '\n') {
add_nl_to_tail = 1; add_nl_to_tail = 1;
len--; len--;
if (1 < len && src[len - 1] == '\r') { if (1 < len && src[len - 1] == '\r') {

Loading…
Cancel
Save