Re: [PATCH v3 00/11] Fix color handling in git add -i
From: Jeff King <hidden>
Date: 2020-11-17 02:05:43
Subsystem:
the rest · Maintainer:
Linus Torvalds
On Mon, Nov 16, 2020 at 08:51:49PM -0500, Jeff King wrote:
On Mon, Nov 16, 2020 at 04:08:21PM +0000, Johannes Schindelin via GitGitGadget wrote:quoted
Changes since v2: * The commit messages of patches 7/11 and 9/11 now stress why we want to align the output of the Perl vs the built-in version so slavishly: to be able to validate both versions against prerecorded output. * A typo was fixed in the commit message of patch 10/11.This version looks fine to me, and I agree is a good stopping point for now (the only thing I'd consider adding is a test for the funcname in a split-hunk header, but it would have to be expect_failure for now; it is probably not worth the effort to rewrite the perl version to behave like the builtin here if we think it's going away soon).
Actually, I couldn't resist (but again, I don't think this has to be part of your series):
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index e713fe3d02..90561ea0e2 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl@@ -30,6 +30,10 @@ $diff_use_color ? ( $repo->get_color('color.diff.frag', 'cyan'), ) : (); +my ($funcname_color) = + $diff_use_color ? ( + $repo->get_color('color.diff.func', ''), + ) : (); my ($diff_plain_color) = $diff_use_color ? ( $repo->get_color('color.diff.plain', ''),
@@ -780,11 +784,11 @@ sub hunk_splittable { sub parse_hunk_header { my ($line) = @_; - my ($o_ofs, $o_cnt, $n_ofs, $n_cnt) = - $line =~ /^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/; + my ($o_ofs, $o_cnt, $n_ofs, $n_cnt, $funcname) = + $line =~ /^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@ ?(.*)/; $o_cnt = 1 unless defined $o_cnt; $n_cnt = 1 unless defined $n_cnt; - return ($o_ofs, $o_cnt, $n_ofs, $n_cnt); + return ($o_ofs, $o_cnt, $n_ofs, $n_cnt, $funcname); } sub format_hunk_header {
@@ -806,7 +810,8 @@ sub split_hunk { # it can be split, but we would need to take care of # overlaps later. - my ($o_ofs, undef, $n_ofs) = parse_hunk_header($text->[0]); + my ($o_ofs, undef, $n_ofs, undef, $funcname) = + parse_hunk_header($text->[0]); my $hunk_start = 1; OUTER:
@@ -894,6 +899,11 @@ sub split_hunk { if ($diff_use_color) { $display_head = colored($fraginfo_color, $head); } + if (length $funcname) { + my $f = colored($funcname_color, $funcname); + $display_head =~ s/$/ $f/; + $funcname = ''; + } unshift @{$hunk->{DISPLAY}}, $display_head; } return @split;