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:
parent
83133740d9
commit
cc58d7dfdd
23
rerere.c
23
rerere.c
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user