Thread (14 messages) 14 messages, 7 authors, 2025-12-20

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/path3
base-commit: c4a0c8845e2426375ad257b6c221a3a7d92ecfda
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help