Somewhere in the middle of my MPx200 adventure, something ate all of my repeating annual calendar entries, including birthdays and anniversaries. Personally, I blame PocketMac, but it's really my fault for not keeping a good backup of my calendar.

That's not to say that I don't have a backup--I sync iCal with my home web server every few minutes--but there's no way to track changes or dig up old versions of my calendar. Once entries are deleted, they're gone for good. What I really want is revision control for my calendar.

And now I have it. Through a feat of astounding geekiness, I've finished installing the subversion version control system on my home web server, and my calendar WebDAV share is actually a subversion repository. What that means is that every time iCal exports a new calendar to my home server, it's transparently checked into subversion in the background. I can get subversion to give me a list of all of the changes that have been made over time, generate diffs between specific versions, and even revert to older versions.

It's actually pretty easy. Just install Apache 2, and then install Subversion with the 'mod_dav_svn' Apache module. Configure up a virtual server and then add these lines to your virtual host config files:

      <Location /xxx>
        Dav svn
        AuthType Basic
        AuthName "Auth Required"
        AuthUserFile /etc/apache/htpasswd
        Require valid-user
        SVNPath /path/to/svn/repository
        SVNAutoversioning on
        AuthzSVNAccessFile /etc/apache2/svn_authz
      </Location>

Now create /path/to/svn/repository with svnadmin, reload apache, and you should have a nice, revision-controlled web-based file server. Most modern desktop OSes can mount WebDAV-enabled web servers just like a more-traditional file server. Both OS X and XP can do it natively, and there should be at least a dozen ways to accomplish it in Linux. This is almost certainly the easiest (cheap) way to get reliable version-controlled storage.

Thanks to Sterling Hughes and Justin Erenkrantz for providing inspiration and documentation.