I run a write-through proxy for svn.apache.org using mod_dav_svn's
SVNMasterURI directive.  Commits now fail when using trunk on the client
and slave because they negotiate svndiff2 which the s.a.o master does
not support.

I can reproduce locally using a trunk slave and 1.9 master:

  $ svn import -mm repo/format http://localhost:8888/slave/f
  Adding         repo/format
  svn: E185000: Svndiff has invalid header

In the past we supported different versions on the master and slave and
we introduced the SVNMasterVersion directive to configure it.
Unfortunately that information is not immediately available in
get_vsn_options() where the server advertises some commit features.  If
I simply remove the SVN_DAV_NS_DAV_SVN_SVNDIFF2 header from
get_vsn_options() then I can commit.

I'm not sure how we fix this.  Do we delay the svndiff2 negotiation
until later in the commit?  Do we abandon mixed master/slave versions?

There is a similar problem with SVN_DAV_NS_DAV_SVN_PUT_RESULT_CHECKSUM,
the slave advertises support but the master does not provide it.  In
this case the commit does not fail although neither the client nor the
server sends X-SVN-Result-Fulltext-MD5.  I think that means we commit
without checksum verification.

-- 
Philip

Reply via email to