Stephen Butler wrote on Tue, Dec 20, 2011 at 14:08:17 +0100:
> 
> On Dec 20, 2011, at 12:51 , Eric S. Raymond wrote:
> 
> > Still working on it as I await restoration of commit access.  Here's the
> > 0.4 version.  Note the two open questions and the buglet.
> 
> [[[
> 1. Is it true that a replace operation on a directory *must*
> have a copyfrom source?
> ]]]
> 
> No.  A replace operation can create a "fresh" item without prior 
> history.  For example, the following node record is acceptable to 
> 'svnadmin load', assuming there's already a file at ^/omega.
> 

And this is how to produce such a thing:

svnadmin create r
svn checkout file://$PWD/r wc
cd wc
mkdir A; touch iota; 
svn add A iota
svn commit -madd
svn up
do-replace() {
  svn rm A iota
  mkdir A; touch iota; 
  svn add A iota
}
do-replace
svn commit -mreplace
svnadmin dump --deltas --incremental -r2 ../r


Some other definitions that work are:

do-replace() {
  svn rm A iota
  mkdir iota; touch A;
  svn add A iota
}

do-replace() {
  svn rm A iota
  svn commit -m rm
  svn up
  svn copy ^/A@1 A; svn copy ^/iota@1 iota;
}

And even:

do-replace() {
  svn rm A iota
  svn cp ^/@0 A; svn cp ^/@1 iota;
  # well-defined; does not cause a loop
}

> [[[
> Node-path: omega
> Node-kind: file
> Node-action: replace
> Prop-content-length: 30
> Text-content-length: 9
> Text-content-md5: a2f613b8081a42cc0ff004f1191fe59e
> Text-content-sha1: 772ec56b2bff8db0bb4adb065ce9f212838a5143
> Content-length: 39
> 
> K 3
> foo
> V 7
> new foo
> PROPS-END
> new text
> 
> 
> ]]]
> 

Reply via email to