Re: summaries in git add --patch[PATCH 2/2]
From: William Pursell <hidden>
Date: 2016-06-15 22:45:44
Subsystem:
the rest · Maintainer:
Linus Torvalds
Possibly related (same subject, not in this thread)
- 2016-06-15 · Re: summaries in git add --patch[PATCH 2/2] · William Pursell <hidden>
- 2016-06-15 · Re: summaries in git add --patch[PATCH 2/2] · William Pursell <hidden>
- 2016-06-15 · Re: summaries in git add --patch[PATCH 2/2] · Junio C Hamano <hidden>
Junio C Hamano wrote:
William Pursell [off-list ref] writes:
quoted
Signed-off-by: William Pursell <redacted> ---It is customary to explain what you changed since v1 here, after the three-dash separator, to help reviewers.
Thanks for pointing that out.
quoted
+ elsif ($other =~ 'g' && $line =~ /^g(.*)/) {I think I fixed this with ($other =~ /g/ && ...) when I queued your previous round to 'pu' tonight.
I didn't notice that the first time around. Fixed here.
quoted
+ my $response = $1; + my $i = $ix > 10 ? $ix - 10 : 0;This is different from v1. I understand the motivation (i.e. if you are at 73rd hunk of a 100-hunk series, showing hunks 63-83 instead of starting from hunk 1-10 would be nicer), but that is something to explain as one of the "changes since v1". I think you are inside a loop that is controlled by another $i (see the context in the hunk before this one) and it would be better to use different variable, such as $hunk_no (or just $no).
Agreed. Masking enclosing variables is a no-no.
From 03ae1932337c15cdd20e0d8370782a6343efc5aa Mon Sep 17 00:00:00 2001
From: William Pursell <redacted>
Date: Thu, 4 Dec 2008 10:22:40 +0000
Subject: [PATCH 2/2] Add 'g' command to go to a hunk.
When a minor change is made while the working directory is in a bit
of a mess, it is somewhat difficult to wade through all of the
hunks using git add --patch. This allows one to jump to the hunk
that needs to be staged without having to respond 'n' to each
preceding hunk.
Signed-off-by: William Pursell <redacted>
---
changes since v1:
start the summary list from current hunk - 10 rather than 0
replace a statement modifier with a conditional block, for readability
clean up the prompt, so "(<ret> to see more)" appears before '?'
allow trailing whitespace in the user response
changes since v2:
s/goto/go to/
s|=~ 'g'|=~ /g/|
change loop index name from $i to $no, as $i masks a name in the enclosing
scope
git-add--interactive.perl | 26 ++++++++++++++++++++++++++
1 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index eb11132..ca60356 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl@@ -800,6 +800,7 @@ y - stage this hunk n - do not stage this hunk a - stage this and all the remaining hunks in the file d - do not stage this hunk nor any of the remaining hunks in the file +g - select a hunk to go to j - leave this hunk undecided, see next undecided hunk J - leave this hunk undecided, see next hunk k - leave this hunk undecided, see previous undecided hunk
@@ -945,6 +946,9 @@ sub patch_update_file { if ($ix < $num - 1) { $other .= '/J'; } + if ($num > 1) { + $other .= '/g'; + } for ($i = 0; $i < $num; $i++) { if (!defined $hunk[$i]{USE}) { $undecided = 1;
@@ -978,6 +982,28 @@ sub patch_update_file { } next; } + elsif ($other =~ /g/ && $line =~ /^g(.*)/) { + my $response = $1; + my $no = $ix > 10 ? $ix - 10 : 0; + while ($response eq '') { + my $extra = ""; + $no = display_hunks(\@hunk, $no); + if ($no < $num) { + $extra = " (<ret> to see more)"; + } + print "go to which hunk$extra? "; + $response = <STDIN>; + chomp $response; + } + if ($response !~ /^\s*\d+\s*$/) { + print STDERR "Invalid number: '$response'\n"; + } elsif (0 < $response && $response <= $num) { + $ix = $response - 1; + } else { + print STDERR "Sorry, only $num hunks available.\n"; + } + next; + } elsif ($line =~ /^d/i) { while ($ix < $num) { if (!defined $hunk[$ix]{USE}) {
--
1.6.1.rc1.37.g83daf.dirty
--
William Pursell