Subject: Re: [PATCH 3/5] apply: whitespace errors in context lines if we have

From: Junio C Hamano <[email-masked]>
Date: Mon, 26 Aug 2024 17:43:39 -0700

Rubén Justo <[email-masked]> writes:

> If the user says `--no-ignore-space-change`, there's no need to
> check for whitespace errors in the context lines.
>
> Don't do it.
>
> Signed-off-by: Rubén Justo <[email-masked]>
> ---
>  apply.c                  | 3 ++-
>  t/t4124-apply-ws-rule.sh | 3 ++-
>  2 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/apply.c b/apply.c
> index 0cb9d38e5a..e1b4d14dba 100644
> --- a/apply.c
> +++ b/apply.c
> @@ -1734,7 +1734,8 @@ static int parse_fragment(struct apply_state *state,
>  			trailing++;
>  			check_old_for_crlf(patch, line, len);
>  			if (!state->apply_in_reverse &&
> -			    state->ws_error_action == correct_ws_error)
> +			    state->ws_error_action == correct_ws_error &&
> +			    state->ws_ignore_action != ignore_ws_none)
>  				check_whitespace(state, line, len, patch->ws_rule);
>  			break;

Hmph.  0a80bc9f (apply: detect and mark whitespace errors in context
lines when fixing, 2015-01-16) deliberately added this check because
we will correct the whitespace breakages on these lines after
parsing the hunk with this function while applying.

It is iffy that this case arm for " " kicks in ONLY when applying in
the forward direction (which is not what you are changing).  When
applying a patch in reverse, " " is still an "unchanged" context
line, so we should be treating it the same way regardless of the
direction.

But at least the call to check_whitespace() from this place when we
are correcting whitespace rule violations is not iffy, as far as I
can tell.

> diff --git a/t/t4124-apply-ws-rule.sh b/t/t4124-apply-ws-rule.sh
> index 573200da67..e12b8333c3 100755
> --- a/t/t4124-apply-ws-rule.sh
> +++ b/t/t4124-apply-ws-rule.sh
> @@ -569,7 +569,8 @@ test_expect_success 'whitespace=fix honors no-ignore-whitespace' '
>  	+A
>  	 BZZ
>  	EOF
> -	git apply --no-ignore-whitespace --whitespace=fix patch
> +	git apply --no-ignore-whitespace --whitespace=fix patch 2>error &&
> +	test_must_be_empty error
>  '
>  
>  test_expect_success 'whitespace check skipped for excluded paths' '