Autowersjonowanie

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.