summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Bailey <charles@hashpling.org>2009-05-25 00:21:14 (GMT)
committerJunio C Hamano <gitster@pobox.com>2009-05-25 06:56:34 (GMT)
commit5719db91ce5915ee07c50f1afdc94fe34e91529f (patch)
tree7b156560fb631ca53bac749400485c8946e16904
parent1cd12926cedb340d176db607e087495381032ce2 (diff)
downloadgit-5719db91ce5915ee07c50f1afdc94fe34e91529f.zip
git-5719db91ce5915ee07c50f1afdc94fe34e91529f.tar.gz
git-5719db91ce5915ee07c50f1afdc94fe34e91529f.tar.bz2
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>
-rwxr-xr-xt/t6023-merge-file.sh2
-rw-r--r--xdiff/xmerge.c31
2 files changed, 16 insertions, 17 deletions
diff --git a/t/t6023-merge-file.sh b/t/t6023-merge-file.sh
index 1955635..796f212 100755
--- a/t/t6023-merge-file.sh
+++ b/t/t6023-merge-file.sh
@@ -54,7 +54,7 @@ deduxit me super semitas jusitiae,
EOF
printf "propter nomen suum." >> new4.txt
-test_expect_failure 'merge with no changes' '
+test_expect_success 'merge with no changes' '
cp orig.txt test.txt &&
git merge-file test.txt orig.txt orig.txt &&
test_cmp test.txt orig.txt
diff --git a/xdiff/xmerge.c b/xdiff/xmerge.c
index 82b3573..1ef1d35 100644
--- a/xdiff/xmerge.c
+++ b/xdiff/xmerge.c
@@ -470,23 +470,22 @@ int xdl_merge(mmfile_t *orig, mmfile_t *mf1, const char *name1,
return -1;
}
status = 0;
- if (xscr1 || xscr2) {
- if (!xscr1) {
- result->ptr = xdl_malloc(mf2->size);
- memcpy(result->ptr, mf2->ptr, mf2->size);
- result->size = mf2->size;
- } else if (!xscr2) {
- result->ptr = xdl_malloc(mf1->size);
- memcpy(result->ptr, mf1->ptr, mf1->size);
- result->size = mf1->size;
- } else {
- status = xdl_do_merge(&xe1, xscr1, name1,
- &xe2, xscr2, name2,
- level, xpp, result);
- }
- xdl_free_script(xscr1);
- xdl_free_script(xscr2);
+ if (!xscr1) {
+ result->ptr = xdl_malloc(mf2->size);
+ memcpy(result->ptr, mf2->ptr, mf2->size);
+ result->size = mf2->size;
+ } else if (!xscr2) {
+ result->ptr = xdl_malloc(mf1->size);
+ memcpy(result->ptr, mf1->ptr, mf1->size);
+ result->size = mf1->size;
+ } else {
+ status = xdl_do_merge(&xe1, xscr1, name1,
+ &xe2, xscr2, name2,
+ level, xpp, result);
}
+ xdl_free_script(xscr1);
+ xdl_free_script(xscr2);
+
xdl_free_env(&xe1);
xdl_free_env(&xe2);