Show 20 quoted lines
> 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.Show 80 quoted lines
>
> 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@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;
> }