git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 3/3] apply: omit ws check for excluded paths

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 6, 2014, 22:58 UTC
Message-ID
<1407365885-1628-4-git-send-email-gitster@pobox.com>
In-Reply-To
<1407365885-1628-1-git-send-email-gitster@pobox.com>

Whitespace breakages are checked while the patch is being parsed. Disable them at the beginning of parse_chunk(), where each individual patch is parsed, immediately after we learn what path the patch applies to and before we start parsing the changes.

One may naively think we should be able to not just skip the whitespace checks but simply fast-forward to the next patch without doing anything once use_patch() tells us that this patch is not going to be used. But in reality we cannot really skip much of the parsing, primarily because parsing "@@ -k,l +m,n @@" lines and counting the input lines is how we determine the boundaries of individual patches.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 builtin/apply.c          |  9 ++++++---
 t/t4124-apply-ws-rule.sh | 11 +++++++++++
 2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/builtin/apply.c b/builtin/apply.c
index bf075cc..13319e8 100644
--- a/builtin/apply.c
+++ b/builtin/apply.c
@@ -1997,9 +1997,12 @@ static int parse_chunk(char *buffer, unsigned long size, struct patch *patch)
 
 	prefix_patch(patch);
 
-	patch->ws_rule = whitespace_rule(patch->new_name
-					 ? patch->new_name
-					 : patch->old_name);
+	if (!use_patch(patch))
+		patch->ws_rule = 0;
+	else
+		patch->ws_rule = whitespace_rule(patch->new_name
+						 ? patch->new_name
+						 : patch->old_name);
 
 	patchsize = parse_single_patch(buffer + offset + hdrsize,
 				       size - offset - hdrsize, patch);
diff --git a/t/t4124-apply-ws-rule.sh b/t/t4124-apply-ws-rule.sh
index 5d0c598..c6474de 100755
--- a/t/t4124-apply-ws-rule.sh
+++ b/t/t4124-apply-ws-rule.sh
@@ -512,4 +512,15 @@ test_expect_success 'whitespace=fix to expand' '
 	git -c core.whitespace=tab-in-indent apply --whitespace=fix patch
 '
 
+test_expect_success 'whitespace check skipped for excluded paths' '
+	git config core.whitespace blank-at-eol &&
+	>used &&
+	>unused &&
+	git add used unused &&
+	echo "used" >used &&
+	echo "unused " >unused &&
+	git diff-files -p used unused >patch &&
+	git apply --include=used --stat --whitespace=error <patch
+'
+
 test_done
-- 
2.1.0-rc1-209-g4e1b551
Previous: Junio C Hamano
Message 6 of 6 in “Bug v1.9.3: Spurious whitespace warnings when using git apply with the --exclude option”
  1. Peyton RandolphAug 6, 2014
  2. Junio C HamanoAug 6, 2014
  3. 0/3 Two fixes to "git apply"Junio C Hamano, Aug 6, 2014
  4. 1/3 apply: use the right attribute for paths in non-Git patchesJunio C Hamano, Aug 6, 2014
  5. 2/3 apply: hoist use_patch() helper for path exclusion upJunio C Hamano, Aug 6, 2014
  6. 3/3 apply: omit ws check for excluded pathsJunio C Hamano, Aug 6, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.