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

[PATCH 10/13] builtin-apply.c: move copy_wsfix() function a bit higher.

From
Junio C Hamano <gitster@pobox.com>
Date
Feb 2, 2008, 10:54 UTC
Message-ID
<1201949659-27725-11-git-send-email-gitster@pobox.com>
In-Reply-To
<1201949659-27725-10-git-send-email-gitster@pobox.com>
I'll be calling this from match_fragment() in later rounds.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 builtin-apply.c |  188 +++++++++++++++++++++++++++---------------------------
 1 files changed, 94 insertions(+), 94 deletions(-)
diff --git a/builtin-apply.c b/builtin-apply.c
index 0bc33bd..2af625a 100644
--- a/builtin-apply.c
+++ b/builtin-apply.c
@@ -1515,6 +1515,100 @@ static int read_old_data(struct stat *st, const char *path, struct strbuf *buf)
 	}
 }
 
+static int copy_wsfix(char *output, const char *patch, int plen,
+		      unsigned ws_rule)
+{
+	/*
+	 * plen is number of bytes to be copied from patch, starting
+	 * at patch.  Typically patch[plen-1] is '\n', unless this is
+	 * the incomplete last line.
+	 */
+	int i;
+	int add_nl_to_tail = 0;
+	int fixed = 0;
+	int last_tab_in_indent = -1;
+	int last_space_in_indent = -1;
+	int need_fix_leading_space = 0;
+	char *buf;
+
+	/*
+	 * Strip trailing whitespace
+	 */
+	if ((ws_rule & WS_TRAILING_SPACE) &&
+	    (2 < plen && isspace(patch[plen-2]))) {
+		if (patch[plen-1] == '\n')
+			add_nl_to_tail = 1;
+		plen--;
+		while (0 < plen && isspace(patch[plen-1]))
+			plen--;
+		fixed = 1;
+	}
+
+	/*
+	 * Check leading whitespaces (indent)
+	 */
+	for (i = 0; i < plen; i++) {
+		char ch = patch[i];
+		if (ch == '\t') {
+			last_tab_in_indent = i;
+			if ((ws_rule & WS_SPACE_BEFORE_TAB) &&
+			    0 <= last_space_in_indent)
+			    need_fix_leading_space = 1;
+		} else if (ch == ' ') {
+			last_space_in_indent = i;
+			if ((ws_rule & WS_INDENT_WITH_NON_TAB) &&
+			    8 <= i - last_tab_in_indent)
+				need_fix_leading_space = 1;
+		} else
+			break;
+	}
+
+	buf = output;
+	if (need_fix_leading_space) {
+		/* Process indent ourselves */
+		int consecutive_spaces = 0;
+		int last = last_tab_in_indent + 1;
+
+		if (ws_rule & WS_INDENT_WITH_NON_TAB) {
+			/* have "last" point at one past the indent */
+			if (last_tab_in_indent < last_space_in_indent)
+				last = last_space_in_indent + 1;
+			else
+				last = last_tab_in_indent + 1;
+		}
+
+		/*
+		 * between patch[0..last-1], strip the funny spaces,
+		 * updating them to tab as needed.
+		 */
+		for (i = 0; i < last; i++) {
+			char ch = patch[i];
+			if (ch != ' ') {
+				consecutive_spaces = 0;
+				*output++ = ch;
+			} else {
+				consecutive_spaces++;
+				if (consecutive_spaces == 8) {
+					*output++ = '\t';
+					consecutive_spaces = 0;
+				}
+			}
+		}
+		while (0 < consecutive_spaces--)
+			*output++ = ' ';
+		plen -= last;
+		patch += last;
+		fixed = 1;
+	}
+
+	memcpy(output, patch, plen);
+	if (add_nl_to_tail)
+		output[plen++] = '\n';
+	if (fixed)
+		applied_after_fixing_ws++;
+	return output + plen - buf;
+}
+
 static int match_fragment(struct image *img,
 			  struct image *preimage,
 			  struct image *postimage,
@@ -1642,100 +1736,6 @@ static void remove_last_line(struct image *img)
 	img->len -= img->line[--img->nr].len;
 }
 
