views:

1317

answers:

1

I've had a repo that I would access, using TortoiseSVN, from only the same computer on which the Subversion win32 service was running, and it's been working for a while now. I decided to try to set up mod_dav_svn to be able to get at it from elsewhere. When I try to access it, I get this error in the browser:

<D:error>
<C:error/>
<m:human-readable errcode="165005">
Could not open the requested SVN filesystem
</m:human-readable>
</D:error>

...and these errors in the log:

 (20014)Internal error: Expected repository format '3' or '5'; found format '9'
 Could not fetch resource information.  [500, #0]
 Could not open the requested SVN filesystem  [500, #165005]
 Could not open the requested SVN filesystem  [500, #165005]

Here's what's in my .conf:

LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

and

DAV svn
SVNPath e:/dev/.svn

I put the /.svn because before I did that, I was getting the same error text on the client (but with code 720002) and the log showed Apache was looking for e:/dev/format, which doesn't exist, but e:/dev/.svn/format does.

I read this, and noticing that my subversion was 1.5.1 and 1.5.5 was out, and that I had upgraded TortoiseSVN recently, I thought that maybe there was some incompatibility (this may not make sense, I don't know how it works exactly.) So I downloaded 1.5.5, stopped the service, copied the DLLs and EXEs overtop, restarted the service, copied the new .so files to Apache's modules directory, and restarted httpd. No luck.

Any suggestions? This particular 'format 9' thing seems to be rare...

+4  A: 

please bear with me through the following explantion, it justifies my hypothesis on your problem and will give you some insights as to how SVN works:

In subversion you have 2 places containing files: the repository and the working copy.

The repository stores the history, you checkout from the repository in a working copy work there and commit back to the repository.

Svnervice and apache svn both allow you to expose a repository Tortoise allows you to create working copies from an exposed repository.

From what you posted I think you are trying to expose a working copy instead of a repository (the ".svn" folder is typical of a working copy and I bet the e:\dev.svn is a checkout directory).

go in the service management and find out the command line which runs the svn service it should contain a string like the following : svnserve -d -r {somepath}

The {somepath} is the path to your repository. This is the path you should provide in the SVNPath configuration directive of apache.

One last thing : do NOT allow R/W access to the same repository using both svnserve and apache svn, it will probably corrupt your repository by exposing it to race conditions on the transaction locks

Jean
D'oh! Thanks! Yep, I pointed it to e:\svn and now it works great.And thanks for noting the race condition. I guess I'll just forget svnserve and try to get TortoiseSVN to go through the web server now.
Kev
using tortoise and the web server shouldn't be a problem :). You should know that in my experience, the http acces module is slower than the svn access module.
Jean
So rather than go through Apache at all, just use the SVN port. If I need encryption, use SSH?
Kev
If your project isn't too large, you will be fine with apache and it's easier to setup in corporate envs (it works through proxies).If speed ever becomes an issue test the ssh+svn way, if it's still not enough there are distributed solutions, especially useful for high latency networks
Jean