apply: use the right attribute for paths in non-Git patches
commitd487b0ba50884fb1fd1767ac8c9adc58066ad999
authorJunio C Hamano <gitster@pobox.com>
Wed, 6 Aug 2014 21:26:24 +0000 (6 14:26 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 7 Aug 2014 19:17:07 +0000 (7 12:17 -0700)
tree50b9d8db8606b6d8e8875051a6583b4a076c2033
parentd31f3ad23dd1aee3c3e1015a43b02b995c01a9a1
apply: use the right attribute for paths in non-Git patches

We parse each patchfile and find the name of the path the patch
applies to, and then use that name to consult the attribute system
to find the whitespace rules to be used, and also the target file
(either in the working tree or in the index) to replay the changes
against.

Unlike a Git-generated patch, a non-Git patch is taken to have the
pathnames relative to the current working directory.  The names
found in such a patch are modified by prepending the prefix by the
prefix_patches() helper function introduced in 56185f49 (git-apply:
require -p<n> when working in a subdirectory., 2007-02-19).

However, this prefixing is done after the patch is fully parsed and
affects only what target files are patched.  Because the attributes
are checked against the names found in the patch during the parsing,
not against the final pathname, the whitespace check that is done
during parsing ends up using attributes for a wrong path for non-Git
patches.

Fix this by doing the prefix much earlier, immediately after the
header part of each patch is parsed and we learn the name of the
path the patch affects.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/apply.c
t/t4119-apply-config.sh