subversion-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Greg Stein <>
Subject Design query: Ev2 and multiple moves
Date Sun, 06 Nov 2011 00:21:04 GMT
Julian raised a question when I saw him in September: how does Ev2
deal with a node swap? ie. swap the contents of A and B, retaining
metadata that they were moves [rather than copies from history].

In Ev2, we attempt to disallow "mv A B ; mv B C". The semantics around
the interface say you should just do "mv A C".

But to accomplish an A/B swap, you must "mv A temp; mv B A; mv temp
B". Thus, A -> temp -> B, which is nominally disallowed in the Ev2

Question: how to resolve this, given that we're starting to record
*move* information? (the current interface could do: mv(replacing) A
B; copy B@REV A)

I've been thinking about a "multiple move" API to describe these kinds
of changes. It isn't just a simple swap, since you could rotate
content through an arbitrary set of N nodes. Suppose we had an
interface that specified N nodes, and node[i] is moved to node[i+1],
with the last one moving to node[0]. Would this be sufficient? I
suspect that any moves *outside* of this ring uses the standard
interface -- it is not participating in the rotation. Hrm. Maybe the
API is named "rotate" rather than multiple move. (I say rotate because
I'm envisioning the larger case where you have (say) 5 nodes, and each
piece of content rotating to the next; looks like a clock or musical

I'm not a master of topography or graphs, but I suspect that any given
permutation of N nodes can be reduced to a set of rotations of subsets
of those N nodes. Thus, a general "rotate" API should be sufficient.


ps. there is a corollary, unstated question of whether these kinds of
rotations/multiple-move can be recorded in our WC schema.

View raw message