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.

- Julian


> It may be advantageous to come up with an implementation plan whereby 
> move-awareness is introduced first to the repository side, with just enough 
> support in the WC to make typical move scenarios work much better than they 
> do 
> today, and then as a second phase extend the WC to know about node-id 
> relationships and complete the WC-side awareness (so that scenarios like the 
> above commit-time failures are instead detected within the WC, and whatever 
> else 
> goes along with that).

Reply via email to