Daniel Shahaf wrote on Tue, Jun 25, 2013 at 21:53:07 +0000: > On Tue, Jun 25, 2013 at 12:42:55PM +0100, Philip Martin wrote: > > R /A (from /X/Y/Z:1) > > A /A/B (from /A/B:1) > > R /A/B/C (from /X:1) > > D /A/B/C/Y > > R /X (from /A/B/C:1) > > A /X/Y (from /X/Y:1) > > R /X/Y/Z (from /A:1) > > D /X/Y/Z/B > > > > What if we had three trees? > > % svnmucc -mm -U $URL \ > rm A rm M rm X \ > cp HEAD X/Y/Z A cp HEAD A/B/C M cp HEAD M/N/O X \ > cp HEAD A/B A/B cp HEAD M/N M/N cp HEAD X/Y X/Y \ > rm A/B/C rm M/N/O rm X/Y/Z \ > cp HEAD X A/B/C cp HEAD A M/N/O cp HEAD M X/Y/Z \ > ; > r2 committed by danielsh at 2013-06-25T21:51:29.046012Z > % svn log qv -r2 $URL > ------------------------------------------------------------------------ > r2 | danielsh | 2013-06-25 21:51:29 +0000 (Tue, 25 Jun 2013) > Changed paths: > R /A (from /X/Y/Z:1) > A /A/B (from /A/B:1) > R /A/B/C (from /X:1) > R /M (from /A/B/C:1) > A /M/N (from /M/N:1) > R /M/N/O (from /A:1) > R /X (from /M/N/O:1) > A /X/Y (from /X/Y:1) > R /X/Y/Z (from /M:1) > ------------------------------------------------------------------------ > > How would such a thing be represented? >
First sketch: move(/A/B, /X/Y/Z/B) move(/M/N, /A/B/C/N) move(/X/Y, /M/N/O/Y) rotate(/A, /M/N/O, /X, /A/B/C, /M, /X/Y/Z) The final rotate() call looks tricky: it moves something to /M and something to /M/N/O, so the former move must be handled first (regardless of which target appears first in the cyclic list of arguments). The "temporary node" (/./././.) issue I mentioned in muy previous mail applies here, too. As I said on IRC: I'm starting to wonder if removing rotate() from the API (replacing it by N move() calls) would be the right thing. > > How would Ev2 describe that? Perhaps