Julian Foad wrote on Thu, Jun 27, 2013 at 18:42:18 +0100:
> For the record, to make it easier to understand our current position in 
> retrospect, I'll try to summarize our findings about the 'rotate' operation 
> so far. 
> 
> We started with a requirement:
> 
>   * Represent with 'true moves' any combination of moves that can already be 
> represented using the copy-and-delete model in Ev1.
> 
> We assumed some constraints:
>   * A sequential model with operations including 'move' and 'rotate'.
>   * Don't touch a path more than once.
>   * Don't use temporary names/paths.
> 
> We found:
> 
>   * Examples with no solution that fits the constraints.
> 
> But:
> 
>   * We did not define 'rotate'.
>   * We did not define 'touch'.
>   * We did not define 'path' in the context of 'touch a path'.
>   * We have only hinted at the rationale for these constraints.

> What
>  if (B) has a child named "B" already?  Two possible options are the 
> rotation is not allowed or the child gets deleted and replaced.  These 
> options both impose an additional ordering constraint: if we want to 
> keep that node and move it to somewhere else, we have to do it *before* 
> this rotation.  But there are cases where we cannot do that.  Perhaps 
> the simplest is swapping 'A' with 'A/B' while keeping 'A/B/B' in place:
> 

I didn't understand your diagrams, but I went ahead and added this
example to the Ev2 wiki page so we don't forget it:

https://wiki.apache.org/subversion/Ev2#The_constant_grandchild:_.60swap.28A.2C_A.2FB.29.60_without_moving_A.2FB.2FB

You might want to do the same with the questions you asked above, for
the same reason.

Cheers,

Daniel

>   "A" |   --  -> "A" |
>      (A)    \/      (B)
>   "B" |     /\   "B" |
>      (B)  --  ->    (A)
>   "B" |          "B" |
>      (B2) ----->    (B2)
> 
> Note
>  that node (B2) needs to be 'moved' although it remains at the same 
> absolute path, because our definition of 'move' says that it would 
> otherwise go with its parent.  In this case, we cannot move A/B/B before
>  the rotate because it would need to go to A/B which is already 
> occupied.  If we try to do it after the rotate, we find it has already 
> been deleted and replaced, as explained in the previous paragraph.
> 
> Thus the model does not satify the constraints.

Reply via email to