Skip to content

Commit

Permalink
rerere: never renormalize
Browse files Browse the repository at this point in the history
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 <eyvind.bernhardsen@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jonathan Nieder authored and Junio C Hamano committed Aug 6, 2010
1 parent 672d1b7 commit ff8ba59
Showing 1 changed file with 5 additions and 6 deletions.
11 changes: 5 additions & 6 deletions rerere.c
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ static int find_conflict(struct string_list *conflict)
return 0;
}

static int merge(const char *name, int renormalize, const char *path)
static int merge(const char *name, const char *path)
{
int ret;
mmfile_t cur = {NULL, 0}, base = {NULL, 0}, other = {NULL, 0};
Expand All @@ -380,8 +380,7 @@ static int merge(const char *name, int renormalize, const char *path)
ret = 1;
goto out;
}
ret = ll_merge(&result, path, &base, NULL, &cur, "", &other, "",
renormalize ? LL_OPT_RENORMALIZE : 0);
ret = ll_merge(&result, path, &base, NULL, &cur, "", &other, "", 0);
if (!ret) {
FILE *f = fopen(path, "w");
if (!f)
Expand Down Expand Up @@ -429,7 +428,7 @@ static int update_paths(struct string_list *update)
return status;
}

static int do_plain_rerere(struct string_list *rr, int fd, int renormalize)
static int do_plain_rerere(struct string_list *rr, int fd)
{
struct string_list conflict = { NULL, 0, 0, 1 };
struct string_list update = { NULL, 0, 0, 1 };
Expand Down Expand Up @@ -474,7 +473,7 @@ static int do_plain_rerere(struct string_list *rr, int fd, int renormalize)
const char *name = (const char *)rr->items[i].util;

if (has_rerere_resolution(name)) {
if (!merge(name, renormalize, path)) {
if (!merge(name, path)) {
if (rerere_autoupdate)
string_list_insert(path, &update);
fprintf(stderr,
Expand Down Expand Up @@ -558,7 +557,7 @@ int rerere(int flags)
fd = setup_rerere(&merge_rr, flags);
if (fd < 0)
return 0;
return do_plain_rerere(&merge_rr, fd, merge_renormalize);
return do_plain_rerere(&merge_rr, fd);
}

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

0 comments on commit ff8ba59

Please sign in to comment.