mirror of
https://github.com/git/git.git
synced 2024-11-24 02:17:02 +08:00
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;
|
||||
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);
|
||||
|
Loading…
Reference in New Issue
Block a user