summaryrefslogtreecommitdiff
path: root/merge-recursive.c
diff options
context:
space:
mode:
authorElijah Newren <newren@gmail.com>2011-08-12 05:20:20 (GMT)
committerJunio C Hamano <gitster@pobox.com>2011-08-14 21:19:39 (GMT)
commite03acb8bc1f03827210235dd72578b8b26f19c51 (patch)
treefad3ab9d30a872700493276f20c894749191253f /merge-recursive.c
parentb70332520d2ba0f32b5006feff86d71242061011 (diff)
downloadgit-e03acb8bc1f03827210235dd72578b8b26f19c51.zip
git-e03acb8bc1f03827210235dd72578b8b26f19c51.tar.gz
git-e03acb8bc1f03827210235dd72578b8b26f19c51.tar.bz2
merge-recursive: Have conflict_rename_delete reuse modify/delete code
Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'merge-recursive.c')
-rw-r--r--merge-recursive.c46
1 files changed, 30 insertions, 16 deletions
diff --git a/merge-recursive.c b/merge-recursive.c
index 500efff..f29aaf7 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -1037,24 +1037,38 @@ static void conflict_rename_delete(struct merge_options *o,
const char *rename_branch,
const char *other_branch)
{
- char *dest_name = pair->two->path;
- int df_conflict = 0;
+ const struct diff_filespec *orig = pair->one;
+ const struct diff_filespec *dest = pair->two;
+ const char *path;
+ const unsigned char *a_sha = NULL;
+ const unsigned char *b_sha = NULL;
+ int a_mode = 0;
+ int b_mode = 0;
+
+ if (rename_branch == o->branch1) {
+ a_sha = dest->sha1;
+ a_mode = dest->mode;
+ } else {
+ b_sha = dest->sha1;
+ b_mode = dest->mode;
+ }
- output(o, 1, "CONFLICT (rename/delete): Rename %s->%s in %s "
- "and deleted in %s",
- pair->one->path, pair->two->path, rename_branch,
- other_branch);
- if (!o->call_depth)
- update_stages(dest_name, NULL,
- rename_branch == o->branch1 ? pair->two : NULL,
- rename_branch == o->branch1 ? NULL : pair->two);
- if (dir_in_way(dest_name, !o->call_depth)) {
- dest_name = unique_path(o, dest_name, rename_branch);
- df_conflict = 1;
+ if (o->call_depth) {
+ remove_file_from_cache(dest->path);
+ path = orig->path;
+ } else {
+ path = dest->path;
+ update_stages(dest->path, NULL,
+ rename_branch == o->branch1 ? dest : NULL,
+ rename_branch == o->branch1 ? NULL : dest);
}
- update_file(o, 0, pair->two->sha1, pair->two->mode, dest_name);
- if (df_conflict)
- free(dest_name);
+
+ handle_change_delete(o,
+ path,
+ orig->sha1, orig->mode,
+ a_sha, a_mode,
+ b_sha, b_mode,
+ "rename", "renamed");
}
static void conflict_rename_rename_1to2(struct merge_options *o,