From: Alex Riesen <raa.lkml@gmail.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Johannes Schindelin <Johannes.Schindelin@gmx.de>,
git@vger.kernel.org, Junio C Hamano <junkio@cox.net>,
Tom Prince <tom.prince@ualberta.net>
Subject: [PATCH] Keep rename/rename conflicts of intermediate merges while doing recursive merge
Date: Sat, 31 Mar 2007 13:49:38 +0200 [thread overview]
Message-ID: <20070331114938.GB4377@steel.home> (raw)
In-Reply-To: <20070331104947.GA4377@steel.home>
This patch leaves the base name in the resulting intermediate tree, to
propagate the conflict from intermediate merges up to the top-level merge.
---
The result seem to be at least predictable. Still, doesn't it mean
that once a rename/rename conflict is in it has to be resolved
manually forever?
merge-recursive.c | 37 +++++++++++++++++++++++++++++++------
1 files changed, 31 insertions(+), 6 deletions(-)
diff --git a/merge-recursive.c b/merge-recursive.c
index c96e1a7..080b714 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -278,8 +278,16 @@ static struct tree *git_write_tree(void)
{
struct tree *result = NULL;
- if (unmerged_index())
+ if (unmerged_index()) {
+ output(0, "There are unmerged index entries:");
+ int i;
+ for (i = 0; i < active_nr; i++) {
+ struct cache_entry *ce = active_cache[i];
+ if (ce_stage(ce))
+ output(0, "%d %.*s", ce_stage(ce), ce_namelen(ce), ce->name);
+ }
return NULL;
+ }
if (!active_cache_tree)
active_cache_tree = cache_tree();
@@ -735,8 +743,19 @@ static void conflict_rename_rename(struct rename *ren1,
ren2_dst, branch1, dst_name2);
remove_file(0, ren2_dst, 0);
}
- update_stages(dst_name1, NULL, ren1->pair->two, NULL, 1);
- update_stages(dst_name2, NULL, NULL, ren2->pair->two, 1);
+ if (index_only) {
+ remove_file_from_cache(dst_name1);
+ remove_file_from_cache(dst_name2);
+ /*
+ * Uncomment to leave the conflicting names in the resulting tree
+ *
+ * update_file(0, ren1->pair->two->sha1, ren1->pair->two->mode, dst_name1);
+ * update_file(0, ren2->pair->two->sha1, ren2->pair->two->mode, dst_name2);
+ */
+ } else {
+ update_stages(dst_name1, NULL, ren1->pair->two, NULL, 1);
+ update_stages(dst_name2, NULL, NULL, ren2->pair->two, 1);
+ }
while (delp--)
free(del[delp]);
}
@@ -852,10 +871,16 @@ static int process_renames(struct path_list *a_renames,
if (strcmp(ren1_dst, ren2_dst) != 0) {
clean_merge = 0;
output(1, "CONFLICT (rename/rename): "
- "Rename %s->%s in branch %s "
- "rename %s->%s in %s",
+ "Rename \"%s\"->\"%s\" in branch \"%s\" "
+ "rename \"%s\"->\"%s\" in \"%s\"%s",
src, ren1_dst, branch1,
- src, ren2_dst, branch2);
+ src, ren2_dst, branch2,
+ index_only ? " (left unresolved)": "");
+ if (index_only) {
+ remove_file_from_cache(src);
+ update_file(0, ren1->pair->one->sha1,
+ ren1->pair->one->mode, src);
+ }
conflict_rename_rename(ren1, branch1, ren2, branch2);
} else {
struct merge_file_info mfi;
--
1.5.1.rc2.38.g8d5bf-dirty
next prev parent reply other threads:[~2007-03-31 11:49 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-29 7:50 SEGV in git-merge recursive: Tom Prince
2007-03-29 8:18 ` Alex Riesen
2007-03-29 8:32 ` Tom Prince
2007-03-29 11:29 ` Alex Riesen
2007-03-29 12:58 ` Tom Prince
2007-03-29 13:34 ` Alex Riesen
2007-03-29 14:12 ` Tom Prince
2007-03-29 14:44 ` Alex Riesen
2007-03-29 14:45 ` Alex Riesen
2007-03-29 15:04 ` Tom Prince
2007-03-29 15:04 ` Alex Riesen
2007-03-29 18:32 ` Alex Riesen
2007-03-29 18:55 ` Alex Riesen
2007-03-29 23:01 ` [PATCH] An attempt to resolve a rename/rename conflict in recursive merge Alex Riesen
2007-03-29 23:13 ` Alex Riesen
2007-03-29 19:34 ` SEGV in git-merge recursive: Linus Torvalds
2007-03-29 19:40 ` Linus Torvalds
2007-03-29 20:44 ` Alex Riesen
2007-03-30 21:00 ` Johannes Schindelin
2007-03-31 0:35 ` Linus Torvalds
2007-03-31 1:03 ` Linus Torvalds
2007-03-31 10:49 ` Alex Riesen
2007-03-31 11:49 ` Alex Riesen [this message]
2007-03-31 12:06 ` [PATCH] Keep rename/rename conflicts of intermediate merges while doing recursive merge Jakub Narebski
2007-03-31 12:50 ` Johannes Schindelin
2007-03-31 12:53 ` Johannes Schindelin
2007-03-31 16:07 ` Linus Torvalds
2007-03-31 17:34 ` Alex Riesen
2007-03-31 20:03 ` Junio C Hamano
2007-03-31 11:22 ` SEGV in git-merge recursive: Johannes Schindelin
2007-03-29 19:55 ` Tom Prince
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070331114938.GB4377@steel.home \
--to=raa.lkml@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
--cc=tom.prince@ualberta.net \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).