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

[PATCH 7/9] rerere: remove silly 1024-byte line limit

From
Junio C Hamano <gitster@pobox.com>
Date
Dec 29, 2009, 21:42 UTC
Message-ID
<1262122958-9378-8-git-send-email-gitster@pobox.com>
In-Reply-To
<1262122958-9378-1-git-send-email-gitster@pobox.com>

Ever since 658f365 (Make git-rerere a builtin, 2006-12-20) rewrote it, it kept this line-length limit regression, even after we started using strbuf in the same function in 19b358e (Use strbuf API in buitin-rerere.c, 2007-09-06).

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 rerere.c |   19 ++++++++++---------
 1 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/rerere.c b/rerere.c
index 29f95f6..88bb4f1 100644
--- a/rerere.c
+++ b/rerere.c
@@ -87,12 +87,12 @@ static int handle_file(const char *path,
 	 unsigned char *sha1, const char *output)
 {
 	git_SHA_CTX ctx;
-	char buf[1024];
 	int hunk_no = 0;
 	enum {
 		RR_CONTEXT = 0, RR_SIDE_1, RR_SIDE_2, RR_ORIGINAL,
 	} hunk = RR_CONTEXT;
 	struct strbuf one = STRBUF_INIT, two = STRBUF_INIT;
+	struct strbuf buf = STRBUF_INIT;
 	FILE *f = fopen(path, "r");
 	FILE *out = NULL;
 	int wrerror = 0;
@@ -111,20 +111,20 @@ static int handle_file(const char *path,
 	if (sha1)
 		git_SHA1_Init(&ctx);
 
-	while (fgets(buf, sizeof(buf), f)) {
-		if (!prefixcmp(buf, "<<<<<<< ")) {
+	while (!strbuf_getwholeline(&buf, f, '\n')) {
+		if (!prefixcmp(buf.buf, "<<<<<<< ")) {
 			if (hunk != RR_CONTEXT)
 				goto bad;
 			hunk = RR_SIDE_1;
-		} else if (!prefixcmp(buf, "|||||||") && isspace(buf[7])) {
+		} else if (!prefixcmp(buf.buf, "|||||||") && isspace(buf.buf[7])) {
 			if (hunk != RR_SIDE_1)
 				goto bad;
 			hunk = RR_ORIGINAL;
-		} else if (!prefixcmp(buf, "=======") && isspace(buf[7])) {
+		} else if (!prefixcmp(buf.buf, "=======") && isspace(buf.buf[7])) {
 			if (hunk != RR_SIDE_1 && hunk != RR_ORIGINAL)
 				goto bad;
 			hunk = RR_SIDE_2;
-		} else if (!prefixcmp(buf, ">>>>>>> ")) {
+		} else if (!prefixcmp(buf.buf, ">>>>>>> ")) {
 			if (hunk != RR_SIDE_2)
 				goto bad;
 			if (strbuf_cmp(&one, &two) > 0)
@@ -147,13 +147,13 @@ static int handle_file(const char *path,
 			strbuf_reset(&one);
 			strbuf_reset(&two);
 		} else if (hunk == RR_SIDE_1)
-			strbuf_addstr(&one, buf);
+			strbuf_addstr(&one, buf.buf);
 		else if (hunk == RR_ORIGINAL)
 			; /* discard */
 		else if (hunk == RR_SIDE_2)
-			strbuf_addstr(&two, buf);
+			strbuf_addstr(&two, buf.buf);
 		else if (out)
-			ferr_puts(buf, out, &wrerror);
+			ferr_puts(buf.buf, out, &wrerror);
 		continue;
 	bad:
 		hunk = 99; /* force error exit */
@@ -161,6 +161,7 @@ static int handle_file(const char *path,
 	}
 	strbuf_release(&one);
 	strbuf_release(&two);
+	strbuf_release(&buf);
 
 	fclose(f);
 	if (wrerror)
-- 
1.6.6
Previous: Junio C HamanoNext: Junio C Hamano
Message 8 of 21 in “Undoing conflict resolution”
  1. 0/9 Undoing conflict resolutionJunio C Hamano, Dec 29, 2009
  2. 1/9 builtin-merge.c: use standard active_cache macrosJunio C Hamano, Dec 29, 2009
  3. 2/9 resolve-undo: record resolved conflicts in a new index extension sectionJunio C Hamano, Dec 29, 2009
  4. 3/9 resolve-undo: basic testsJunio C Hamano, Dec 29, 2009
  5. 4/9 resolve-undo: allow plumbing to clear the informationJunio C Hamano, Dec 29, 2009
  6. 5/9 resolve-undo: "checkout -m path" uses resolve-undo informationJunio C Hamano, Dec 29, 2009
  7. 6/9 resolve-undo: teach "update-index --unresolve" to use resolve-undo infoJunio C Hamano, Dec 29, 2009
  8. 7/9 rerere: remove silly 1024-byte line limitJunio C Hamano, Dec 29, 2009
  9. 8/9 rerere: refactor rerere logic to make it independent from I/OJunio C Hamano, Dec 29, 2009
  10. 9/9 rerere forget path: forget recorded resolutionJunio C Hamano, Dec 29, 2009
  11. Johannes SixtJan 5, 2010
  12. Junio C HamanoJan 6, 2010
  13. Johannes SixtJan 6, 2010
  14. Junio C HamanoJan 6, 2010
  15. Junio C HamanoJan 6, 2010
  16. Johannes SixtJan 8, 2010
  17. Junio C HamanoJan 8, 2010
  18. Junio C HamanoJan 11, 2010
  19. Johannes SixtJan 11, 2010
  20. Junio C HamanoJan 11, 2010
  21. Johannes SixtJan 11, 2010

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.