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: > > > 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;