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

2 messages from 2008-11-26 to 2008-11-26. Participants: William Pursell, Junio C Hamano.
Thread: https://gitlist.dev/t/16484

## William Pursell, 2008-11-26 20:51

Subject: [PATCH 2/2] In add --patch, Handle K,k,J,j slightly more gracefully.
Message-ID: <492DB6CE.3010409@gmail.com>
URL: https://gitlist.dev/e/492DB6CE.3010409%40gmail.com

```



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(-)

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, 2008-11-26 21:55

Subject: Re: [PATCH 2/2] In add --patch, Handle K,k,J,j slightly more gracefully.
Message-ID: <7vej0ydue4.fsf@gitster.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vej0ydue4.fsf%40gitster.siamese.dyndns.org
In-Reply-To: <492DB6CE.3010409@gmail.com>

```
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";
        }

> +			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?

```
