diff options
author | William Pursell <bill.pursell@gmail.com> | 2008-11-27 04:07:57 +0000 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-02-01 19:43:38 -0800 |
commit | dd971cc9d6588307447075b2352127a9e24dd3e1 (patch) | |
tree | a23c1466186d28563879f535f0ffdeee8a073085 /git-add--interactive.perl | |
parent | 57886bc7fb9413becf4c240320d61bf641600762 (diff) | |
download | git-dd971cc9d6588307447075b2352127a9e24dd3e1.tar.gz |
Add / command in add --patch
This command allows the user to skip hunks that don't match the specified
regex.
Signed-off-by: William Pursell <bill.pursell@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-add--interactive.perl')
-rwxr-xr-x | git-add--interactive.perl | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/git-add--interactive.perl b/git-add--interactive.perl index ca50363341..64ad28998e 100755 --- a/git-add--interactive.perl +++ b/git-add--interactive.perl @@ -801,6 +801,7 @@ 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 +/ - search for a hunk matching the given regex 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 @@ -964,7 +965,7 @@ sub patch_update_file { for (@{$hunk[$ix]{DISPLAY}}) { print; } - print colored $prompt_color, "Stage this hunk [y,n,a,d$other,?]? "; + print colored $prompt_color, "Stage this hunk [y,n,a,d,/$other,?]? "; my $line = <STDIN>; if ($line) { if ($line =~ /^y/i) { @@ -1013,6 +1014,31 @@ sub patch_update_file { } next; } + elsif ($line =~ m|^/(.*)|) { + my $search_string; + eval { + $search_string = qr{$1}m; + }; + if ($@) { + my ($err,$exp) = ($@, $1); + $err =~ s/ at .*git-add--interactive line \d+, <STDIN> line \d+.*$//; + print STDERR "Malformed search regexp $exp: $err\n"; + next; + } + my $iy = $ix; + while (1) { + my $text = join ("", @{$hunk[$iy]{TEXT}}); + last if ($text =~ $search_string); + $iy++; + $iy = 0 if ($iy >= $num); + if ($ix == $iy) { + print STDERR "No hunk matches the given pattern\n"; + last; + } + } + $ix = $iy; + next; + } elsif ($other =~ /K/ && $line =~ /^K/) { $ix--; next; |