C. Michael Pilato <cmpil...@collab.net>: > The "replace" > action found in the dumpfile is just a compacting of some delete operation > and a subsequent add or copy into a single verb, and that only because it > helps sequential processors of the dump stream avoid possibly notifying > about multiple actions on the same path
Thank you. That is beautifully clear and I will use some variant of it it in the draft I am working up. Which brings up a question: should a delete on a non-empty directory succeed or fail? If it should succeed, then R truly is D + A. If it should fail, then R lacks a precondition that D + A has. > (My prior response was the result of my misreading your phrase "delete plus > add of the new text" as meaning "removing all the contents of the file, and > then adding all new contents of the same file". I see now that you were > talking about "container" operations, not content ones. Sorry about that.) No problem. Easy mistake to make. > >> [1] Most of the time. A replacement can have a copyfrom source, in which > >> case its not strictly a new line of history for that object. > > > > I think I get this part. When you replace with a copy source, you're > > destroying the container that existed at this path, abd replacing it with > > a new container that has history extending back through the copy source. > > Is that correct? > > Yup! IMO, part of the reason this stuff is confusing is that your terminology is inadequate; see previous note to Daniel Shahaf. I get what you mean by "container" but I think that label confuses more than it enlightens. In the draft I'm using the term "flow" for a sequence of actions on a path. > I was trying to think through the generalities here, too. I believe they > boil down to this: > > "delete" stands alone. It never has text. Never has properties. > Never has copyfrom. > > "add" and "replace" can have text if the added object is a file. The > text is the contents of the added object as it appears in the committed > revision. "add" and "replace" of directories can not have text. > > "add and replace" can have properties -- the set of properties present > on the added file/directory in the committed revision. > > "add and replace" can have copyfrom information, indicating that the > "added" object does not truly represent the creation of a new line of > history, but is instead a continuation of a pre-existing line of > history. This is still an addition of sorts in that the object is newly > added to the set of its parent directory's list of children. > > But I haven't double-thunk that for complete accuracy. I'm actually pretty sure this is all correct - but it leaves open the question of whether "change" can have copyfrom, and what that means in the case of directories. I checked, and "change" is what's used for a normal file content modification - see for example the change to bar/foo.c in sussman's example in the notes file. There are a couple of different possibilities here. One is that change with a copyfrom is illegal. In that case, every directory change is required to be a property change, since directory nodes can't have text. This is what my draft currently says. Another possibility is that copyfrom does its history-attachment thing and the note is afterwards part of two flows. That would be rather like a baby version of a DVCS merge. You wrote: > This is still an addition of sorts in that the object is newly > added to the set of its parent directory's list of children. For what operations is this list of children significant, and how? Which circles back to my first question about D on a directory. -- <a href="http://www.catb.org/~esr/">Eric S. Raymond</a>
signature.asc
Description: Digital signature