Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
git-apply: fix whitespace stripping
author
J. Bruce Fields
<bfields@citi.umich.edu>
Sun, 16 Sep 2007 22:49:00 +0000
(18:49 -0400)
committer
Junio C Hamano
<gitster@pobox.com>
Mon, 17 Sep 2007 09:18:44 +0000
(
02:18
-0700)
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>
builtin-apply.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
ece7b74
)
diff --git
a/builtin-apply.c
b/builtin-apply.c
index f4ecf03ed465c942a395f4de5ca3ce17bbdd3011..5ad371424b8019a97d1fb34045bb8e32134870aa 100644
(file)
--- a/
builtin-apply.c
+++ b/
builtin-apply.c
@@
-1642,15
+1642,22
@@
static int apply_line(char *output, const char *patch, int plen)
buf = output;
if (need_fix_leading_space) {
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];
/* 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;
*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;
}
fixed = 1;
i = last_tab_in_indent;