Ævar Arnfjörð Bjarmason  <ava...@gmail.com> 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 <ava...@gmail.com>
> ---
>  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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to