This command allows the user to skip hunks that don't match the specified regex. BUG: if the user enters an invalid regex, perl will abort. For example: /+\s*foo will abort with: Quantifier follows nothing in regex I am not a Perl hacker and would welcome suggestions on the easiest way to deal with this. Signed-off-by: William Pursell <bill.pursell@xxxxxxxxx> --- git-add--interactive.perl | 27 +++++++++++++++++++++++---- 1 files changed, 23 insertions(+), 4 deletions(-) diff --git a/git-add--interactive.perl b/git-add--interactive.perl index f20b880..547b5c8 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 +/ - 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 @@ -876,12 +877,14 @@ sub patch_update_file { $num = scalar @hunk; $ix = 0; + my $search_s; # User entered string to match a hunk. while (1) { my ($prev, $next, $other, $undecided, $i); $other = ''; if ($num <= $ix) { + undef $search_s; $ix = 0; } for ($i = 0; $i < $ix; $i++) { @@ -916,11 +919,24 @@ sub patch_update_file { $other .= ',s'; } $other .= ',e'; - for (@{$hunk[$ix]{DISPLAY}}) { - print; + + my $line; + if (defined $search_s) { + my $text = join ("", @{$hunk[$ix]{DISPLAY}}); + if ($text !~ $search_s) { + $line = "j\n"; + } else { + print $text; + } + } else { + for (@{$hunk[$ix]{DISPLAY}}) { + print; + } + } + if (!$line) { + print colored $prompt_color, "Stage this hunk [y,n,a,d,/$other,?]? "; + $line = <STDIN>; } - print colored $prompt_color, "Stage this hunk [y,n,a,d$other,?]? "; - my $line = <STDIN>; if ($line) { if ($line =~ /^y/i) { $hunk[$ix]{USE} = 1; @@ -946,6 +962,9 @@ sub patch_update_file { } next; } + elsif ($line =~ m|^/(.*)|) { + $search_s = qr{$1}m; + } elsif ($other =~ /K/ && $line =~ /^K/) { $ix--; next; -- 1.6.0.4.782.geea74.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