Skip to content

Commit

Permalink
apply: omit ws check for excluded paths
Browse files Browse the repository at this point in the history
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 the name of
the file the patch applies to and before we start parsing the diff
contained in the patch.

One may naively think that 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 in order to do such a "fast-forward", 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>
  • Loading branch information
Junio C Hamano committed Aug 7, 2014
1 parent 3ee2ad1 commit 477a08a
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 3 deletions.
9 changes: 6 additions & 3 deletions builtin/apply.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
11 changes: 11 additions & 0 deletions t/t4124-apply-ws-rule.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 477a08a

Please sign in to comment.