зеркало из https://github.com/microsoft/git.git
rerere: understand "diff3 -m" style conflicts with the original
This teaches rerere to grok conflicts expressed in "diff3 -m" style output, where the version from the common ancestor is output after the first side, preceded by a "|||||||" line. The rerere database needs to keep only the versions from two sides, so the code parses the original copy and discards it. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
cc58d7dfdd
Коммит
387c9d4981
10
rerere.c
10
rerere.c
|
@ -77,7 +77,7 @@ static int handle_file(const char *path,
|
|||
char buf[1024];
|
||||
int hunk_no = 0;
|
||||
enum {
|
||||
RR_CONTEXT = 0, RR_SIDE_1, RR_SIDE_2,
|
||||
RR_CONTEXT = 0, RR_SIDE_1, RR_SIDE_2, RR_ORIGINAL,
|
||||
} hunk = RR_CONTEXT;
|
||||
struct strbuf one, two;
|
||||
FILE *f = fopen(path, "r");
|
||||
|
@ -104,9 +104,13 @@ static int handle_file(const char *path,
|
|||
if (hunk != RR_CONTEXT)
|
||||
goto bad;
|
||||
hunk = RR_SIDE_1;
|
||||
} else if (!prefixcmp(buf, "=======") && isspace(buf[7])) {
|
||||
} else if (!prefixcmp(buf, "|||||||") && isspace(buf[7])) {
|
||||
if (hunk != RR_SIDE_1)
|
||||
goto bad;
|
||||
hunk = RR_ORIGINAL;
|
||||
} else if (!prefixcmp(buf, "=======") && isspace(buf[7])) {
|
||||
if (hunk != RR_SIDE_1 && hunk != RR_ORIGINAL)
|
||||
goto bad;
|
||||
hunk = RR_SIDE_2;
|
||||
} else if (!prefixcmp(buf, ">>>>>>> ")) {
|
||||
if (hunk != RR_SIDE_2)
|
||||
|
@ -132,6 +136,8 @@ static int handle_file(const char *path,
|
|||
strbuf_reset(&two);
|
||||
} else if (hunk == RR_SIDE_1)
|
||||
strbuf_addstr(&one, buf);
|
||||
else if (hunk == RR_ORIGINAL)
|
||||
; /* discard */
|
||||
else if (hunk == RR_SIDE_2)
|
||||
strbuf_addstr(&two, buf);
|
||||
else if (out)
|
||||
|
|
Загрузка…
Ссылка в новой задаче