Autoversionierung

Obwohl der Subversion-Client kein vollständiger DeltaV-Client und der Subversion-Server kein vollständiger DeltaV-Server ist, gibt es trotzdem noch ein Schimmer an WebDAV-Interoperabilität, über den man sich freuen kann: Autoversionierung.

Autoversionierung ist ein optionales Merkmal, das im DeltaV-Standard definiert wird. Ein typischer DeltaV-Server wird einen unwissenden WebDAV-Client ablehnen, der ein PUT auf eine Datei unter Versionskontrolle anwenden möchte. Um eine versionskontrollierte Datei zu ändern, erwartet der Server eine Reihe exakter Versionierungsanfragen, soetwas wie MKACTIVITY, CHECKOUT, PUT, CHECKIN. Unterstützt der DeltaV-Server jedoch Autoversionierung, werden Schreibanforderungen von einfachen WebDAV-Clients angenommen. Der Server verhält sich, als habe der Client die entsprechenden Versionierungsbefehle erteilt und vollzieht die Übergabe im Verborgenen. Mit anderen Worten: es wird einem DeltaV-Server erlaubt, mit gewöhnlichen WebDAV-Clients zusammenzuarbeiten, die keine Versionierung verstehen.

Da so viele Betriebssysteme bereits über integrierte WebDAV-Clients verfügen, kann der Anwendugsfall für dieses Merkmal unglaublich attraktiv für Administratoren sein, die mit technisch unbedarften Benutzern arbeiten müssen. Stellen Sie sich ein Büro vor, in dem gewöhnliche Benutzer auf Microsoft Windows oder Mac OS arbeiten. Jeder Benutzer hängt das Subversion-Projektarchiv ein, das sich darstellt wie ein gewöhnlicher vernetzter Ordner. Sie verwenden den freigegebenen Ordner wie immer: öffnen Dateien, bearbeiten und sichern sie. In der Zwischenzeit versioniert der Server alles. Jeder Administrator (oder sachkundige Benutzer) kann immer noch einen Subversion-Client verwenden, um die Historie zu durchsuchen oder ältere Dateiversionen abzurufen.

Dieses Szenario ist keine Fiktion – es ist Wirklichkeit und es funktioniert seit Subversion 1.2. Um Autoversionierung in mod_dav_svn zu aktivieren, benutzen Sie die Anweisung SVNAutoversioning im Block <Location> der Datei httpd.conf:

<Location /repos>
  DAV svn
  SVNPath /var/svn/repository
  SVNAutoversioning on
</Location>

Wenn die Autoversionierung von Subversion aktiv ist, erzeugen Schreibanfragen von WebDAV-Clients automatische Übergaben. Eine allgemeine Protokollnachricht wird erzeugt und an jede Revision gehängt.

Bevor Sie dieses Merkmal aktivieren, sollten Sie verstehen, worauf Sie sich einlassen. WebDAV-Clients neigen dazu, viele Schreibanfragen abzusetzen, was zu einer riesigen Menge automatisch übergebener Revisionen führt. Beim Sichern von Daten beispielsweise geben viele Clients ein PUT einer 0-Byte-Datei aus (um somit einen Namen zu reservieren), gefolgt von einem weiteren PUT mit den eigentlichen Daten. Das einfache Schreiben der Datei zieht zwei einzelne Übergaben nach sich. Bedenken Sie auch, dass viele Anwendungen alle paar Minuten automatische Sicherungen machen, was zu noch mehr Übergaben führt.

Falls Sie ein Post-Commit-Hook-Programm verwenden, das E-Mail verschickt, empfiehlt es sich, die Erstellung der Mail zu unterbinden oder auf bestimmte Abschnitte des Projektarchivs zu beschränken; es hängt davon ab, ob Sie das Hereinprasseln der Mails immer noch als wertvolle Benachrichtigungen erachten oder nicht. Desweiteren kann ein kluges Post-Commit-Hook-Programm zwischen Transaktionen unterscheiden, die durch Autoversionierung erzeugt wurden und solchen, die von einer normalen Subversion Übergabeoperation ausgelöst wurden. Der Trick besteht darin, nach einer Revisions-Eigenschaft namens svn:autoversioned zu sehen. Falls es vorliegt, wurde die Übergabe durch einen gewöhnlichen WebDAV-Client ausgelöst..

Ein weiteres Merkmal, das eine sinnvolle Ergänzung zur Autoversionierung von Subversion sein kann, kommt aus dem Modul mod_mime von Apache. Falls ein WebDAV-Client dem Projektarchiv eine neue Datei hinzufügt, hat der Benutzer keine Gelegenheit, die Eigenschaft svn:mime-type zu setzen. Das könnte dazu führen, dass die Datei als allgemeines Icon angezeigt wird, wenn sie innerhalb eines Ordners über WebDAV-Freigabe betrachtet wird, und nicht mit einer bestimmten Anwendung verknüpft wird. Eine Abhilfe wäre ein Systemadministrator (oder eine andere Person mit Subversion-Kenntnissen) zum Auschecken einer Arbeitskopie und dem manuellen Setzen der Eigenschaft svn:mime-type, wenn es für bestimmte Dateien notwendig ist. Doch möglicherweise würden solche Aufräumarbeiten zu keinem Ende führen. Stattdessen können Sie die Anweisung ModMimeUsePathInfo in Ihrem Subversion <Location>-Block verwenden:

<Location /repos>
  DAV svn
  SVNPath /var/svn/repository
  SVNAutoversioning on

  ModMimeUsePathInfo on

</Location>

Diese Anweisung erlaubt es, mod_mime zu versuchen, den MIME-Typen von durch Autoversionierung frisch hinzugefügten Dateien herzuleiten. Das Modul schaut auf die Dateinamenserweiterung und möglicherweise ebenfalls auf den Inhalt; wenn die Datei bestimmten Mustern entspricht, wird die Eigenschaft svn:mime-type der Datei automatisch gesetzt.