On Mon, Sep 9, 2013 at 11:35 AM, Julian Foad <julianf...@btopenworld.com> wrote: > Branko Čibej wrote: >> Julian Foad wrote: >>> The design of Ev2 is based on the concept of incremental edits to a >>> "current" tree state. I
Not really. The core/original design was "random access editing". Then danielsh had a question about ordering, so I had to make a call. I see no problem with saying the *source* of a copy/move is from the original state, rather than the transient state. >>> feel that the idea that you could start editing the tree, deleting >>> subtrees, and then come to an operation that says "Now please recover one >>> of the subtrees that I earlier told you to delete" doesn't fit with that >>> philosophy. You say "recover", but that is an implementation issue. As has been pointed out, that is *trivial* for the FS. The working copy *may* receive a move() or copy() in the future, and we can cross that bridge when we get there. I think it is a long ways away. And when we *do* get there, I don't see a problem with retaining original state. (hopefully, we'll have stash/checkpoint by then, and so tossing around whole-states will be a cakewalk) >>> The model of operation of the "split-move" scheme is no more split than the >>> model implied by the "single-move" scheme; it's just more explicit. It >>> doesn't in any way change or add to the overall semantic content of >>> the edit, all it changes is the timing of the information, fore-warning the >>> consumer that a Please don't use the term "consumer". You have a Driver, and a Receiver. Those are the names since the beginning, and I haven't seen a reason to try and rename those terms. When I see "consumer", I think "consumer of the API" and have no idea which side you're talking about. So I have to stop and look for context. >>> forthcoming deletion is not to be regarded as final and >>> absolute. That fore-warning makes a sequential consumer implementation >>> feasible. >> >> I think you're assuming that an implementation that doesn't keep track of the >> initial state is simpler, or rather, "easier" to write. I don't agree with >> that >> assumption. The repository already has all history available, and the WC can >> "trivially" be taught to remember the initial state. > > Hmm, my comment about "makes it feasible" may have been unfounded: I agree > that we could relatively easily implement a consumer that works efficiently > with that scheme. In one possible implementation, purely for the purpose of > illustrating whether I've understood correctly, the "delete" operation would > not delete the subtree permanently until the end of the edit, and until then > the subtree would merely be moved aside or hidden from the current view, but > still able to be used as a move source, traced from a reference to its > "initial state" path. Yup. But for the near future: the *only* editor receiving a move() or copy() will be the FS editor, via a series of commit-time editors. > I still can't shake the feeling that it doesn't match the "sequential edit" > philosophy. Some sequencing is needed for parent/child purposes. > It seems to me that fundamentally "move away" Never heard of it :-) In regards to your note elsethread, you really want to call this remember(). You would also need it for delete() operations, since a child of a delete could be a move/copy source. I maintain that it isn't needed. We have the original state -- trivially, in fact, in the only editor of near-term concern. >... Cheers, -g