Branko Čibej <br...@wandisco.com> writes:

> On 25.06.2013 13:42, Philip Martin wrote:
>> What about rotates that overlap.  Consider a repository:
>>
>>     svnadmin create repo
>>     svn mkdir -mm --parents file://`pwd`/repo/A/B/C ^/X/Y/Z
>>
>> Rotate /A and /X/Y/Z and /X and /A/B/C:
>>
>>    svn mv wc/A wc/A2
>>    svn mv wc/X wc/X2
>>    svn mv wc/A2/B/C wc/X
>>    svn mv wc/X2/Y/Z wc/A
>>    svn mv wc/A2/B wc/A/B
>>    svn mv wc/X2/Y wc/X/Y
>>    svn mv wc/A2 wc/X/Y/Z
>>    svn mv wc/X2 wc/A/B/C
>
> What you're describing is not a simple rotation, since you're
> restructuring the tree quite a bit more than that. In any case there
> should certainly be no copy operations in the editor drive.

Perhaps the copy and delete should be combined into moves. So instead
of:

   alter(.)
   alter(A/B)
   alter(X/Y)
   rotate(A, X/Y/Z)
   rotate(X, A/B/C)
   alter(A)         (pre-rotate X/Y/Z)
   copy(A/B)
   alter(X)         (pre-rotate A/B/X)
   copy(X/Y)
   alter(A/B/C)     (pre-rotate X)
   delete(A/B/C/Y)
   alter(X/Y/Z)     (pre-rotate A)
   delete(X/Y/Z/B)

we have:

   alter(.)
   alter(A/B)
   alter(X/Y)
   rotate(A, X/Y/Z)
   rotate(X, A/B/C)
   alter(A)           (pre-rotate X/Y/Z)
   alter(X/Y/Z)       (pre-rotate A)
   move(X/Y/Z/B, A/B)
   alter(X)           (pre-rotate A/B/X)
   alter(A/B/C)       (pre-rotate X)
   move(A/B/C/Y, X/Y)

And we still have the problem that the receiver cannot process the
earlier rotates and moves until the final move is received.

-- 
Philip Martin | Subversion Committer
WANdisco | Non-Stop Data
www.wandisco.com

Reply via email to