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

[PATCH 05/12] rerere.c: use symbolic constants to keep track of parsing states

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 30, 2008, 00:42 UTC
Message-ID
<1220056963-2352-6-git-send-email-gitster@pobox.com>
In-Reply-To
<1220056963-2352-5-git-send-email-gitster@pobox.com>

These hardcoded integers make the code harder to follow than necessary; replace them with enums to make it easier to read, before adding support for optionally parsing "diff3 -m" style conflict markers.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 rerere.c |   23 +++++++++++++----------
 1 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/rerere.c b/rerere.c
index 323e493..bf74b26 100644
--- a/rerere.c
+++ b/rerere.c
@@ -75,7 +75,10 @@ static int handle_file(const char *path,
 {
 	SHA_CTX ctx;
 	char buf[1024];
-	int hunk = 0, hunk_no = 0;
+	int hunk_no = 0;
+	enum {
+		RR_CONTEXT = 0, RR_SIDE_1, RR_SIDE_2,
+	} hunk = RR_CONTEXT;
 	struct strbuf one, two;
 	FILE *f = fopen(path, "r");
 	FILE *out = NULL;
@@ -98,20 +101,20 @@ static int handle_file(const char *path,
 	strbuf_init(&two,  0);
 	while (fgets(buf, sizeof(buf), f)) {
 		if (!prefixcmp(buf, "<<<<<<< ")) {
-			if (hunk)
+			if (hunk != RR_CONTEXT)
 				goto bad;
-			hunk = 1;
+			hunk = RR_SIDE_1;
 		} else if (!prefixcmp(buf, "=======") && isspace(buf[7])) {
-			if (hunk != 1)
+			if (hunk != RR_SIDE_1)
 				goto bad;
-			hunk = 2;
+			hunk = RR_SIDE_2;
 		} else if (!prefixcmp(buf, ">>>>>>> ")) {
-			if (hunk != 2)
+			if (hunk != RR_SIDE_2)
 				goto bad;
 			if (strbuf_cmp(&one, &two) > 0)
 				strbuf_swap(&one, &two);
 			hunk_no++;
-			hunk = 0;
+			hunk = RR_CONTEXT;
 			if (out) {
 				fputs("<<<<<<<\n", out);
 				fwrite(one.buf, one.len, 1, out);
@@ -127,9 +130,9 @@ static int handle_file(const char *path,
 			}
 			strbuf_reset(&one);
 			strbuf_reset(&two);
-		} else if (hunk == 1)
+		} else if (hunk == RR_SIDE_1)
 			strbuf_addstr(&one, buf);
-		else if (hunk == 2)
+		else if (hunk == RR_SIDE_2)
 			strbuf_addstr(&two, buf);
 		else if (out)
 			fputs(buf, out);
@@ -146,7 +149,7 @@ static int handle_file(const char *path,
 		fclose(out);
 	if (sha1)
 		SHA1_Final(sha1, &ctx);
-	if (hunk) {
+	if (hunk != RR_CONTEXT) {
 		if (output)
 			unlink(output);
 		return error("Could not parse conflict hunks in %s", path);
-- 
1.6.0.1.149.ga4c44
Previous: Junio C HamanoNext: Junio C Hamano
Message 6 of 26 in “Towards a better merge resolution support”
  1. 00/12 Towards a better merge resolution supportJunio C Hamano, Aug 30, 2008
  2. 01/12 xdl_fill_merge_buffer(): separate out a too deeply nested functionJunio C Hamano, Aug 30, 2008
  3. 02/12 xdiff-merge: optionally show conflicts in "diff3 -m" styleJunio C Hamano, Aug 30, 2008
  4. 03/12 xmerge.c: minimum readability fixupsJunio C Hamano, Aug 30, 2008
  5. 04/12 xmerge.c: "diff3 -m" style clips merge reduction level to EAGER or lessJunio C Hamano, Aug 30, 2008
  6. 05/12 rerere.c: use symbolic constants to keep track of parsing statesJunio C Hamano, Aug 30, 2008
  7. 06/12 rerere: understand "diff3 -m" style conflicts with the originalJunio C Hamano, Aug 30, 2008
  8. 07/12 merge.conflictstyle: choose between "merge" and "diff3 -m" stylesJunio C Hamano, Aug 30, 2008
  9. 08/12 git-merge-recursive: learn to honor merge.conflictstyleJunio C Hamano, Aug 30, 2008
  10. 09/12 checkout: do not check out unmerged higher stages randomlyJunio C Hamano, Aug 30, 2008
  11. 10/12 checkout: allow ignoring unmerged paths when checking out of the indexJunio C Hamano, Aug 30, 2008
  12. 11/12 checkout --ours/--theirsJunio C Hamano, Aug 30, 2008
  13. 12/12 checkout -m: recreate merge when checking out of unmerged indexJunio C Hamano, Aug 30, 2008
  14. Johannes SchindelinAug 30, 2008
  15. Johannes SchindelinAug 30, 2008
  16. Johannes SchindelinAug 30, 2008
  17. Junio C HamanoAug 30, 2008
  18. Johannes SchindelinAug 30, 2008
  19. Johannes SchindelinAug 30, 2008
  20. Alex RiesenSep 1, 2008
  21. Alex RiesenSep 1, 2008
  22. Abhijit Menon-SenSep 1, 2008
  23. Thomas RastSep 1, 2008
  24. Junio C HamanoSep 1, 2008
  25. Alex RiesenSep 1, 2008
  26. Junio C HamanoSep 1, 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.