tree conflict: local add, incoming add upon merge

2011-05-24 Thread David Tombs
Hi Subversion Gurus,

I have a question about merging with a tree conflict.

I created the same directory, called 'config' on two branches. The
directory had different files on each branch, let's call them 'foo.java'
on branch A and 'bar.java' on branch B.

When I merged branch A -> branch B, I got a "tree conflict" saying "local
add, incoming add upon merge." I can understand this error: the merge
tried to add the directory as expected but it was already there. My
desired resolution is to keep the 'config' directory and just add the file
from branch A. That is, 'config' would contain both foo.java and bar.java.

The only way to achieve this I found was to delete 'config' (with no
commit), do the merge, and then revert the deletion of bar.java. It
worked, but it seems weird to do a delete just to revert it. Do you know
any better way of doing it?  It took me a while to figure out the
solution, with lots of fruitless Googling.

Thanks in advance,
David

-- 
Wise men _still_ seek Him.


Re: tree conflict: local add, incoming add upon merge

2011-05-24 Thread David Tombs
On 05/24/2011 11:05 AM, Stefan Sperling wrote:
> On Tue, May 24, 2011 at 10:45:09AM -0400, David Tombs wrote:
>> Hi Subversion Gurus,
>>
>> I have a question about merging with a tree conflict.
>>
>> I created the same directory, called 'config' on two branches. The
>> directory had different files on each branch, let's call them 'foo.java'
>> on branch A and 'bar.java' on branch B.
>>
>> When I merged branch A -> branch B, I got a "tree conflict" saying "local
>> add, incoming add upon merge." I can understand this error: the merge
>> tried to add the directory as expected but it was already there. My
>> desired resolution is to keep the 'config' directory and just add the file
>> from branch A. That is, 'config' would contain both foo.java and bar.java.
>>
>> The only way to achieve this I found was to delete 'config' (with no
>> commit), do the merge, and then revert the deletion of bar.java. It
>> worked, but it seems weird to do a delete just to revert it. Do you know
>> any better way of doing it?  It took me a while to figure out the
>> solution, with lots of fruitless Googling.
> 
> The problem with tree conflicts is that each one is unique.
> You might always find more creative ways of solving them.
> But I think that you've taken a very good approach.
> 
> In short, whatever works for you is best :)
> 

Hi Stefan,

Thanks for the response. Unfortunately, I don't think my solution turned
out very well. I ended up with a corrupted working copy that thought
bar.java was there but the server disagreed whenever I did a
server-hitting command.

I guess what I should have done instead was delete config and then
re-add bar.java instead of reverting it.

Thanks,
David


Re: tree conflict: local add, incoming add upon merge

2011-05-25 Thread David Tombs
On 05/25/2011 07:45 AM, Stephen Butler wrote:
> Hi David,
> 
> Attached is a reproduction script.  I could reproduce the corrupted working
> copy in 1.6.16.
> 
> With 1.7 (r1127008), the corruption doesn't occur, but there's still a bug:
> 'svn status' displays bar.java (as deleted) after the merge.  The revert of
> bar.java has no effect.
> 
> Anyway, making local changes to a working copy just to avoid tree
> conflicts, is a sign that Subversion's conflict resolution is lacking.  
> There's
> no way to tell the merge command to resolve add-vs-add tree conflicts by
> merging the trees.  
> 
> I guess we need 'svn merge --accept theirs-conflict' (or mine-conflict) to 
> apply to tree conflicts.  That would be useful for 'svn update', too.  This
> falls under issue 3144:
> 
>   http://subversion.tigris.org/issues/show_bug.cgi?id=3144
>   "interactive conflict resolution does not know about tree-conflicts"
> 
> Note: At the end of the script I include an alternate workaround: 'svn copy 
> ^/trunk/config/foo' to the branch.  This has the advantage of preserving 
> each file's history.
> 
> 
> 
> Steve
> 

Excellent, Steve. I thought about the 'theirs-conflict' option to
resolve this as well. Hope my problem can result in some improvements to
svn. :)

David