Re: [PATCH] diff: add --no-indicators option
- From
- Phillip Wood <phillip.wood123@gmail.com>
- Date
- Dec 19, 2025, 10:33 UTC
- Message-ID
- <035238d7-f98a-4072-a363-9a57650abb95@gmail.com>
- In-Reply-To
- <pull.2133.git.git.1766132264231.gitgitgadget@gmail.com>
Hi Harald
On 19/12/2025 08:17, Harald Nordgren via GitGitGadget wrote:
Show 8 quoted lines
> From: Harald Nordgren <haraldnordgren@gmail.com> > > 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
Show 92 quoted lines
> Signed-off-by: Harald Nordgren <haraldnordgren@gmail.com>
> ---
> 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/path3
>
> base-commit: c4a0c8845e2426375ad257b6c221a3a7d92ecfda