threads / patch / 16484

patch, 2 partsIn add --patch, Handle K,k,J,j slightly more gracefully.

Subject: [PATCH 2/2] In add --patch, Handle K,k,J,j slightly more gracefully.

## tl;dr

2 messages between Nov 26, 2008 and Nov 26, 2008. Diffs are folded; open one to read it.

replies: 1people: 2as markdown or json

William Pursell· Nov 26, 2008, 20:51 UTC · lore
Instead of printing the help menu, this will print
"No next hunk" and then process the given hunk again.
---
  git-add--interactive.perl |   35 +++++++++++++++++++----------------
  1 files changed, 19 insertions(+), 16 deletions(-)
Show changes to git-add--interactive.perl +19 −16
diff --git a/git-add--interactive.perl b/git-add--interactive.perl
index 7ad4ee0..6321bd9 100755
--- a/git-add--interactive.perl
+++ b/git-add--interactive.perl
@@ -964,29 +964,32 @@ sub patch_update_file {
  			elsif ($line =~ m|^/(.*)|) {
  				$search_s = $1;
  			}
-			elsif ($other =~ /K/ && $line =~ /^K/) {
-				$ix--;
+			elsif ( $line =~ /^K/) {
+				$other =~ /K/ ?  $ix-- : print STDERR "No previous hunk\n";
  				next;
  			}
-			elsif ($other =~ /J/ && $line =~ /^J/) {
-				$ix++;
+			elsif ($line =~ /^J/) {
+				$other =~ /J/ ?  $ix++ : print STDERR "No next hunk\n";
  				next;
  			}
-			elsif ($other =~ /k/ && $line =~ /^k/) {
-				while (1) {
-					$ix--;
-					last if (!$ix ||
-						 !defined $hunk[$ix]{USE});
+			elsif ($line =~ /^k/) {
+				if ($other =~ /k/) {
+					while (1) {
+						$ix--;
+						last if (!$ix ||
+							 !defined $hunk[$ix]{USE});
+					}
+					next;
+				}
+				else {
+					print STDERR "No previous hunk\n";
  				}
-				next;
  			}
-			elsif ($other =~ /j/ && $line =~ /^j/) {
-				while (1) {
-					$ix++;
-					last if ($ix >= $num ||
-						 !defined $hunk[$ix]{USE});
+			elsif ($line =~ /^j/) {
+				if ($other !~ /j/) {
+					print STDERR "No next hunk\n";
+					next;
  				}
-				next;
  			}
  			elsif ($other =~ /s/ && $line =~ /^s/) {
  				my @split = split_hunk($hunk[$ix]{TEXT}, $hunk[$ix]{DISPLAY});
-- 
1.6.0.4.781.gf2070.dirty


-- 
William Pursell
Junio C Hamano· Nov 26, 2008, 21:55 UTC · re: William Pursell · lore

Re: [PATCH 2/2] In add --patch, Handle K,k,J,j slightly more gracefully.

William Pursell <bill.pursell@gmail.com> writes:
> Instead of printing the help menu, this will print
> "No next hunk" and then process the given hunk again.
> ---
Missing sign-off.
> -			elsif ($other =~ /K/ && $line =~ /^K/) {
> -				$ix--;
> +			elsif ( $line =~ /^K/) {
> +				$other =~ /K/ ?  $ix-- : print STDERR "No previous hunk\n";
This may be cute but I think it is harder to read than necessary.
	if ($other =~ /K/) {
        	$ix--;
        } else {
		print STDERR "No previous hunk\n";
        }
Show 20 quoted lines
> +			elsif ($line =~ /^k/) {
> +				if ($other =~ /k/) {
> +					while (1) {
> +						$ix--;
> +						last if (!$ix ||
> +							 !defined $hunk[$ix]{USE});
> +					}
> +					next;
> +				}
> +				else {
> +					print STDERR "No previous hunk\n";
>  				}
> -				next;
>  			}
> +			elsif ($line =~ /^j/) {
> +				if ($other !~ /j/) {
> +					print STDERR "No next hunk\n";
> +					next;
>  				}
>  			}

Doesn't this behave differently against an unavailable 'k' and 'j'? When the user says 'j' when no next hunk is available, it will ask again about that hunk, but when the user says 'k' at the first hunk, because you discarded 'next', it will ask about the next hunk, no? Shouldn't it ask again about the same hunk, against which the user gave an erroneous input?

← back to recent threads