> -----Original Message----- > From: Ben Reser [mailto:b...@reser.org] > Sent: zaterdag 4 april 2015 23:49 > To: Johan Corveleyn > Cc: Subversion Development > Subject: Re: branching over mod_dav 2.4.6 is O(tree) > > On 4/4/15 1:47 PM, Johan Corveleyn wrote: > > I only know SVN, not much of httpd and certainly not much of DAV. So > > I'm reading all this from behind "SVN glasses". In what cases would > > SVN send lock tokens (in the form of If headers) when executing a > > (server-side) copy? > > If by server-side copy you mean `svn cp $URL1 $URL2` I don't believe that will > ever happen. > > However a trivial operation like the following would result in a very slow > copy > even with the patch I posted (assuming that foo is a large tree that has at > least one file locked in it that the client holds a lock token for): > > svn rm foo > svn cp bar foo > svn ci > > > > (I'm wondering: when executing a wc-repos copy ('svn copy $WC $URL') > > this issue is also relevant, isn't it? Because such a copy is > > internally executed as a copy on the server combined with > > modifications from the WC, right? Maybe that's the case where the > > client could be sending lock tokens together with the copy?) > > Don't believe we'd send any lock tokens in that case but I could be wrong.
In this case we don't send lock tokens. But when we perform a $ svn rm bar --force $ svn cp foo bar $ svn ci -m "" We will send the lock tokens that exist below bar pre-replacement. Subversion does send the path (=full url) with the lock token, so it might be possible to optimize for that case. There is another interesting difference between generic DAV and Subversion. Subversion doesn't operate on the public url when committing, while generic DAV clients do. Our ra operations that produce a revision always work on a transaction which has a specific (hidden) url. I think mod_dav would be able to tell the difference. (In mod_dav_svn we just detect whether a client is an is_svn_client, but we don't want such logic in mod_dav itself) Bert