Re: [PATCH] git-add--interactive: Preserve diff heading when splitting hunks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ævar Arnfjörð Bjarmason  <avarab@xxxxxxxxx> writes:

> Change the display of hunks in hunk splitting mode to preserve the diff
> heading, which hasn't been done ever since the hunk splitting was
> initially added in v1.4.4.2-270-g835b2ae.
>
> Splitting the first hunk of this patch will now result in:
>
>     Stage this hunk [y,n,q,a,d,/,j,J,g,s,e,?]? s
>     Split into 2 hunks.
>     @@ -792,7 +792,7 @@ sub hunk_splittable {
>     [...]
>
> Instead of:
>
>     Stage this hunk [y,n,q,a,d,/,j,J,g,s,e,?]? s
>     Split into 2 hunks.
>     @@ -792,7 +792,7 @@
>     [...]
>
> This makes it easier to use the tool when you're splitting some giant
> hunk and can't remember in which function you are anymore.

Makes sense to me.

>
> The diff is somewhat larger than I initially expected because in order
> to display the headings in the same color scheme as the output from
> git-diff(1) itself I had to split up the code that would previously
> color diff output that previously consisted entirely of the fraginfo,
> but now consists of the fraginfo and the diff heading (the latter of
> which isn't colored).
>
> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx>
> ---
>  git-add--interactive.perl | 40 ++++++++++++++++++++++++----------------
>  1 file changed, 24 insertions(+), 16 deletions(-)
>
> diff --git a/git-add--interactive.perl b/git-add--interactive.perl
> index 1fadd69..ed1e564 100755
> --- a/git-add--interactive.perl
> +++ b/git-add--interactive.perl
> @@ -792,11 +792,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, $heading) =
> +	    $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, $heading);
>  }
>  
>  sub split_hunk {
> @@ -808,8 +808,7 @@ sub split_hunk {
>  	# If there are context lines in the middle of a 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, $heading) = parse_hunk_header($text->[0]);
>  	my $hunk_start = 1;
>  
>        OUTER:
> @@ -886,17 +885,26 @@ sub split_hunk {
>  		my $o_cnt = $hunk->{OCNT};
>  		my $n_cnt = $hunk->{NCNT};
>  
> -		my $head = ("@@ -$o_ofs" .
> -			    (($o_cnt != 1) ? ",$o_cnt" : '') .
> -			    " +$n_ofs" .
> -			    (($n_cnt != 1) ? ",$n_cnt" : '') .
> -			    " @@\n");
> -		my $display_head = $head;
> -		unshift @{$hunk->{TEXT}}, $head;
> -		if ($diff_use_color) {
> -			$display_head = colored($fraginfo_color, $head);
> -		}
> -		unshift @{$hunk->{DISPLAY}}, $display_head;
> +		my $fraginfo = join(
> +			"",
> +			"@@ -$o_ofs",
> +			(($o_cnt != 1) ? ",$o_cnt" : ''),
> +			" +$n_ofs",
> +			(($n_cnt != 1) ? ",$n_cnt" : ''),
> +			" @@"
> +		);
> +		unshift @{$hunk->{TEXT}}, join(
> +			"",
> +			$fraginfo,
> +			$heading,
> +			"\n"
> +		);
> +		unshift @{$hunk->{DISPLAY}}, join(
> +			"",
> +			$diff_use_color ? colored($fraginfo_color, $fraginfo) : $fraginfo,
> +			$heading,
> +			"\n"
> +		);
>  	}
>  	return @split;
>  }
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]