Re: [PATCH] diff: add --no-indicators option
From: Phillip Wood <hidden>
Date: 2025-12-19 10:33:47
Hi Harald On 19/12/2025 08:17, Harald Nordgren via GitGitGadget wrote:
From: Harald Nordgren <redacted> Add --no-indicators to replace '+', '-', and ' ' indicators in the left margin with spaces. Colors are preserved, allowing diffs to be distinguished by color alone. This is useful when copy-pasting diff output, as the indicators no longer need to be manually removed.
But you're still left with a space at the beginning of each line. I'd
have thought it would be better for --no-indicators to just strip the
leading '+', ' ', '-' though that still leaves us with
\ No newline at end of file
should that whole line be stripped as well?
If you just want to replace the indicators with a space then you can
always set up an alias that does
diff --output-indicator-old=' ' --output-indicator-new=' ' \
--output-indicator-context=' '
The --output-indicator-* options error out if you pass an empty string
so you cannot use them to remove the indicators all together.
Thanks
Phillip
quoted hunk ↗ jump to hunk
Signed-off-by: Harald Nordgren <redacted> --- diff: add '--no-indicators' option Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2133%2FHaraldNordgren%2Fno-indicators-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2133/HaraldNordgren/no-indicators-v1 Pull-Request: https://github.com/git/git/pull/2133 diff.c | 17 +++++++++++++++++ t/t4000-diff-format.sh | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+)diff --git a/diff.c b/diff.c index 436da250eb..668ba349fe 100644 --- a/diff.c +++ b/diff.c@@ -5290,6 +5290,20 @@ static int diff_opt_char(const struct option *opt, return 0; } +static int diff_opt_no_indicators(const struct option *opt, + const char *arg, int unset) +{ + struct diff_options *options = opt->value; + + BUG_ON_OPT_NEG(unset); + BUG_ON_OPT_ARG(arg); + + options->output_indicators[OUTPUT_INDICATOR_NEW] = ' '; + options->output_indicators[OUTPUT_INDICATOR_OLD] = ' '; + options->output_indicators[OUTPUT_INDICATOR_CONTEXT] = ' '; + return 0; +} + static int diff_opt_color_moved(const struct option *opt, const char *arg, int unset) {@@ -5828,6 +5842,9 @@ struct option *add_diff_options(const struct option *opts, OPT_INTEGER_F(0, "inter-hunk-context", &options->interhunkcontext, N_("show context between diff hunks up to the specified number of lines"), PARSE_OPT_NONEG), + OPT_CALLBACK_F(0, "no-indicators", options, NULL, + N_("do not show '+', '-' and ' ' indicators in the left margin"), + PARSE_OPT_NONEG | PARSE_OPT_NOARG, diff_opt_no_indicators), OPT_CALLBACK_F(0, "output-indicator-new", &options->output_indicators[OUTPUT_INDICATOR_NEW], N_("<char>"),diff --git a/t/t4000-diff-format.sh b/t/t4000-diff-format.sh index 32b14e3a71..1863553056 100755 --- a/t/t4000-diff-format.sh +++ b/t/t4000-diff-format.sh@@ -95,6 +95,38 @@ test_expect_success 'git diff-files --patch --no-patch does not show the patch' test_must_be_empty err ' +cat >expected_no_indicators <<\EOF +diff --git a/path0 b/path0 +old mode 100644 +new mode 100755 +--- a/path0 ++++ b/path0 +@@ -1,3 +1,3 @@ + Line 1 + Line 2 + line 3 + Line 3 +diff --git a/path1 b/path1 +deleted file mode 100755 +--- a/path1 ++++ /dev/null +@@ -1,3 +0,0 @@ + Line 1 + Line 2 + line 3 +EOF + +test_expect_success 'git diff-files --no-indicators replaces +/- with spaces' ' + git diff-files -p --no-indicators >actual && + compare_diff_patch expected_no_indicators actual +' + +test_expect_success 'git diff-files --no-indicators --color preserves colors' ' + git diff-files -p --no-indicators --color --ws-error-highlight=none >actual.raw && + test_decode_color <actual.raw >actual && + grep -F "<RED> line 3<RESET>" actual && + grep -F "<GREEN> Line 3<RESET>" actual +' # Smudge path2/path3 so that dirstat has something to show date >path2/path3base-commit: c4a0c8845e2426375ad257b6c221a3a7d92ecfda