From cfd1a9849cdb4b9c7fcd0cb71a28cbdbc3494329 Mon Sep 17 00:00:00 2001 From: Kevin Ballard Date: Wed, 20 Oct 2010 15:17:26 -0700 Subject: diff: handle lines containing only whitespace and tabs better When a line contains nothing but whitespace with at least one tab and the core.whitespace config option contains blank-at-eol, the whitespace on the line is being printed twice, once unhighlighted (unless otherwise matched by one of the other core.whitespace values), and a second time highlighted for blank-at-eol. Update the leading indentation check to stop checking when it reaches the trailing whitespace. Signed-off-by: Kevin Ballard Signed-off-by: Junio C Hamano --- ws.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'ws.c') diff --git a/ws.c b/ws.c index d7b8c33f14..7302f8f5a2 100644 --- a/ws.c +++ b/ws.c @@ -174,8 +174,11 @@ static unsigned ws_check_emit_1(const char *line, int len, unsigned ws_rule, } } + if (trailing_whitespace == -1) + trailing_whitespace = len; + /* Check indentation */ - for (i = 0; i < len; i++) { + for (i = 0; i < trailing_whitespace; i++) { if (line[i] == ' ') continue; if (line[i] != '\t') @@ -218,8 +221,6 @@ static unsigned ws_check_emit_1(const char *line, int len, unsigned ws_rule, * Now the rest of the line starts at "written". * The non-highlighted part ends at "trailing_whitespace". */ - if (trailing_whitespace == -1) - trailing_whitespace = len; /* Emit non-highlighted (middle) segment. */ if (trailing_whitespace - written > 0) { -- cgit v1.2.1