Junio C Hamano wrote:
One thing I will not do after such a discussion, unless I am really really interested in having the new feature personally myself, is to go back to the discussion thread and assemble the pieces together to make the final series of patches for inclusion. The responsibility for doing that lies on the original contributor.
That is a perfectly reasonable policy, and I did not intend to suggest that you should do that work. My apologies if it seemed that way. Here is the first of 2 patches to implement the 'g' command. I believe it is complete, but I am not much for user interface. It works for me, but it could be improved upon. (For example, I took your suggestion and disallowed 'g' when there is only one hunk, but the behavior feels clunky, although it is similar to an invalid k/j entry.) From de169b0062ae21f085d1309b4dd7da369029ae7d Mon Sep 17 00:00:00 2001 From: William Pursell <bill.pursell@xxxxxxxxx> Date: Wed, 3 Dec 2008 20:25:31 +0000 Subject: [PATCH 1/2] Add subroutine to display one-line summary of hunks. This commit implements a rather simple-minded mechanism to display a one-line summary of the hunks in an array ref. The display consists of the line numbers and the first changed line, truncated to 80 characters. 20 lines are displayed at a time, and the index of the first undisplayed line is returned, allowing the caller to display more if desired. (The 20 and 80 should be made configurable.) Signed-off-by: William Pursell <bill.pursell@xxxxxxxxx> --- git-add--interactive.perl | 39 +++++++++++++++++++++++++++++++++++++++ 1 files changed, 39 insertions(+), 0 deletions(-) diff --git a/git-add--interactive.perl b/git-add--interactive.perl index b0223c3..daf8d5d 100755 --- a/git-add--interactive.perl +++ b/git-add--interactive.perl @@ -836,6 +836,45 @@ sub patch_update_cmd { } } +# Generate a one line summary of a hunk. +sub summarize_hunk { + my $rhunk = shift; + my $summary = $rhunk->{TEXT}[0]; + + # Keep the line numbers, discard extra context. + $summary =~ s/(@@.*@@).*/$1 /s; + + # Add some user context. (Just take first changed line.) + for my $line (@{$rhunk->{TEXT}}) { + if ($line =~ m/^[+-]/) { + $summary .= $line; + last; + } + } + + return substr ($summary, 0, 80); +} + + +# Print a one-line summary of each hunk in the array ref in +# the first argument, starting wih the index in the 2nd. +sub display_hunks { + my ($hunks, $i) = @_; + my $ctr = 0; + $i = 0 if not $i; + for (; $i < @$hunks && $ctr < 20; $i++, $ctr++) { + my $status = " "; + if (defined $hunks->[$i]{USE}) { + $status = $hunks->[$i]{USE} ? "+" : "-"; + } + printf "%s%2d: %s", + $status, + $i + 1, + summarize_hunk ($hunks->[$i]); + } + return $i; +} + sub patch_update_file { my ($ix, $num); my $path = shift; -- 1.6.1.rc1.37.g83daf.dirty -- William Pursell -- 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