Although the Subversion client is not a full DeltaV client, and the Subversion server is not a full DeltaV server, there’s still a glimmer of WebDAV interoperability to be happy about: autoversioning.
Autoversioning is an optional feature defined in the DeltaV
standard. A typical DeltaV server will reject an ignorant WebDAV client
attempting to do a PUT
to a file that’s
under version control. To change a version-controlled file, the server
expects a series of proper versioning requests: something like MKACTIVITY
, CHECKOUT
, PUT
, CHECKIN
.
But if the DeltaV server supports autoversioning, write requests from
basic WebDAV clients are accepted. The server behaves as though the client
had issued the proper series of versioning requests,
performing a commit under the hood. In other words, it allows a DeltaV
server to interoperate with ordinary WebDAV clients that don’t understand
versioning.
Because so many operating systems have already integrated WebDAV clients, the use case for this feature can be incredibly appealing to administrators working with nontechnical users. Imagine an office of ordinary users running Microsoft Windows or Mac OS. Each user “mounts” the Subversion repository, which appears to be an ordinary network folder. They use the shared folder as they always do: open files, edit them, and save them. Meanwhile, the server is automatically versioning everything. Any administrator (or knowledgeable user) can still use a Subversion client to search history and retrieve older versions of data.
This scenario isn’t fiction—it’s real and it works, as of Subversion
1.2 and later. To activate autoversioning in mod_dav_svn, use the SVNAutoversioning
directive within the httpd.conf
Location
block, like so:
<Location /repos> DAV svn SVNPath /var/svn/repository SVNAutoversioning on </Location>
When Subversion autoversioning is active, write requests from WebDAV clients result in automatic commits. A generic log message is automatically generated and attached to each revision.
Before activating this feature, however, understand what you’re
getting into. WebDAV clients tend to do many write
requests, resulting in a huge number of automatically committed revisions.
For example, when saving data, many clients will do a PUT
of a 0-byte file (as a way of reserving a name),
followed by another PUT
with the real
file data. The single file-write results in two separate commits. Also
consider that many applications autosave every few minutes, resulting in
even more commits.
If you have a post-commit
hook program that sends
email, you may want to disable email generation either altogether or on
certain sections of the repository; it depends on whether you think the
influx of emails will still prove to be valuable notifications. Also, a
smart post-commit
hook program can distinguish between
a transaction created via autoversioning and one created through a normal
Subversion commit operation. The
trick is to look for a revision property named svn:autoversioned
. If present, the commit was
made by a generic WebDAV client.
Another feature that may be a useful complement for Subversion’s
autoversioning comes from Apache’s mod_mime
module. If a WebDAV client adds a new file to the repository, there’s
no opportunity for the user to set the svn:mime-type
property. This might cause the
file to appear as a generic icon when viewed within a WebDAV shared
folder, not having an association with any application. One remedy is to
have a sysadmin (or other
Subversion-knowledgeable person) check out a working copy and manually set
the svn:mime-type
property on necessary
files. But there’s potentially no end to such cleanup tasks. Instead, you
can use the ModMimeUsePathInfo
directive in your Subversion <Location>
block:
<Location /repos> DAV svn SVNPath /var/svn/repository SVNAutoversioning on ModMimeUsePathInfo on </Location>
This directive allows mod_mime
to
attempt automatic deduction of the MIME type on new files that enter the
repository via autoversioning. The module looks at the file’s named
extension and possibly the contents as well; if the file matches some
common patterns, the file’s svn:mime-type
property will be set
automatically.