Subversion, mod_dav_svn, and "special Subversion resources" ...

Sunday, August 29, 2010 categories: dav, svn, work

This last week a coworker was trying to manually manage which revisions were being built by our continuous integration system. However, doing so without a complete understanding of exactly how to approach the problem. Not to mention the fact that the continuous integration system provides a mechanism to specify the revision as a parameter for the build.

In an effort to minimize the amount of interaction required, as well as to apply a level of control, my coworker was supplying the build system with a URL like https://<server>/<repo>/!svn/bc/<revision>/<path> which is what a Subversion client that supports HTTP/DAV to access repositories uses to retrieve specific revisions, as well as other revision information. This failed with a very angry exception, that the URL didn't support the REPORT verb (well, it kind of said that).

As it turns out, there are -- quite understandably, a number of special URLs for accessing various pieces of information about the history of items within a repository. These "private" URLs are currently defined in http://svn.apache.org/repos/asf/subversion/trunk/subversion/mod_dav_svn/dav_svn.h and the comments seem to suggest that they are extensions above and beyond DAV.

The Subversion Book discusses mod_dav_svn, and even mentions that the '!svn' part can be changed with the SVNSpecialURI configuration directive. Other than that it doesn't really say much about the special URLs. All of this suggests that these URLs should not be used explicitly. Without digging too much further, that's the conclusion I came to anyway. Was fun to read about though.