On Fri, Feb 1, 2013 at 3:57 PM, Ivan Zhakov <i...@visualsvn.com> wrote:
> On Fri, Feb 1, 2013 at 1:49 AM, Ivan Zhakov <i...@visualsvn.com> wrote:
>> On Wed, Jan 23, 2013 at 9:39 PM, Paul Burba <ptbu...@gmail.com> wrote:
>>> On Wed, Jan 23, 2013 at 9:51 AM, Julian Foad <julianf...@btopenworld.com> 
>>> wrote:
>>>> Ivan Zhakov wrote:
>>>>
>>>>> I was testing recent changes in ra_serf update editor and noticed that
>>>>> reintegrate-like merges for long living branches are extremely slow.
>>>>> Client requests server for diff between branches with respect to
>>>>> ancestry and servers reports no-op txdelta for every file that was
>>>>> changed in original branch. Then for every such file client retrieves
>>>>> text and properties.
>>>>>
>>>>> For example try to reintegrate ev2-export branch back to trunk.
>> [...]
>>
>> Hi Bert and Paul!
>>
>> On Wed, Jan 23, 2013 at 6:51 PM, Bert Huijben <b...@qqmail.nl> wrote:
>>> Is there a way the diff code can see that it receives a no-op txdelta?
>>>
>>> In that case it can just skip retrieving the file as it won't be able to 
>>> produce a difference anyway.
>>>
>> It would be really hard to implement on client, because no-op txdelta
>> transmitted as full txdelta with instructions to copy all source data.
>>
>> But we can detect such no-op txdelta on server side. See my plan bellow.
>>
>>>> Thanks Ivan, that's very interesting.  I'll take a look, since I have just 
>>>> been working on that code.
>>>>
>>>> I exposed this as a separate option because the
>>> two meanings of the previous 'ignore_ancestry' option were conflated, but I 
>>> don't deeply understand what happens when this option is specified.  I know 
>>> what it's
>>> supposed to mean at a basic level: "diff a pair of unrelated nodes as if 
>>> they are related".  What I don't know is how well it's implemented and 
>>> whether it's really useful when merging.
>>>>
>>>>> What is the purpose of diff_ignore_ancestry for merges? Can we default
>>>>> it to FALSE?
>>>>
>>>> I assume one of the purposes is if your work flow has been such
>>> that a file is sometimes replaced (without copy-from)
>>>
>>> Any replacement is a problem, regardless of copy-from.  For example:
>>>
>>
>> [...]
>>
>>>
>>>>, and sometimes a new file added on one branch has been added on  the
>>> other branch by a simple add (without copy-from).  In that sort of work 
>>> flow,
>>> the 'diff_ignore_ancestry' would cause Subversion to do diffs between
>>> different versions of a file, and that might well help in merging the 
>>> changes.
>>> Without the 'diff_ignore_ancestry' option, Subversion would treat the file 
>>> as
>>> 'replaced', and so you'd be likely to get a tree conflict when you try to 
>>> merge it.
>>>
>> Thanks for demonstrating use-case. That what I was looking for. We
>> cannot change to ignore_ancestry  = TRUE by default, but I'm going to
>> try the following:
>> 1. Add test case for replacement merge that you demonstrated (it would
>> be useful anyway)
>>
> Test added in r1441400.
>
>> 2. Modify delta reporter on server side to do not send deltas if files
>> have the same content, regardless ancestry (see
>> subversion/libsvn_repos/reporter.c:696 delta_files()) Patch attached.
>>
> The new test for merge replacements also passes with my patch. So I'm
> going to cleanup it and commit after further testing.
>
Committed r1442555.

-- 
Ivan Zhakov

Reply via email to