From: Johannes Schindelin Date: Sun, 22 Oct 2006 21:04:07 GMT Subject: [PATCH] threeway_merge: if file will not be touched, leave it alone Message-ID: In-Reply-To: <7v4ptyjttb.fsf@assigned-by-dhcp.cox.net> If the merge base _and_ the to-be merged brach have a certain file, but HEAD has not, do not complain if that file exists anyway. It will not be overwritten. Signed-off-by: Johannes Schindelin --- On Fri, 20 Oct 2006, Junio C Hamano wrote: > While we are talking about merge-recursive, I could use some > help from somebody familiar with merge-recursive to complete the > read-tree changes Linus mentioned early this month. > > The issue is that we would want to remove one verify_absent() > call in unpack-tree.c:threeway_merge(). When read-tree decides > to leave higher stages around, we do not want it to check if the > merge could clobber a working tree file, because having an > unrelated file at the same path in the working tree sometimes is > and sometimes is not a conflict, depending on the outcome of the > merge, and that part of the code does not _know_ the outcome > yet. How about this? It passes the testsuite, and I tested it with the test case you did, and with the same test case with recursive merge. unpack-trees.c | 5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-) diff --git a/unpack-trees.c b/unpack-trees.c index 3ac0289..b4994c4 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -658,10 +658,9 @@ int threeway_merge(struct cache_entry ** * up-to-date to avoid the files getting overwritten with * conflict resolution files. */ - if (index) { + if (index) verify_uptodate(index, o); - } - else if (path) + else if (no_anc_exists) verify_absent(path, "overwritten", o); o->nontrivial_merge = 1; -- 1.4.3.1.ga3de1-dirty