C. Michael Pilato <cmpil...@collab.net>:
> > Does a file replace differ in any way from a delete plus add of the new 
> > text?
> 
> In Subversion, yes.  A replacement is, like an add or a delete, an operation
> at the node level, not an operation on the contents of that node.  A replace
> is an addition of a new object[1] -- with its own new line of version
> control history -- that is coincidental with the removal of some previously
> existing object that occupied the same path.

I still don't understand how this differs from a delete followed by an add.
Explain it to me like I'm reallllyyy stuuupid, please, so I can document it
and you never have to explain it again.

When I add a file at a given path, it creates new object with a
history that is tracked.  When I delete that path, I destroy the 
container as well as the content.  If I subsequently create a new
file at the same path, it's a new object with its own history.

How is a replace different?

> [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?

> > Can a replace include a property section?
> 
> Yes.

So, everything except a delete can include properties and they all
work the same way. Correct?
 
> > Does a replace always have text associated with it, or can it have a
> > copyfrom source?
> 
> You can have a replace with a copyfrom source (a "replace with history", as
> we call it).  You can even have a replace with a copyfrom source *and* text,
> such as would result from this on the client side:
> 
>   $ svn rm dir/file.txt
>   $ svn cp otherdir/otherfile.txt dir/file.txt
>   $ echo "Replacement text" > dir/file.txt
>   $ svn ci -m "Replace dir/file.txt with a copy of otherdir/otherfile.txt\
>   and replace its text, too."

I'll include this in the document I'm working up.

> > If a file replace can have a copyfrom source, how does replace with a
> > copyfrom source differ from add with a copyfrom source? 
> 
> The differ only in the fact that a replace implies the simultaneous deletion
> of some other object which previously lived at that path.

Got it.  That case I understand, it's how they differ in the non-copyfrom 
case that still confuses me.

> > How does a "change" differ from a "replace"?  My guess is that
> > "change" is issued for nodes that are pure property changes with no
> > file content changes; is this correct?
> 
> You are correct.

OK. 

I'm working up a second, more formal draft of the dumpfile description.
I'll post it here for review.
-- 
                <a href="http://www.catb.org/~esr/";>Eric S. Raymond</a>

Reply via email to