rerere.c: use symbolic constants to keep track of parsing states

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>
This commit is contained in:
Junio C Hamano 2008-08-29 10:12:23 -07:00
parent 83133740d9
commit cc58d7dfdd

View File

@ -75,7 +75,10 @@ static int handle_file(const char *path,
{ {
SHA_CTX ctx; SHA_CTX ctx;
char buf[1024]; 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; struct strbuf one, two;
FILE *f = fopen(path, "r"); FILE *f = fopen(path, "r");
FILE *out = NULL; FILE *out = NULL;
@ -98,20 +101,20 @@ static int handle_file(const char *path,
strbuf_init(&two, 0); strbuf_init(&two, 0);
while (fgets(buf, sizeof(buf), f)) { while (fgets(buf, sizeof(buf), f)) {
if (!prefixcmp(buf, "<<<<<<< ")) { if (!prefixcmp(buf, "<<<<<<< ")) {
if (hunk) if (hunk != RR_CONTEXT)
goto bad; goto bad;
hunk = 1; hunk = RR_SIDE_1;
} else if (!prefixcmp(buf, "=======") && isspace(buf[7])) { } else if (!prefixcmp(buf, "=======") && isspace(buf[7])) {
if (hunk != 1) if (hunk != RR_SIDE_1)
goto bad; goto bad;
hunk = 2; hunk = RR_SIDE_2;
} else if (!prefixcmp(buf, ">>>>>>> ")) { } else if (!prefixcmp(buf, ">>>>>>> ")) {
if (hunk != 2) if (hunk != RR_SIDE_2)
goto bad; goto bad;
if (strbuf_cmp(&one, &two) > 0) if (strbuf_cmp(&one, &two) > 0)
strbuf_swap(&one, &two); strbuf_swap(&one, &two);
hunk_no++; hunk_no++;
hunk = 0; hunk = RR_CONTEXT;
if (out) { if (out) {
fputs("<<<<<<<\n", out); fputs("<<<<<<<\n", out);
fwrite(one.buf, one.len, 1, out); fwrite(one.buf, one.len, 1, out);
@ -127,9 +130,9 @@ static int handle_file(const char *path,
} }
strbuf_reset(&one); strbuf_reset(&one);
strbuf_reset(&two); strbuf_reset(&two);
} else if (hunk == 1) } else if (hunk == RR_SIDE_1)
strbuf_addstr(&one, buf); strbuf_addstr(&one, buf);
else if (hunk == 2) else if (hunk == RR_SIDE_2)
strbuf_addstr(&two, buf); strbuf_addstr(&two, buf);
else if (out) else if (out)
fputs(buf, out); fputs(buf, out);
@ -146,7 +149,7 @@ static int handle_file(const char *path,
fclose(out); fclose(out);
if (sha1) if (sha1)
SHA1_Final(sha1, &ctx); SHA1_Final(sha1, &ctx);
if (hunk) { if (hunk != RR_CONTEXT) {
if (output) if (output)
unlink(output); unlink(output);
return error("Could not parse conflict hunks in %s", path); return error("Could not parse conflict hunks in %s", path);