зеркало из https://github.com/microsoft/git.git
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:
Родитель
ece7b74903
Коммит
d7416ecac8
|
@ -1642,15 +1642,22 @@ static int apply_line(char *output, const char *patch, int plen)
|
||||||
|
|
||||||
buf = output;
|
buf = output;
|
||||||
if (need_fix_leading_space) {
|
if (need_fix_leading_space) {
|
||||||
|
int consecutive_spaces = 0;
|
||||||
/* between patch[1..last_tab_in_indent] strip the
|
/* between patch[1..last_tab_in_indent] strip the
|
||||||
* funny spaces, updating them to tab as needed.
|
* funny spaces, updating them to tab as needed.
|
||||||
*/
|
*/
|
||||||
for (i = 1; i < last_tab_in_indent; i++, plen--) {
|
for (i = 1; i < last_tab_in_indent; i++, plen--) {
|
||||||
char ch = patch[i];
|
char ch = patch[i];
|
||||||
if (ch != ' ')
|
if (ch != ' ') {
|
||||||
|
consecutive_spaces = 0;
|
||||||
*output++ = ch;
|
*output++ = ch;
|
||||||
else if ((i % 8) == 0)
|
} else {
|
||||||
|
consecutive_spaces++;
|
||||||
|
if (consecutive_spaces == 8) {
|
||||||
*output++ = '\t';
|
*output++ = '\t';
|
||||||
|
consecutive_spaces = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fixed = 1;
|
fixed = 1;
|
||||||
i = last_tab_in_indent;
|
i = last_tab_in_indent;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче