Hlavní navigace

Výlet do říše verzí: konfiguraci CVS - dokončení

8. 3. 2004
Doba čtení: 5 minut

Sdílet

Týden uběhl jako voda, je zde opět krásné, veselé a pracovní pondělí a s ním dokončení našeho povídání o konfiguraci CVS.

Přístupová práva

Už v šestém dílu jsme si říkali o souboru passwd, ve kterém najdeme seznam uživatelů oprávněných k přístupu do CVS repository. Tehdy ještě všichni uživatelé mohli do repository zapisovat, ovšem často je vhodné některým uživatelům zápis do repository zakázat, zejména jde-li o uživatele pro anonymní CVS. CVS samotné nám nabízí v zásadě dva možné přístupy k regulaci práva zápisu.

První možností je soubor readers, obsahující na každém řádku jméno uživatele, který do repository nesmí zapisovat, zatímco všichni ostatní můžou. Nebo naopak můžeme vytvořit soubor writers, obsahující jména uživatelů, kteří do repository zapisovat můžou, zatímco nikdo jiný ne. Přitom soubor writers má přednost: pokud existují oba soubory, právo zápisu mají pouze uživatelé z writers.

checkoutlist

Modul CVSROOT má jednu zajímavou zvláštnost. V repository, kde je modul uložen, jsou totiž kromě obvyklých RCS souborů neustále udržovány i vycheckoutované kopie všech konfiguračních souborů, takže v repository najdeme klasický RCS soubor CVSROOT/config,v i sou­bor CVSROOT/config, skrývající poslední revizi tohoto konfiguračního souboru. Jakmile pak commitneme do modulu jakoukoliv změnu, obdržíme tajemnou hlášku:

cvs commit: Rebuilding administrative file database

To znamená, že se v repository zároveň automaticky zaktualizovala i ona vycheckoutovaná kopie. Díky tomu nemusí CVS při načítání konfigurace pracovat s RCS soubory; můžete si za domácí úkol rozmyslet všechny důvody, proč je to tak správně.

Do modulu CVSROOT však nemusíme ukládat pouze konfigurační soubory pro CVS. Vycheckoutovaná kopie se totiž kromě konfiguračních souborů udržuje i u všech dalších souborů z tohoto modulu, které jsou uvedeny právě v souboru checkoutlist, co jméno, to řádek. Pokud tedy chceme udržovat v repository aktuální verzi třeba souboru cvslog.pl, stačí do souboru checkoutlist přidat odpovídající řádek, presto finito.

Konfigurace zpracování commitu

Modul CVSROOT obsahuje čtyři soubory, které přicházejí ke slovu v různých fázích commitu, a to v tomto pořadí: rcsinfo, verifymsg, commitinfo a loginfo.

Ve všech těchto souborech jsou povoleny prázdné řádky i komentáře. Všechny čtyři soubory mají navíc společný formát – na každém řádku uvedeme nejdříve regulární výraz odpovídající množině souborů, pro kterou je daný řádek určen. Výraz matchuje cestu ke commitovaným souborům v rámci repository, přičemž platí, že se použije první řádek s odpovídajícím výrazem; pokud žádný takový nebyl nalezen, použije se řádek, který obsahuje místo regulárního výrazu DEFAULT. Navíc se použijí všechny řádky, kde je místo regulárního výrazu uvedeno ALL.

Za regulárním výrazem a nějakou tou mezerou pak musí být uveden program resp. soubor, který se má použít – pamatujte, že všechny tyto konfigurační soubory jsou interpretovány na serveru, proto na serveru budou vyhledávány a spouštěny i všechny programy!

Pravděpodobnost, že jste předchozí odstavce pochopili, není zřejmě příliš velká. Nuže, příklad dokáže nahradit tisíc slov…

# Pro adresář x/ v modulu zz
^zz/x   foo --parametr
# Pro ostatní adresáře v modulu zz
^zz     bar | baz
# Pro ostatní moduly
DEFAULT baz | bar
# Pro všechny commity spustit ještě...
ALL     quux -x 

Nejdříve přichází na řadu soubor rcsinfo, který obsahuje jména souborů se šablonami pro log messages (včetně celé cesty). Při commitu se tedy vybere příslušná šablona, kterou stačí jen vyplnit. Pokud však používáme parametr -m, šablona nám samozřejmě nebude nic platná.

