Julian Foad <julianf...@btopenworld.com> writes:

> Julian Foad wrote:
>
>> Philip Martin wrote:
>>> [...] I can imagine an enhanced Ev1 editor drive that does
>>> 
>>>     move away A
>>>     move to C (original A)
>>>     del A
>>>     move away B
>>>     move to C (original B)
>>>     del B
>>>     add C
>>> 
>>>  The deletes lead to tree-conflicts on A and B due to local mods.  The
>>>  add creates a pristine C with no local mods.  The user resolves the
>>>  tree-conflicts post-update and gets to choose which local mods are
>>>  merged to C, possibly both but one before the other, which may in turn
>>>  raise text/prop/tree-conflicts on C.
>> 
>> This is good as far as local mods are concerned.  The decision of how to 
>> combine 
>> A and B, or raise a conflict, is left to the WC client code as it should be, 
>> and 
>> sufficient information is provided about the nature of the changes.
>> 
>> Functionally, this would work as you've shown.  Regarding updating the base 
>> tree, however, note that the plain "add" in Ev1 is a node-by-node add 
>> of the whole subtree, which could be arbitrarily large.  For performance, we 
>> must not use a plain add, as a move should be designed to execute in O(1) 
>> time. [...]
>
> Philip pointed out to me that this would still be an improvement over
> what we have today.  If we're going to get anything into a release
> cycle it must be broken down into manageable stages, so perhaps this
> is a good place to draw the line for a first stage.
>
> I'm fairly well persuaded by this view.

There is a related issue with mixed-revision working copies.  Suppose A
gets moved to B in some commit.  A mixed-revision working copy could
contain both A and B so what does the update that includes that commit
do?  I suppose the server still sends some sort of "move A B" operation
but we may want the server to tell the client that B is not being
replaced.

-- 
Philip Martin | Subversion Committer
WANdisco // *Non-Stop Data*

Reply via email to