Merge branch 'wp/add-patch-find'
* wp/add-patch-find: add -p: trap Ctrl-D in 'goto' mode add -p: change prompt separator for 'g' In add --patch, Handle K,k,J,j slightly more gracefully. Add / command in add --patch git-add -i/-p: Change prompt separater from slash to comma
This commit is contained in:
commit
d3f552b674
@ -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
|
||||
@ -929,25 +930,25 @@ sub patch_update_file {
|
||||
for ($i = 0; $i < $ix; $i++) {
|
||||
if (!defined $hunk[$i]{USE}) {
|
||||
$prev = 1;
|
||||
$other .= '/k';
|
||||
$other .= ',k';
|
||||
last;
|
||||
}
|
||||
}
|
||||
if ($ix) {
|
||||
$other .= '/K';
|
||||
$other .= ',K';
|
||||
}
|
||||
for ($i = $ix + 1; $i < $num; $i++) {
|
||||
if (!defined $hunk[$i]{USE}) {
|
||||
$next = 1;
|
||||
$other .= '/j';
|
||||
$other .= ',j';
|
||||
last;
|
||||
}
|
||||
}
|
||||
if ($ix < $num - 1) {
|
||||
$other .= '/J';
|
||||
$other .= ',J';
|
||||
}
|
||||
if ($num > 1) {
|
||||
$other .= '/g';
|
||||
$other .= ',g';
|
||||
}
|
||||
for ($i = 0; $i < $num; $i++) {
|
||||
if (!defined $hunk[$i]{USE}) {
|
||||
@ -958,13 +959,13 @@ sub patch_update_file {
|
||||
last if (!$undecided);
|
||||
|
||||
if (hunk_splittable($hunk[$ix]{TEXT})) {
|
||||
$other .= '/s';
|
||||
$other .= ',s';
|
||||
}
|
||||
$other .= '/e';
|
||||
$other .= ',e';
|
||||
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) {
|
||||
@ -993,6 +994,9 @@ sub patch_update_file {
|
||||
}
|
||||
print "go to which hunk$extra? ";
|
||||
$response = <STDIN>;
|
||||
if (!defined $response) {
|
||||
$response = '';
|
||||
}
|
||||
chomp $response;
|
||||
}
|
||||
if ($response !~ /^\s*\d+\s*$/) {
|
||||
@ -1013,30 +1017,68 @@ sub patch_update_file {
|
||||
}
|
||||
next;
|
||||
}
|
||||
elsif ($other =~ /K/ && $line =~ /^K/) {
|
||||
$ix--;
|
||||
next;
|
||||
}
|
||||
elsif ($other =~ /J/ && $line =~ /^J/) {
|
||||
$ix++;
|
||||
next;
|
||||
}
|
||||
elsif ($other =~ /k/ && $line =~ /^k/) {
|
||||
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 ($line =~ /^K/) {
|
||||
if ($other =~ /K/) {
|
||||
$ix--;
|
||||
last if (!$ix ||
|
||||
!defined $hunk[$ix]{USE});
|
||||
}
|
||||
else {
|
||||
print STDERR "No previous hunk\n";
|
||||
}
|
||||
next;
|
||||
}
|
||||
elsif ($other =~ /j/ && $line =~ /^j/) {
|
||||
while (1) {
|
||||
elsif ($line =~ /^J/) {
|
||||
if ($other =~ /J/) {
|
||||
$ix++;
|
||||
last if ($ix >= $num ||
|
||||
!defined $hunk[$ix]{USE});
|
||||
}
|
||||
else {
|
||||
print STDERR "No next hunk\n";
|
||||
}
|
||||
next;
|
||||
}
|
||||
elsif ($line =~ /^k/) {
|
||||
if ($other =~ /k/) {
|
||||
while (1) {
|
||||
$ix--;
|
||||
last if (!$ix ||
|
||||
!defined $hunk[$ix]{USE});
|
||||
}
|
||||
}
|
||||
else {
|
||||
print STDERR "No previous hunk\n";
|
||||
}
|
||||
next;
|
||||
}
|
||||
elsif ($line =~ /^j/) {
|
||||
if ($other !~ /j/) {
|
||||
print STDERR "No next hunk\n";
|
||||
next;
|
||||
}
|
||||
}
|
||||
elsif ($other =~ /s/ && $line =~ /^s/) {
|
||||
my @split = split_hunk($hunk[$ix]{TEXT}, $hunk[$ix]{DISPLAY});
|
||||
if (1 < @split) {
|
||||
|
Loading…
Reference in New Issue
Block a user