@matheusbsbs / matheus-bagliano / commits / 5719db91ce
Fork 0

Change xdl_merge to generate output even for null merges

xdl_merge used to have a check to ensure that there was at least some change in one or other side being merged but this suppressed output for the degenerate case when base, local and remote contents were all identical. Removing this check enables correct output in the degenerate case and xdl_free_script handles freeing NULL scripts so there is no need to have the check for these calls. Signed-off-by: Charles Bailey <charles@hashpling.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Charles Bailey committed May 25, 2009 at 01:21 UTC 5719db91ce5915ee07c50f1afdc94fe34e91529f
2 files changed +16 -17
t/t6023-merge-file.sh
+1 -1
@@ -54,7 +54,7 @@ deduxit me super semitas jusitiae,
54 EOF
55 printf "propter nomen suum." >> new4.txt
56
57 -test_expect_failure 'merge with no changes' '
57 +test_expect_success 'merge with no changes' '
58 cp orig.txt test.txt &&
59 git merge-file test.txt orig.txt orig.txt &&
60 test_cmp test.txt orig.txt
xdiff/xmerge.c
+15 -16
@@ -470,23 +470,22 @@ int xdl_merge(mmfile_t *orig, mmfile_t *mf1, const char *name1,
470 return -1;
471 }
472 status = 0;
473 - if (xscr1 || xscr2) {
474 - if (!xscr1) {
475 - result->ptr = xdl_malloc(mf2->size);
476 - memcpy(result->ptr, mf2->ptr, mf2->size);
477 - result->size = mf2->size;
478 - } else if (!xscr2) {
479 - result->ptr = xdl_malloc(mf1->size);
480 - memcpy(result->ptr, mf1->ptr, mf1->size);
481 - result->size = mf1->size;
482 - } else {
483 - status = xdl_do_merge(&xe1, xscr1, name1,
484 - &xe2, xscr2, name2,
485 - level, xpp, result);
486 - }
487 - xdl_free_script(xscr1);
488 - xdl_free_script(xscr2);
473 + if (!xscr1) {
474 + result->ptr = xdl_malloc(mf2->size);
475 + memcpy(result->ptr, mf2->ptr, mf2->size);
476 + result->size = mf2->size;
477 + } else if (!xscr2) {
478 + result->ptr = xdl_malloc(mf1->size);
479 + memcpy(result->ptr, mf1->ptr, mf1->size);
480 + result->size = mf1->size;
481 + } else {
482 + status = xdl_do_merge(&xe1, xscr1, name1,
483 + &xe2, xscr2, name2,
484 + level, xpp, result);
485 }
486 + xdl_free_script(xscr1);
487 + xdl_free_script(xscr2);
488 +
489 xdl_free_env(&xe1);
490 xdl_free_env(&xe2);
491