From: Junio C Hamano <gitster@pobox.com>
To: git@vger.kernel.org
Cc: Christian Brabandt <cblists@256bit.org>
Subject: [PATCH v2 4/4] diff.c: --ws-check-deleted option
Date: Tue, 26 May 2015 12:46:24 -0700 [thread overview]
Message-ID: <1432669584-342-5-git-send-email-gitster@pobox.com> (raw)
In-Reply-To: <1432669584-342-1-git-send-email-gitster@pobox.com>
Traditionally, we only cared about whitespace breakages introduced
in new lines. Some people want to paint whitespace breakages on old
lines, too. When they see a whitespace breakage on a new line, they
can spot the same kind of whitespace breakage on the corresponding
old line and want to say "Ah, those breakages are there but they
were inherited from the original, so let's not touch them for now."
Enable such use case with the new option, "--ws-check-deleted".
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
Documentation/diff-options.txt | 7 +++++
diff.c | 21 +++++++++++++-
diff.h | 1 +
t/t4015-diff-whitespace.sh | 62 ++++++++++++++++++++++++++++++++++++++++++
4 files changed, 90 insertions(+), 1 deletion(-)
diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt
index 6cb083a..701c087 100644
--- a/Documentation/diff-options.txt
+++ b/Documentation/diff-options.txt
@@ -278,6 +278,13 @@ ifndef::git-format-patch[]
initial indent of the line are considered whitespace errors.
Exits with non-zero status if problems are found. Not compatible
with --exit-code.
+
+--ws-check-deleted::
+--no-ws-check-deleted::
+ Highlight whitespace errors in deleted lines in the color
+ specified by `color.diff.whitespace`, as well as in added
+ lines.
+
endif::git-format-patch[]
--full-index::
diff --git a/diff.c b/diff.c
index 75b1342..30eeaea 100644
--- a/diff.c
+++ b/diff.c
@@ -503,8 +503,22 @@ static void emit_del_line(const char *reset,
const char *line, int len)
{
const char *set = diff_get_color(ecbdata->color_diff, DIFF_FILE_OLD);
+ const char *ws = NULL;
- emit_line_0(ecbdata->opt, set, reset, '-', line, len);
+ if (ecbdata->opt->ws_check_deleted) {
+ ws = diff_get_color(ecbdata->color_diff, DIFF_WHITESPACE);
+ if (!*ws)
+ ws = NULL;
+ }
+
+ if (!ws)
+ emit_line_0(ecbdata->opt, set, reset, '-', line, len);
+ else {
+ /* Emit just the prefix, then the rest. */
+ emit_line_0(ecbdata->opt, set, reset, '-', "", 0);
+ ws_check_emit(line, len, ecbdata->ws_rule,
+ ecbdata->opt->file, set, reset, ws);
+ }
}
static void emit_hunk_header(struct emit_callback *ecbdata,
@@ -3823,6 +3837,11 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
else if (skip_prefix(arg, "--submodule=", &arg))
return parse_submodule_opt(options, arg);
+ else if (!strcmp(arg, "--ws-check-deleted"))
+ options->ws_check_deleted = 1;
+ else if (!strcmp(arg, "--no-ws-check-deleted"))
+ options->ws_check_deleted = 0;
+
/* misc options */
else if (!strcmp(arg, "-z"))
options->line_termination = 0;
diff --git a/diff.h b/diff.h
index b4a624d..ba6cf1a 100644
--- a/diff.h
+++ b/diff.h
@@ -137,6 +137,7 @@ struct diff_options {
int dirstat_permille;
int setup;
int abbrev;
+ int ws_check_deleted;
const char *prefix;
int prefix_length;
const char *stat_sep;
diff --git a/t/t4015-diff-whitespace.sh b/t/t4015-diff-whitespace.sh
index 4da30e5..8f35475 100755
--- a/t/t4015-diff-whitespace.sh
+++ b/t/t4015-diff-whitespace.sh
@@ -838,4 +838,66 @@ test_expect_success 'diff that introduces a line with only tabs' '
test_cmp expected current
'
+test_expect_success 'diff that introduces and removes ws breakages' '
+ git reset --hard &&
+ {
+ echo "0. blank-at-eol " &&
+ echo "1. blank-at-eol "
+ } >x &&
+ git commit -a --allow-empty -m preimage &&
+ {
+ echo "0. blank-at-eol " &&
+ echo "1. still-blank-at-eol " &&
+ echo "2. and a new line "
+ } >x &&
+
+ git -c color.diff=always diff |
+ test_decode_color >current &&
+
+ cat >expected <<-\EOF &&
+ <BOLD>diff --git a/x b/x<RESET>
+ <BOLD>index d0233a2..700886e 100644<RESET>
+ <BOLD>--- a/x<RESET>
+ <BOLD>+++ b/x<RESET>
+ <CYAN>@@ -1,2 +1,3 @@<RESET>
+ 0. blank-at-eol <RESET>
+ <RED>-1. blank-at-eol <RESET>
+ <GREEN>+<RESET><GREEN>1. still-blank-at-eol<RESET><BLUE> <RESET>
+ <GREEN>+<RESET><GREEN>2. and a new line<RESET><BLUE> <RESET>
+ EOF
+
+ test_cmp expected current
+'
+
+test_expect_success 'the same with --ws-check-deleted' '
+ git reset --hard &&
+ {
+ echo "0. blank-at-eol " &&
+ echo "1. blank-at-eol "
+ } >x &&
+ git commit -a --allow-empty -m preimage &&
+ {
+ echo "0. blank-at-eol " &&
+ echo "1. still-blank-at-eol " &&
+ echo "2. and a new line "
+ } >x &&
+
+ git -c color.diff=always diff --ws-check-deleted |
+ test_decode_color >current &&
+
+ cat >expected <<-\EOF &&
+ <BOLD>diff --git a/x b/x<RESET>
+ <BOLD>index d0233a2..700886e 100644<RESET>
+ <BOLD>--- a/x<RESET>
+ <BOLD>+++ b/x<RESET>
+ <CYAN>@@ -1,2 +1,3 @@<RESET>
+ 0. blank-at-eol <RESET>
+ <RED>-<RESET><RED>1. blank-at-eol<RESET><BLUE> <RESET>
+ <GREEN>+<RESET><GREEN>1. still-blank-at-eol<RESET><BLUE> <RESET>
+ <GREEN>+<RESET><GREEN>2. and a new line<RESET><BLUE> <RESET>
+ EOF
+
+ test_cmp expected current
+'
+
test_done
--
2.4.1-511-gc1146d5
next prev parent reply other threads:[~2015-05-26 19:46 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-25 21:11 Mark trailing whitespace error in del lines of diff Christian Brabandt, Christian Brabandt
2015-05-25 22:22 ` brian m. carlson
2015-05-25 23:27 ` Junio C Hamano
2015-05-25 23:52 ` brian m. carlson
2015-05-26 16:29 ` Christian Brabandt
2015-05-26 17:26 ` Junio C Hamano
2015-05-26 17:34 ` Junio C Hamano
2015-05-26 17:39 ` Christian Brabandt
2015-05-26 17:48 ` Junio C Hamano
2015-05-26 18:21 ` Christian Brabandt
2015-05-26 19:46 ` [PATCH v2 0/5] showing existing ws breakage Junio C Hamano
2015-05-26 19:46 ` [PATCH v2 1/4] t4015: modernise style Junio C Hamano
2015-05-26 19:46 ` [PATCH v2 2/4] t4015: separate common setup and per-test expectation Junio C Hamano
2015-05-26 19:46 ` [PATCH v2 3/4] diff.c: add emit_del_line() and update callers of emit_line_0() Junio C Hamano
2015-05-26 19:46 ` Junio C Hamano [this message]
2015-05-27 6:30 ` [PATCH v3 0/4] showing existing ws breakage Junio C Hamano
2015-05-27 6:30 ` [PATCH v3 1/4] t4015: modernise style Junio C Hamano
2015-05-27 6:30 ` [PATCH v3 2/4] t4015: separate common setup and per-test expectation Junio C Hamano
2015-05-27 6:30 ` [PATCH v3 3/4] diff.c: add emit_del_line() and emit_context_line() Junio C Hamano
2015-05-27 6:30 ` [PATCH v3 4/4] diff.c: --ws-error-highlight=<kind> option Junio C Hamano
2015-05-27 7:22 ` [PATCH v3 0/4] showing existing ws breakage Jeff King
2015-05-27 18:57 ` Junio C Hamano
2015-05-27 20:36 ` Jeff King
2015-05-27 20:46 ` Junio C Hamano
2015-05-27 20:48 ` Jeff King
2015-05-27 20:53 ` Junio C Hamano
2015-05-27 20:51 ` Jeff King
2015-05-26 0:24 ` Mark trailing whitespace error in del lines of diff Junio C Hamano
2015-05-26 16:31 ` Christian Brabandt
2015-05-26 17:33 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1432669584-342-5-git-send-email-gitster@pobox.com \
--to=gitster@pobox.com \
--cc=cblists@256bit.org \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).