mirror of
https://github.com/git-for-windows/git.git
synced 2025-12-12 04:41:35 -06:00
merge-recursive: Introduce a merge_file convenience function
merge_file previously required diff_filespec arguments, but all callers only had sha1s and modes. Rename merge_file to merge_file_1 and introduce a new merge_file convenience function which takes the sha1s and modes and creates the temporary diff_filespec variables needed to call merge_file_1. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
ec61d14963
commit
6bdaead1e5
@ -844,12 +844,12 @@ static int merge_3way(struct merge_options *o,
|
|||||||
return merge_status;
|
return merge_status;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct merge_file_info merge_file(struct merge_options *o,
|
static struct merge_file_info merge_file_1(struct merge_options *o,
|
||||||
const struct diff_filespec *one,
|
const struct diff_filespec *one,
|
||||||
const struct diff_filespec *a,
|
const struct diff_filespec *a,
|
||||||
const struct diff_filespec *b,
|
const struct diff_filespec *b,
|
||||||
const char *branch1,
|
const char *branch1,
|
||||||
const char *branch2)
|
const char *branch2)
|
||||||
{
|
{
|
||||||
struct merge_file_info result;
|
struct merge_file_info result;
|
||||||
result.merge = 0;
|
result.merge = 0;
|
||||||
@ -918,6 +918,26 @@ static struct merge_file_info merge_file(struct merge_options *o,
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct merge_file_info merge_file(struct merge_options *o,
|
||||||
|
const char *path,
|
||||||
|
const unsigned char *o_sha, int o_mode,
|
||||||
|
const unsigned char *a_sha, int a_mode,
|
||||||
|
const unsigned char *b_sha, int b_mode,
|
||||||
|
const char *branch1,
|
||||||
|
const char *branch2)
|
||||||
|
{
|
||||||
|
struct diff_filespec one, a, b;
|
||||||
|
|
||||||
|
one.path = a.path = b.path = (char *)path;
|
||||||
|
hashcpy(one.sha1, o_sha);
|
||||||
|
one.mode = o_mode;
|
||||||
|
hashcpy(a.sha1, a_sha);
|
||||||
|
a.mode = a_mode;
|
||||||
|
hashcpy(b.sha1, b_sha);
|
||||||
|
b.mode = b_mode;
|
||||||
|
return merge_file_1(o, &one, &a, &b, branch1, branch2);
|
||||||
|
}
|
||||||
|
|
||||||
static void conflict_rename_delete(struct merge_options *o,
|
static void conflict_rename_delete(struct merge_options *o,
|
||||||
struct diff_filepair *pair,
|
struct diff_filepair *pair,
|
||||||
const char *rename_branch,
|
const char *rename_branch,
|
||||||
@ -1015,16 +1035,10 @@ static void conflict_rename_rename_2to1(struct merge_options *o,
|
|||||||
/* Two files were renamed to the same thing. */
|
/* Two files were renamed to the same thing. */
|
||||||
if (o->call_depth) {
|
if (o->call_depth) {
|
||||||
struct merge_file_info mfi;
|
struct merge_file_info mfi;
|
||||||
struct diff_filespec one, a, b;
|
mfi = merge_file(o, path, null_sha1, 0,
|
||||||
|
ren1->pair->two->sha1, ren1->pair->two->mode,
|
||||||
one.path = a.path = b.path = path;
|
ren2->pair->two->sha1, ren2->pair->two->mode,
|
||||||
hashcpy(one.sha1, null_sha1);
|
branch1, branch2);
|
||||||
one.mode = 0;
|
|
||||||
hashcpy(a.sha1, ren1->pair->two->sha1);
|
|
||||||
a.mode = ren1->pair->two->mode;
|
|
||||||
hashcpy(b.sha1, ren2->pair->two->sha1);
|
|
||||||
b.mode = ren2->pair->two->mode;
|
|
||||||
mfi = merge_file(o, &one, &a, &b, branch1, branch2);
|
|
||||||
output(o, 1, "Adding merged %s", path);
|
output(o, 1, "Adding merged %s", path);
|
||||||
update_file(o, 0, mfi.sha, mfi.mode, path);
|
update_file(o, 0, mfi.sha, mfi.mode, path);
|
||||||
} else {
|
} else {
|
||||||
@ -1211,24 +1225,12 @@ static int process_renames(struct merge_options *o,
|
|||||||
ren1_dst, branch2);
|
ren1_dst, branch2);
|
||||||
if (o->call_depth) {
|
if (o->call_depth) {
|
||||||
struct merge_file_info mfi;
|
struct merge_file_info mfi;
|
||||||
struct diff_filespec one, a, b;
|
mfi = merge_file(o, ren1_dst, null_sha1, 0,
|
||||||
|
ren1->pair->two->sha1, ren1->pair->two->mode,
|
||||||
one.path = a.path = b.path =
|
dst_other.sha1, dst_other.mode,
|
||||||
(char *)ren1_dst;
|
branch1, branch2);
|
||||||
hashcpy(one.sha1, null_sha1);
|
|
||||||
one.mode = 0;
|
|
||||||
hashcpy(a.sha1, ren1->pair->two->sha1);
|
|
||||||
a.mode = ren1->pair->two->mode;
|
|
||||||
hashcpy(b.sha1, dst_other.sha1);
|
|
||||||
b.mode = dst_other.mode;
|
|
||||||
mfi = merge_file(o, &one, &a, &b,
|
|
||||||
branch1,
|
|
||||||
branch2);
|
|
||||||
output(o, 1, "Adding merged %s", ren1_dst);
|
output(o, 1, "Adding merged %s", ren1_dst);
|
||||||
update_file(o, 0,
|
update_file(o, 0, mfi.sha, mfi.mode, ren1_dst);
|
||||||
mfi.sha,
|
|
||||||
mfi.mode,
|
|
||||||
ren1_dst);
|
|
||||||
try_merge = 0;
|
try_merge = 0;
|
||||||
} else {
|
} else {
|
||||||
char *new_path = unique_path(o, ren1_dst, branch2);
|
char *new_path = unique_path(o, ren1_dst, branch2);
|
||||||
@ -1406,8 +1408,8 @@ static int merge_content(struct merge_options *o,
|
|||||||
if (dir_in_way(path, !o->call_depth))
|
if (dir_in_way(path, !o->call_depth))
|
||||||
df_conflict_remains = 1;
|
df_conflict_remains = 1;
|
||||||
}
|
}
|
||||||
mfi = merge_file(o, &one, &a, &b,
|
mfi = merge_file_1(o, &one, &a, &b,
|
||||||
side1 ? side1 : o->branch1, side2 ? side2 : o->branch2);
|
side1 ? side1 : o->branch1, side2 ? side2 : o->branch2);
|
||||||
free(side1);
|
free(side1);
|
||||||
free(side2);
|
free(side2);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user