Skip to content

Commit ff8ba59

Browse files
jrngitster
authored andcommitted
rerere: never renormalize
plain rerere performs three tasks; let us consider how the new merge.renormalize option should apply to each. After an unsuccessful merge, rerere records conflict hunks from the work tree under .git/rr-cache. If the merge was performed with merge.renormalize enabled, both sides of the conflict hunk use the current work tree’s end-of-line and smudge rules; there is not really much of a choice. After a successful manual resolution, rerere records the postimage. Here, also, the file will be in the current work tree’s canonical format and there is not much to do about it. When encountering that conflict again, merge looks up the preimage and postimage using the conflict hunk as a key and runs a three-way merge to apply that resolution to the work tree. Since the conflict hunk used the current work tree’s canonical format, chances are the version in the work tree, the preimage, and the postimage will, too. In fact using the merge.renormalize machinery is exactly the wrong thing to do, since its result has been run through convert_to_git and therefore is not suitable for writing to the work tree. The only affected caller is "git merge". NEEDSWORK: lacks test Cc: Eyvind Bernhardsen <[email protected]> Signed-off-by: Jonathan Nieder <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 672d1b7 commit ff8ba59

File tree

1 file changed

+5
-6
lines changed

1 file changed

+5
-6
lines changed

rerere.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ static int find_conflict(struct string_list *conflict)
365365
return 0;
366366
}
367367

368-
static int merge(const char *name, int renormalize, const char *path)
368+
static int merge(const char *name, const char *path)
369369
{
370370
int ret;
371371
mmfile_t cur = {NULL, 0}, base = {NULL, 0}, other = {NULL, 0};
@@ -380,8 +380,7 @@ static int merge(const char *name, int renormalize, const char *path)
380380
ret = 1;
381381
goto out;
382382
}
383-
ret = ll_merge(&result, path, &base, NULL, &cur, "", &other, "",
384-
renormalize ? LL_OPT_RENORMALIZE : 0);
383+
ret = ll_merge(&result, path, &base, NULL, &cur, "", &other, "", 0);
385384
if (!ret) {
386385
FILE *f = fopen(path, "w");
387386
if (!f)
@@ -429,7 +428,7 @@ static int update_paths(struct string_list *update)
429428
return status;
430429
}
431430

432-
static int do_plain_rerere(struct string_list *rr, int fd, int renormalize)
431+
static int do_plain_rerere(struct string_list *rr, int fd)
433432
{
434433
struct string_list conflict = { NULL, 0, 0, 1 };
435434
struct string_list update = { NULL, 0, 0, 1 };
@@ -474,7 +473,7 @@ static int do_plain_rerere(struct string_list *rr, int fd, int renormalize)
474473
const char *name = (const char *)rr->items[i].util;
475474

476475
if (has_rerere_resolution(name)) {
477-
if (!merge(name, renormalize, path)) {
476+
if (!merge(name, path)) {
478477
if (rerere_autoupdate)
479478
string_list_insert(path, &update);
480479
fprintf(stderr,
@@ -558,7 +557,7 @@ int rerere(int flags)
558557
fd = setup_rerere(&merge_rr, flags);
559558
if (fd < 0)
560559
return 0;
561-
return do_plain_rerere(&merge_rr, fd, merge_renormalize);
560+
return do_plain_rerere(&merge_rr, fd);
562561
}
563562

564563
static int rerere_forget_one_path(const char *path, struct string_list *rr)

0 commit comments

Comments
 (0)