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

[PATCH 08/13] builtin-apply.c: simplify calling site to apply_line()

From
Junio C Hamano <gitster@pobox.com>
Date
Feb 2, 2008, 10:54 UTC
Message-ID
<1201949659-27725-9-git-send-email-gitster@pobox.com>
In-Reply-To
<1201949659-27725-8-git-send-email-gitster@pobox.com>

The function apply_line() changed its behaviour depending on the ws_error_action, whitespace_error and if the input was a context. Make its caller responsible for such checking so that we can convert the function to copy the contents of line while fixing whitespace breakage more easily.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 builtin-apply.c |   38 ++++++++++++++++++++------------------
 1 files changed, 20 insertions(+), 18 deletions(-)
diff --git a/builtin-apply.c b/builtin-apply.c
index 7fb3305..d0d008f 100644
--- a/builtin-apply.c
+++ b/builtin-apply.c
@@ -1642,7 +1642,7 @@ static void remove_last_line(struct image *img)
 	img->len -= img->line[--img->nr].len;
 }
 
-static int apply_line(char *output, const char *patch, int plen,
+static int copy_wsfix(char *output, const char *patch, int plen,
 		      unsigned ws_rule)
 {
 	/*
@@ -1659,12 +1659,6 @@ static int apply_line(char *output, const char *patch, int plen,
 	int need_fix_leading_space = 0;
 	char *buf;
 
-	if ((ws_error_action != correct_ws_error) || !whitespace_error ||
-	    *patch != '+') {
-		memcpy(output, patch + 1, plen);
-		return plen;
-	}
-
 	/*
 	 * Strip trailing whitespace
 	 */
@@ -1821,7 +1815,7 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
 	while (size > 0) {
 		char first;
 		int len = linelen(patch, size);
-		int plen;
+		int plen, added;
 		int added_blank_line = 0;
 
 		if (!len)
@@ -1866,17 +1860,25 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
 				break;
 		/* Fall-through for ' ' */
 		case '+':
-			if (first != '+' || !no_add) {
-				int added = apply_line(new, patch,
-						       plen, ws_rule);
-				add_line_info(&postimage, new, added,
-					      (first == '+' ? 0 : LINE_COMMON));
-
-				new += added;
-				if (first == '+' &&
-				    added == 1 && new[-1] == '\n')
-					added_blank_line = 1;
+			/* --no-add does not add new lines */
+			if (first == '+' && no_add)
+				break;
+
+			if (first != '+' ||
+			    !whitespace_error ||
+			    ws_error_action != correct_ws_error) {
+				memcpy(new, patch + 1, plen);
+				added = plen;
+			}
+			else {
+				added = copy_wsfix(new, patch, plen, ws_rule);
 			}
+			add_line_info(&postimage, new, added,
+				      (first == '+' ? 0 : LINE_COMMON));
+			new += added;
+			if (first == '+' &&
+			    added == 1 && new[-1] == '\n')
+				added_blank_line = 1;
 			break;
 		case '@': case '\\':
 			/* Ignore it, we already handled it */
-- 
1.5.4.2.g41ac4
Previous: Junio C HamanoNext: Junio C Hamano
Message 9 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.