@matheusbsbs / matheus-bagliano / commits / ff8ba59e7b
Fork 0

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 <eyvind.bernhardsen@gmail.com> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jonathan Nieder committed Aug 5, 2010 at 06:30 UTC ff8ba59e7b015ba96d6a3271000f16aa71dc4a6f
1 file changed +5 -6
rerere.c
+5 -6
@@ -365,7 +365,7 @@ static int find_conflict(struct string_list *conflict)
365 return 0;
366 }
367
368 -static int merge(const char *name, int renormalize, const char *path)
368 +static int merge(const char *name, const char *path)
369 {
370 int ret;
371 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)
380 ret = 1;
381 goto out;
382 }
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);
384 if (!ret) {
385 FILE *f = fopen(path, "w");
386 if (!f)
@@ -429,7 +428,7 @@ static int update_paths(struct string_list *update)
428 return status;
429 }
430
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)
432 {
433 struct string_list conflict = { NULL, 0, 0, 1 };
434 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)
473 const char *name = (const char *)rr->items[i].util;
474
475 if (has_rerere_resolution(name)) {
477 - if (!merge(name, renormalize, path)) {
476 + if (!merge(name, path)) {
477 if (rerere_autoupdate)
478 string_list_insert(path, &update);
479 fprintf(stderr,
@@ -558,7 +557,7 @@ int rerere(int flags)
557 fd = setup_rerere(&merge_rr, flags);
558 if (fd < 0)
559 return 0;
561 - return do_plain_rerere(&merge_rr, fd, merge_renormalize);
560 + return do_plain_rerere(&merge_rr, fd);
561 }
562
563 static int rerere_forget_one_path(const char *path, struct string_list *rr)