-static int copy_wsfix(char *output, const char *patch, int plen,
-		      unsigned ws_rule)
-{
-	/*
-	 * plen is number of bytes to be copied from patch, starting
-	 * at patch.  Typically patch[plen-1] is '\n', unless this is
-	 * the incomplete last line.
-	 */
-	int i;
-	int add_nl_to_tail = 0;
-	int fixed = 0;
-	int last_tab_in_indent = -1;
-	int last_space_in_indent = -1;
-	int need_fix_leading_space = 0;
-	char *buf;
-
-	/*
-	 * Strip trailing whitespace
-	 */
-	if ((ws_rule & WS_TRAILING_SPACE) &&
-	    (2 < plen && isspace(patch[plen-2]))) {
-		if (patch[plen-1] == '\n')
-			add_nl_to_tail = 1;
-		plen--;
-		while (0 < plen && isspace(patch[plen-1]))
-			plen--;
-		fixed = 1;
-	}
-
-	/*
-	 * Check leading whitespaces (indent)
-	 */
-	for (i = 0; i < plen; i++) {
-		char ch = patch[i];
-		if (ch == '\t') {
-			last_tab_in_indent = i;
-			if ((ws_rule & WS_SPACE_BEFORE_TAB) &&
-			    0 <= last_space_in_indent)
-			    need_fix_leading_space = 1;
-		} else if (ch == ' ') {
-			last_space_in_indent = i;
-			if ((ws_rule & WS_INDENT_WITH_NON_TAB) &&
-			    8 <= i - last_tab_in_indent)
-				need_fix_leading_space = 1;
-		} else
-			break;
-	}
-
-	buf = output;
-	if (need_fix_leading_space) {
-		/* Process indent ourselves */
-		int consecutive_spaces = 0;
-		int last = last_tab_in_indent + 1;
-
-		if (ws_rule & WS_INDENT_WITH_NON_TAB) {
-			/* have "last" point at one past the indent */
-			if (last_tab_in_indent < last_space_in_indent)
-				last = last_space_in_indent + 1;
-			else
-				last = last_tab_in_indent + 1;
-		}
-
-		/*
-		 * between patch[0..last-1], strip the funny spaces,
-		 * updating them to tab as needed.
-		 */
-		for (i = 0; i < last; i++) {
-			char ch = patch[i];
-			if (ch != ' ') {
-				consecutive_spaces = 0;
-				*output++ = ch;
-			} else {
-				consecutive_spaces++;
-				if (consecutive_spaces == 8) {
-					*output++ = '\t';
-					consecutive_spaces = 0;
-				}
-			}
-		}
-		while (0 < consecutive_spaces--)
-			*output++ = ' ';
-		plen -= last;
-		patch += last;
-		fixed = 1;
-	}
-
-	memcpy(output, patch, plen);
-	if (add_nl_to_tail)
-		output[plen++] = '\n';
-	if (fixed)
-		applied_after_fixing_ws++;
-	return output + plen - buf;
-}
-
 static void update_image(struct image *img,
 			 int applied_pos,
 			 struct image *preimage,
-- 
1.5.4.2.g41ac4
Previous: Junio C HamanoNext: Junio C Hamano
Message 11 of 14 in “git-apply --whitespace=fix updates”
  1. 00/13 git-apply --whitespace=fix updatesJunio C Hamano, Feb 2, 2008
  2. 01/13 builtin-apply.c: refactor small part that matches contextJunio C Hamano, Feb 2, 2008
  3. 02/13 builtin-apply.c: restructure "offset" matchingJunio C Hamano, Feb 2, 2008
  4. 03/13 builtin-apply.c: push match-beginning/end logic downJunio C Hamano, Feb 2, 2008
  5. 04/13 builtin-apply.c: make it more line orientedJunio C Hamano, Feb 2, 2008
  6. 05/13 builtin-apply.c: optimize match_beginning/end processing a bit.Junio C Hamano, Feb 2, 2008
  7. 06/13 builtin-apply.c: mark common context lines in lineinfo structure.Junio C Hamano, Feb 2, 2008
  8. 07/13 builtin-apply.c: clean-up apply_one_fragment()Junio C Hamano, Feb 2, 2008
  9. 08/13 builtin-apply.c: simplify calling site to apply_line()Junio C Hamano, Feb 2, 2008
  10. 09/13 builtin-apply.c: do not feed copy_wsfix() leading '+'Junio C Hamano, Feb 2, 2008
  11. 10/13 builtin-apply.c: move copy_wsfix() function a bit higher.Junio C Hamano, Feb 2, 2008
  12. 11/13 builtin-apply.c: pass ws_rule down to match_fragment()Junio C Hamano, Feb 2, 2008
  13. 12/13 git-apply --whitespace=fix: fix whitespace fuzz introduced by previous runJunio C Hamano, Feb 2, 2008
  14. 13/13 core.whitespace: cr-at-eolJunio C Hamano, Feb 2, 2008

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.