Skip to content

Commit

Permalink
rerere.c: use symbolic constants to keep track of parsing states
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Junio C Hamano committed Aug 31, 2008
1 parent 8313374 commit cc58d7d
Showing 1 changed file with 13 additions and 10 deletions.
23 changes: 13 additions & 10 deletions rerere.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand Down

0 comments on commit cc58d7d

Please sign in to comment.