git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 1/3] git-apply: fix whitespace stripping

From
JFJ. Bruce Fields <bfields@citi.umich.edu>
Date
Sep 16, 2007, 22:49 UTC
Message-ID
<11899829424173-git-send-email-bfields@citi.umich.edu>
In-Reply-To
<11899829424040-git-send-email-bfields@citi.umich.edu>

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>
---
 builtin-apply.c |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/builtin-apply.c b/builtin-apply.c
index 976ec77..70359c1 100644
--- 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) {
+		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;
-- 
1.5.3.1.42.gfe5df
Previous: J. Bruce FieldsNext: J. Bruce Fields
Message 2 of 16 in “whitespace-stripping”
  1. J. Bruce FieldsSep 16, 2007
  2. 1/3 git-apply: fix whitespace strippingJ. Bruce Fields, Sep 16, 2007
  3. 2/3 git-apply: complain about >=8 consecutive spaces in initial indentJ. Bruce Fields, Sep 16, 2007
  4. 3/3 git-apply: add tests for stripping of leading and trailing whitespaceJ. Bruce Fields, Sep 16, 2007
  5. Krzysztof HalasaSep 17, 2007
  6. J. Bruce FieldsSep 17, 2007
  7. Krzysztof HalasaSep 17, 2007
  8. J. Bruce FieldsSep 18, 2007
  9. Martin LanghoffSep 16, 2007
  10. J. Bruce FieldsSep 17, 2007
  11. Junio C HamanoSep 17, 2007
  12. J. Bruce FieldsSep 17, 2007
  13. git-diff: complain about >=8 consecutive spaces in initial indentJunio C Hamano, Oct 3, 2007
  14. David KastrupSep 18, 2007
  15. J. Bruce FieldsSep 18, 2007
  16. David KastrupSep 18, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.