While 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 already have integrated WebDAV clients, the use case for this feature can be incredibly appealing to administrators working with non-technical 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 auto-save 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 or not. 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 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.