<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Autoversioning</title><link rel="stylesheet" href="styles.css" type="text/css" /><meta name="generator" content="DocBook XSL Stylesheets V1.73.2" /><link rel="start" href="index.html" title="Version Control with Subversion" /><link rel="up" href="svn.webdav.html" title="Appendix C. WebDAV and Autoversioning" /><link rel="prev" href="svn.webdav.basic.html" title="What is WebDAV?" /><link rel="next" href="svn.webdav.clients.html" title="Client Interoperability" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Autoversioning</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="svn.webdav.basic.html">Prev</a> </td><th width="60%" align="center">Appendix C. WebDAV and Autoversioning</th><td width="20%" align="right"> <a accesskey="n" href="svn.webdav.clients.html">Next</a></td></tr></table><hr /></div><div class="sect1" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="svn.webdav.autoversioning"></a>Autoversioning</h2></div></div></div><p>While the Subversion client is not a full DeltaV client, nor the Subversion server a full DeltaV server, there's still a glimmer of WebDAV interoperability to be happy about: it's called autoversioning.</p><p>Autoversioning is an optional feature defined in the DeltaV standard. A typical DeltaV server will reject an ignorant WebDAV client attempting to do a <code class="literal">PUT</code> 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 <code class="literal">MKACTIVITY</code>, <code class="literal">CHECKOUT</code>, <code class="literal">PUT</code>, <code class="literal">CHECKIN</code>. But if the DeltaV server supports autoversioning, then write-requests from basic WebDAV clients are accepted. The server behaves as if the client <span class="emphasis"><em>had</em></span> 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.</p><p>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 “<span class="quote">mounts</span>” the Subversion repository, which appears to be an ordinary network folder. They use the shared folder as they always do: open files, edit them, 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.</p><p>This scenario isn't fiction: it's real and it works, as of Subversion 1.2 and later. To activate autoversioning in <span class="command"><strong>mod_dav_svn</strong></span>, use the <code class="literal">SVNAutoversioning</code> directive within the <code class="filename">httpd.conf</code> Location block, like so:</p><pre class="screen"> <Location /repos> DAV svn SVNPath /var/svn/repository SVNAutoversioning on </Location> </pre><p>When SVNAutoversioning is active, write requests from WebDAV clients result in automatic commits. A generic log message is auto-generated and attached to each revision.</p><p>Before activating this feature, however, understand what you're getting into. WebDAV clients tend to do <span class="emphasis"><em>many</em></span> write requests, resulting in a huge number of automatically committed revisions. For example, when saving data, many clients will do a <code class="literal">PUT</code> of a 0-byte file (as a way of reserving a name) followed by another <code class="literal">PUT</code> 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.</p><p>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 <span class="command"><strong>svn commit</strong></span>. The trick is to look for a revision property named <code class="literal">svn:autoversioned</code>. If present, the commit was made by a generic WebDAV client.</p><p>Another feature that may be a useful complement for <code class="literal">SVNAutoversioning</code> comes from Apache's <code class="literal">mod_mime</code> module. If a WebDAV client adds a new file to the repository, there's no opportunity for the user to set the the <code class="literal">svn:mime-type</code> property. This might cause the file to appear as 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 <code class="literal">svn:mime-type</code> property on necessary files. But there's potentially no end to such cleanup tasks. Instead, you can use the <code class="literal">ModMimeUsePathInfo</code> directive in your Subversion <code class="literal"><Location></code> block:</p><pre class="screen"> <Location /repos> DAV svn SVNPath /var/svn/repository SVNAutoversioning on ModMimeUsePathInfo on </Location> </pre><p>This directive allows <code class="literal">mod_mime</code> 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, then the the file's <code class="literal">svn:mime-type</code> property will be set automatically.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="svn.webdav.basic.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="svn.webdav.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="svn.webdav.clients.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">What is WebDAV? </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Client Interoperability</td></tr></table></div></body></html>