mirror of
https://github.com/git/git.git
synced 2024-11-27 20:14:30 +08:00
git-apply: fix whitespace stripping
The algorithm isn't right here: it accumulates any set of 8 spaces into tabs even if they're separated by tabs, so <four spaces><tab><four spaces><tab> is converted to <tab><tab><tab> when it should be just <tab><tab> So teach git-apply that a tab hides any group of less than 8 previous spaces in a row. Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
ece7b74903
commit
d7416ecac8
@ -1642,15 +1642,22 @@ static int apply_line(char *output, const char *patch, int plen)
|
||||
|
||||
buf = output;
|
||||
if (need_fix_leading_space) {
|
||||
int consecutive_spaces = 0;
|
||||
/* between patch[1..last_tab_in_indent] strip the
|
||||
* funny spaces, updating them to tab as needed.
|
||||
*/
|
||||
for (i = 1; i < last_tab_in_indent; i++, plen--) {
|
||||
char ch = patch[i];
|
||||
if (ch != ' ')
|
||||
if (ch != ' ') {
|
||||
consecutive_spaces = 0;
|
||||
*output++ = ch;
|
||||
else if ((i % 8) == 0)
|
||||
*output++ = '\t';
|
||||
} else {
|
||||
consecutive_spaces++;
|
||||
if (consecutive_spaces == 8) {
|
||||
*output++ = '\t';
|
||||
consecutive_spaces = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
fixed = 1;
|
||||
i = last_tab_in_indent;
|
||||
|
Loading…
Reference in New Issue
Block a user