Daniel Shahaf wrote on Thu, Jun 27, 2013 at 13:06:19 +0300: > I think the above means we have to modify move() to use SRC arguments > relative to the start state of the edited tree, rather than to its > current state. If we do that, we could represent your commit as: > mv(A/B/C, A); mv(A/B, A/B); mv(A, A/B/C);.
FWIW, there's an advantage to the existing "SRC refers to current state" semantics: when a node ceases to have a name in the in-flight tree, it will definitely not be referred to again, and thus can be disposed of (deleted from memory, wc.db, etc). Under "SRC refers to the start state" approach, scenarios such as replace(A) move(A/mu, A2/mu) would want to know to keep A/mu around, if possible (to avoid having to re-fetch it from the server/filesystem); but I don't believe Ev2 has a mechanism for saying "FYI, I'll refer to <this> child later as SRC of a copy or move", so let the consumer know that mu will be needed but siblings of mu won't be needed.