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 <redacted>
---
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