Odeslaná log message se dále zkontroluje odpovídajícím příkazem podle verifymsg, přitom se za příkaz a všechny uvedené parametry přidá celá cesta k souboru s log message. Program může navíc ve výchozí konfiguraci log message v onom souboru i libovolně upravovat. Výstup zavolaného programu se vypíše uživateli, a pokud vrátí program nenulovou hodnotu, commit je zastaven. V tomto souboru není povoleno použít řádky s ALL.

Dále se spustí odpovídající program podle souboru commitinfo, s tím, že se za uvedenou příkazovou řádku ještě připojí celá cesta k repository a seznam všech commitovaných souborů. Pokud program vrátí nenulovou hodnotu, commit je zrušen.

Po vlastním commitu pak přijde na řadu program z loginfo, kterému se na standardním vstupu objeví informace o commitu (seznam souborů, log message, …). Navíc lze do příkazové řádky programu vkládat seznam souborů a jejich revizí apod. (detailní popis naleznete v dokumentaci).

Soubor loginfo je z celé čtyřky využíván jednoznačně nejčastěji, obvykle se z něj spouštějí skripty pro rozesílání emailů s informacemi o commitu, zprávy na IRC apod. Ty nejzajímavější skripty neopomeneme zmínit v příštím dílu.

Často z těchto souborů spouštíme nějaké ad hoc skripty, které upravujeme pro použití v tom onom konkrétním repository. Takže je príma, pokud si i u nich udržujeme nějakou historii změn a máme je vždy po ruce spolu se zbytkem repository. Proto se často udržují právě v modulu CVSROOT, přestože to nejsou žádné konfigurační soubory. Blíže viz popis souboru checkoutlist.

config

Tento soubor je konečně konfiguračním souborem par excellence. Najdeme v něm směs obecných voleb ovlivňujících nejrůznější stránky funkce CVS. Na rozdíl od ostatních souborů zde nedochází k rozvoji proměnných, zato jsou povoleny komentáře i prázdné řádky.

Jinak na každém řádku nalezneme jméno volby, rovnítko a její hodnotu; pozor, nejsou povoleny žádné mezery povalující se okolo! My se nyní podíváme na ty nejzajímavější volby, kompletní seznam naleznete opět v dokumentaci.

CS24_early

SystemAuth
Pokud má tato volba hodnotu yes (výchozí), pserver se v případě neúspěšné autentizace podle CVSROOT/passwd pokusí ještě autentizovat uživatele podle /etc/passwd. Toto chování lze vypnout nastavením na hodnotu no.
UserAdminOptions
Ve výchozí konfiguraci mohou příkaz cvs admin využívat jen uživatelé, kteří jsou členy skupiny cvsadmin, ostatní mají povoleno pouze využití parametru -k. Hodnota této volby obsahuje písmena všech povolených parametrů tohoto příkazu, takže například UserAdminOptions=mkst povolí obyčejným uživatelům kromě -k i změnu log message, stavu revize a popisu souboru.
LockDir
Při použití této volby nebudou zámky jednotlivých instancí CVS vytvářeny přímo v repository, ale v separátní adresářové struktuře. To je velice praktické, poněvadž pak nemusíme uživatelům, kteří mají povolené pouze čtení, přesto poskytovat fyzické právo k zápisu do repository. Krom toho můžeme adresář se zámky umístit na nějaký rychlý filesystém ve stylu tmpfs. Před využitím této volby se ujistěte, že žádný uživatel nepoužívá CVS verze starší než 1.11.

A blížíme se pomalu do finiše, dámy a pánové! V příštím dílu totiž část o CVS velkolepě uzavřeme přehlídkou všelijakých užitečných skriptů a rozšíření, které nám mohou prostě jen zpříjemnit práci, ale také třeba otevřít úplně nové obzory.

Pokud máte nějaké zvláště oblíbené udělátko, napište mi o něm, abych na něj náhodou nezapomněl! Nejlépe mi dejte vědět buďto emailem, nebo v diskusi pod článkem.

Byl pro vás článek přínosný?