зеркало из https://github.com/microsoft/git.git
merge-recursive: Small cleanups for conflict_rename_rename_1to2
Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
c52ff85d97
Коммит
a99b7f2256
|
@ -964,58 +964,55 @@ static void conflict_rename_delete(struct merge_options *o,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void conflict_rename_rename_1to2(struct merge_options *o,
|
static void conflict_rename_rename_1to2(struct merge_options *o,
|
||||||
struct diff_filepair *pair1,
|
struct rename_conflict_info *ci)
|
||||||
const char *branch1,
|
|
||||||
struct diff_filepair *pair2,
|
|
||||||
const char *branch2)
|
|
||||||
{
|
{
|
||||||
/* One file was renamed in both branches, but to different names. */
|
/* One file was renamed in both branches, but to different names. */
|
||||||
|
struct diff_filespec *one = ci->pair1->one;
|
||||||
|
struct diff_filespec *a = ci->pair1->two;
|
||||||
|
struct diff_filespec *b = ci->pair2->two;
|
||||||
|
const char *dst_name_a = a->path;
|
||||||
|
const char *dst_name_b = b->path;
|
||||||
char *del[2];
|
char *del[2];
|
||||||
int delp = 0;
|
int delp = 0;
|
||||||
const char *src = pair1->one->path;
|
|
||||||
const char *ren1_dst = pair1->two->path;
|
|
||||||
const char *ren2_dst = pair2->two->path;
|
|
||||||
const char *dst_name1 = ren1_dst;
|
|
||||||
const char *dst_name2 = ren2_dst;
|
|
||||||
|
|
||||||
output(o, 1, "CONFLICT (rename/rename): "
|
output(o, 1, "CONFLICT (rename/rename): "
|
||||||
"Rename \"%s\"->\"%s\" in branch \"%s\" "
|
"Rename \"%s\"->\"%s\" in branch \"%s\" "
|
||||||
"rename \"%s\"->\"%s\" in \"%s\"%s",
|
"rename \"%s\"->\"%s\" in \"%s\"%s",
|
||||||
src, pair1->two->path, branch1,
|
one->path, a->path, ci->branch1,
|
||||||
src, pair2->two->path, branch2,
|
one->path, b->path, ci->branch2,
|
||||||
o->call_depth ? " (left unresolved)" : "");
|
o->call_depth ? " (left unresolved)" : "");
|
||||||
if (dir_in_way(ren1_dst, !o->call_depth)) {
|
if (dir_in_way(a->path, !o->call_depth)) {
|
||||||
dst_name1 = del[delp++] = unique_path(o, ren1_dst, branch1);
|
dst_name_a = del[delp++] = unique_path(o, a->path, ci->branch1);
|
||||||
output(o, 1, "%s is a directory in %s adding as %s instead",
|
output(o, 1, "%s is a directory in %s adding as %s instead",
|
||||||
ren1_dst, branch2, dst_name1);
|
a->path, ci->branch2, dst_name_a);
|
||||||
}
|
}
|
||||||
if (dir_in_way(ren2_dst, !o->call_depth)) {
|
if (dir_in_way(b->path, !o->call_depth)) {
|
||||||
dst_name2 = del[delp++] = unique_path(o, ren2_dst, branch2);
|
dst_name_b = del[delp++] = unique_path(o, b->path, ci->branch2);
|
||||||
output(o, 1, "%s is a directory in %s adding as %s instead",
|
output(o, 1, "%s is a directory in %s adding as %s instead",
|
||||||
ren2_dst, branch1, dst_name2);
|
b->path, ci->branch1, dst_name_b);
|
||||||
}
|
}
|
||||||
if (o->call_depth) {
|
if (o->call_depth) {
|
||||||
struct merge_file_info mfi;
|
struct merge_file_info mfi;
|
||||||
mfi = merge_file(o, src,
|
mfi = merge_file(o, one->path,
|
||||||
pair1->one->sha1, pair1->one->mode,
|
one->sha1, one->mode,
|
||||||
pair1->two->sha1, pair1->two->mode,
|
a->sha1, a->mode,
|
||||||
pair2->two->sha1, pair2->two->mode,
|
b->sha1, b->mode,
|
||||||
branch1, branch2);
|
ci->branch1, ci->branch2);
|
||||||
/*
|
/*
|
||||||
* FIXME: For rename/add-source conflicts (if we could detect
|
* FIXME: For rename/add-source conflicts (if we could detect
|
||||||
* such), this is wrong. We should instead find a unique
|
* such), this is wrong. We should instead find a unique
|
||||||
* pathname and then either rename the add-source file to that
|
* pathname and then either rename the add-source file to that
|
||||||
* unique path, or use that unique path instead of src here.
|
* unique path, or use that unique path instead of src here.
|
||||||
*/
|
*/
|
||||||
update_file(o, 0, mfi.sha, mfi.mode, src);
|
update_file(o, 0, mfi.sha, mfi.mode, one->path);
|
||||||
remove_file_from_cache(ren1_dst);
|
remove_file_from_cache(a->path);
|
||||||
remove_file_from_cache(ren2_dst);
|
remove_file_from_cache(b->path);
|
||||||
} else {
|
} else {
|
||||||
update_stages(ren1_dst, NULL, pair1->two, NULL);
|
update_stages(a->path, NULL, a, NULL);
|
||||||
update_stages(ren2_dst, NULL, NULL, pair2->two);
|
update_stages(b->path, NULL, NULL, b);
|
||||||
|
|
||||||
update_file(o, 0, pair1->two->sha1, pair1->two->mode, dst_name1);
|
update_file(o, 0, a->sha1, a->mode, dst_name_a);
|
||||||
update_file(o, 0, pair2->two->sha1, pair2->two->mode, dst_name2);
|
update_file(o, 0, b->sha1, b->mode, dst_name_b);
|
||||||
}
|
}
|
||||||
while (delp--)
|
while (delp--)
|
||||||
free(del[delp]);
|
free(del[delp]);
|
||||||
|
@ -1503,10 +1500,7 @@ static int process_entry(struct merge_options *o,
|
||||||
break;
|
break;
|
||||||
case RENAME_ONE_FILE_TO_TWO:
|
case RENAME_ONE_FILE_TO_TWO:
|
||||||
clean_merge = 0;
|
clean_merge = 0;
|
||||||
conflict_rename_rename_1to2(o, conflict_info->pair1,
|
conflict_rename_rename_1to2(o, conflict_info);
|
||||||
conflict_info->branch1,
|
|
||||||
conflict_info->pair2,
|
|
||||||
conflict_info->branch2);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
entry->processed = 0;
|
entry->processed = 0;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче