From: Phillip Wood Date: Fri, 19 Dec 2025 10:33:40 GMT Subject: Re: [PATCH] diff: add --no-indicators option Message-ID: <035238d7-f98a-4072-a363-9a57650abb95@gmail.com> In-Reply-To: Hi Harald On 19/12/2025 08:17, Harald Nordgren via GitGitGadget wrote: > From: Harald Nordgren > > 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 > Signed-off-by: Harald Nordgren > --- > 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_(""), > 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 && > + grep -F " line 3" actual && > + grep -F " Line 3" actual > +' > > # Smudge path2/path3 so that dirstat has something to show > date >path2/path3 > > base-commit: c4a0c8845e2426375ad257b6c221a3a7d92ecfda