diff options
author | Junio C Hamano <junkio@cox.net> | 2007-04-16 21:58:01 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2007-04-17 01:04:59 -0700 |
commit | 3e5261a24071ca23c3514c0ebd5ee55f1e79d9cc (patch) | |
tree | 81885f6590dd063c6fef7c2c079f1ccf90cc09f4 /merge-recursive.c | |
parent | 515106fa1335462393c08fa8712dddd767dc147a (diff) | |
download | git-3e5261a24071ca23c3514c0ebd5ee55f1e79d9cc.tar.gz |
merge-recursive: separate out xdl_merge() interface.
This just moves code around to make the actual call to
xdl_merge() into a separate function.
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'merge-recursive.c')
-rw-r--r-- | merge-recursive.c | 56 |
1 files changed, 35 insertions, 21 deletions
diff --git a/merge-recursive.c b/merge-recursive.c index 3096594b3e..4eb62cf64a 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -659,6 +659,39 @@ static void fill_mm(const unsigned char *sha1, mmfile_t *mm) mm->size = size; } +static int ll_merge(mmbuffer_t *result_buf, + struct diff_filespec *o, + struct diff_filespec *a, + struct diff_filespec *b, + const char *branch1, + const char *branch2) +{ + mmfile_t orig, src1, src2; + xpparam_t xpp; + char *name1, *name2; + int merge_status; + + name1 = xstrdup(mkpath("%s:%s", branch1, a->path)); + name2 = xstrdup(mkpath("%s:%s", branch2, b->path)); + + fill_mm(o->sha1, &orig); + fill_mm(a->sha1, &src1); + fill_mm(b->sha1, &src2); + + memset(&xpp, 0, sizeof(xpp)); + merge_status = xdl_merge(&orig, + &src1, name1, + &src2, name2, + &xpp, XDL_MERGE_ZEALOUS, + result_buf); + free(name1); + free(name2); + free(orig.ptr); + free(src1.ptr); + free(src2.ptr); + return merge_status; +} + static struct merge_file_info merge_file(struct diff_filespec *o, struct diff_filespec *a, struct diff_filespec *b, const char *branch1, const char *branch2) @@ -687,30 +720,11 @@ static struct merge_file_info merge_file(struct diff_filespec *o, else if (sha_eq(b->sha1, o->sha1)) hashcpy(result.sha, a->sha1); else if (S_ISREG(a->mode)) { - mmfile_t orig, src1, src2; mmbuffer_t result_buf; - xpparam_t xpp; - char *name1, *name2; int merge_status; - name1 = xstrdup(mkpath("%s:%s", branch1, a->path)); - name2 = xstrdup(mkpath("%s:%s", branch2, b->path)); - - fill_mm(o->sha1, &orig); - fill_mm(a->sha1, &src1); - fill_mm(b->sha1, &src2); - - memset(&xpp, 0, sizeof(xpp)); - merge_status = xdl_merge(&orig, - &src1, name1, - &src2, name2, - &xpp, XDL_MERGE_ZEALOUS, - &result_buf); - free(name1); - free(name2); - free(orig.ptr); - free(src1.ptr); - free(src2.ptr); + merge_status = ll_merge(&result_buf, o, a, b, + branch1, branch2); if ((merge_status < 0) || !result_buf.ptr) die("Failed to execute internal merge"); |