Mimo, że zarówno klient jak i serwer Subversion nie implementuje w pełni standardu DeltaV, to wciąż istnieje cząstka interoperacyjności WebDAVa, z której możemy się cieszyć: autowersjonowanie.
Autowersjonowanie jest opcjonalną funkcją zdefiniowaną w
standardzie DeltaV. Typowy server DeltaV odrzuci żadania
ignoranckiego klienta WebDAVa próbującego dokonać operacji
PUT na pliku będącym pod kontrolą wersji.
Aby dokonać zmian w wersjonowanym pliku, serwer oczekuje serii
odpowiednich żadań wersjonujących, czegoś w stylu:
MKACTIVITY, CHECKOUT,
PUT, CHECKIN. Jeżeli jednak
nasz serwer DeltaV wspiera autowersjonowanie, żądania zapisu
od zwykłych klientów WebDAVa będą akceptowane. Serwer wtedy
zachowuje się jakby klient przesłał
odpowiednią sekwencję żądań wersjonujących i po cichu zapisuje
zmiany (commit). Innymi słowy, pozwala serwerowi DeltaV współpracować
ze zwykłymi klientami WebDAVa, które nie wiedzą nic o wersjonowaniu.
Fakt, że tak wiele systemów operacyjnych ma wbudowanego klienta WebDAV sprawia, że uwywanie autowersjonowania może być niezwykle atrakcyjne dla administratorów pracujących z użytkownikami nieposiadającymi odpowiedniej wiedzy technicznej. Wyobraź sobie biuro z komputerami wyposażonymi w MS Windowsa bądź Mac OSa. Każdy użytkownik „montuje” repozytorium Subversion, które dla niego wygląda na zwykły udział sieciowy. Używają go tak jak zwykle: otwierają, edytują i zapisują pliki. W międzyczasie, serwer automatycznie wersjonuje wszystko. Dowolny administrator (bądź przeszkolony użytkownik) nadal może używać klienta Subversion by przeglądać historię zmian i odzyskiwać starsze wersje plików.
Scenariusz ten nie jest fikcją—to rzeczywistość, która
jest dostępna w Subversion od wersji 1.2. Aby aktywować autowersjonowanie
w mod_dav_svn, użyj dyrektywy
SVNAutoversioning w pliku
httpd.conf wewnątrz bloku
Location:
<Location /repos> DAV svn SVNPath /var/svn/repository SVNAutoversioning on </Location>
Gdy autowersjonowanie jest włączone, żądania zapisu otrzymane od klienta WebDAV skutkują automatycznymi zapisami w repozytorium (automatic commits). Generowany jest standardowy log komunikatów i dołączany do każdej rewizji.
Zanim jednak aktywujesz tą funkcję, zrozum w co się
pakujesz. Aplikacje klienckie WebDAV mają w zwyczaju dokonywać
wielu żądań zapisu, co generuje ogromną
liczbę autoomatycznie zatwierdzonych rewizji. Przykładowo,
podczas zapisu pliku wielu z klientów wykona żądanie PUT
pustego pliku (w ramach rezerwacji nazwy) po czym dokona
kolejnego żadania PUT z danymi. Jedna prosta
operacja zapisu pliku skutkuje powstaniu dwóch rewizji. Rozważ też,
że wiele programów zapisuje zmiany automatycznie co klika minut,
co powoduje powstanie kolejnych rewizji.
Jeśli skonfigurowałeś program wysyłający emaila po otrzymaniu
haczyka „post-commit”, zastanów się nad wyłączeniem
go dla całego repozytorium lub niektórych jego folderów w zależności
do tego, czy uznasz zalew emaili za informacje wartościową.
Dobry program post-commit'owy potrafi odrozróżnić transakcje
utworzone przez autowersjonowanie od tych stworzonych przez
normalną operację zapisu wersji. Sztuka polega na przeglądnięciu
własności rewizji w poszukiwaniu właściwości nazwanej
svn:autoversioned. Jej obecność
wskazuje na to, że rewizja została stworzona przez
zwykłego klienta WebDAV.
Kolejną użyteczną rzeczą, przydatną podczas korzystania
z autowersjonowania, jest Apache'owy moduł mod_mime.
Jeśli klient WebDAV doda nowy plik do repozytorium,
użytkownik nie będzie miał okazji ustawić flagi
svn:mime-type. Mogłoby to spowodować, że
plik reprezentowany byłby przez standardową ikonkę podczas
przeglądania udziału oraz nie miałby przypisanej domyślnej
aplikacji. Rozwiązaniem mógłby być administrator (lub inna
osoba zaznajomiona z Subversion), który by sprawdzał co jakiś
czas kopię roboczą i ręcznie ustawiał własność svn:mime-type
odpowiednim plikom. Jak łatwo się domyślić, mogłoby to trwać
w nieskończoność. Zamiast tego, możesz ustawić dyrektywę
ModMimeUsePathInfo w bloku
<Location> (Subversion):
<Location /repos> DAV svn SVNPath /var/svn/repository SVNAutoversioning on ModMimeUsePathInfo on </Location>
Dyrektywa ta pozwala modułowi mod_mime na próbę
automatycznej dedukcji typu MIME nowych plików, które dostają się
do repozytorium przez autowersjonowanie. Moduł ten sprawdza
rozszerzenie i, o ile to możliwe, zawartość takiego pliku.
Jeżeli będzie pasował do zdefiniowanych popularnych wzorców,
własność svn:mime-type zostanie ustawiona
automatycznie.