git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/1] diff-highlight: highlight range-diff

From
JGJack Bates via GitGitGadget <gitgitgadget@gmail.com>
Date
Dec 29, 2019, 15:49 UTC
Message-ID
<547b3087ac2e8e05af86b4b9972cef8c20da1cdf.1577634590.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.684.git.git.1577634590.gitgitgadget@gmail.com>
From: Jack Bates <jack@nottheoilrig.com>

Piping `git range-diff` through diff-highlight currently has no effect, for two reasons:

  1. There are ANSI escapes before and after the `@@` hunk headers (when
     color is enabled) which diff-highlight fails to match. One solution
     is to match both escapes (`/^$COLOR*\@\@$COLOR* /`). This patch
     drops the trailing space from the existing pattern instead.
  2. Unlike `git log`, `git range-diff` diffs are indented, which
     diff-highlight also fails to match. This patch allows hunk headers
     preceded by any amount of whitespace, and then skips past that
     indentation when parsing subsequent lines, by reusing the machinery
     that handles the --graph output.
Signed-off-by: Jack Bates <jack@nottheoilrig.com>
---
 contrib/diff-highlight/DiffHighlight.pm | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/contrib/diff-highlight/DiffHighlight.pm b/contrib/diff-highlight/DiffHighlight.pm
index e2589922a6..74f53e53c9 100644
--- a/contrib/diff-highlight/DiffHighlight.pm
+++ b/contrib/diff-highlight/DiffHighlight.pm
@@ -90,7 +90,8 @@ sub handle_line {
 
 	if (!$in_hunk) {
 		$line_cb->($orig);
-		$in_hunk = /^$COLOR*\@\@ /;
+		$in_hunk = /^( *)$COLOR*\@\@/;
+		$graph_indent = length($1);
 	}
 	elsif (/^$COLOR*-/) {
 		push @removed, $orig;
-- 
gitgitgadget
Previous: Jack Bates via GitGitGadgetNext: Jeff King
Message 2 of 3 in “diff-highlight: highlight range-diff”
  1. 0/1 diff-highlight: highlight range-diffJack Bates via GitGitGadget, Dec 29, 2019
  2. 1/1 diff-highlight: highlight range-diffJack Bates via GitGitGadget, Dec 29, 2019
  3. Jeff KingJan 28, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.