Výlet do říše verzí: administrace - modul CVSROOT

1. 3. 2004
Doba čtení: 6 minut

Sdílet

V této části naší rozpravy o administraci CVS nás čekají konfigurační soubory v modulu CVSROOT.

Vše o modulu CVSROOT

V minulém dílu jsme se zaměřili na „speciální operace“ přímo se soubory v nějakém modulu. V administrativním koutku sice zůstaneme, ovšem zároveň se dnes budeme bavit o něčem úplně jiném. Jednak změny, které provedeme, obvykle ovlivní celé repository, nikoliv pouze jeden modul, jednak si místo úprav metainformací budeme hrát spíše s konfigurací.

Všechny konfigurační soubory, se kterými budeme manipulovat, žijí v modulu CVSROOT a až na výjimky (třeba soubor passwd) se z našeho hlediska chovají jako obyčejné soubory uložené v CVS. Můžeme si je tedy checkoutovat, updatovat, upravovat a commitovat, co hrdlo ráčí, nebo i přidávat do tohoto modulu nové soubory.

Pojmenování modulu CVSROOT je poněkud nešťastné, tento termín se totiž zároveň už používá pro označení cesty k celému repository (jako parametr -d nebo proměnná prostředí $CVSROOT). Abychom se měli šanci vůbec zorientovat, budu striktně používat pro modul sousloví „modul CVSROOT“. Pokud někde uvidíte cestu v rámci CVS repository, například CVSROOT/passwd, pak zde CVSROOT samozřejmě také reprezentuje jméno modulu.

Maminko, já si chci nakonfigurovat CVS!

V konfiguračních souborech můžeme používat určité speciální proměnné, do kterých se dosadí v závislosti na aktuálním uživateli, jeho nastavení apod. Do souboru vložíme odkaz na proměnnou jako: ${PROMĚNNÁ} (za určitých okolností můžeme závorky vynechat, ovšem bude bezpečnější je tam raději vždy dávat). Mezi proměnné, které nastavuje přímo CVS, patří:

${USER}
Jméno uživatele, který pouští CVS (na serveru) – v zásadě uživatelské jméno, které jste použili při cvs login, i pokud (třeba kvůli asociaci v CVSROOT/passwd) ve skutečnosti CVS server běží na jiného uživatele.
${CVSROOT}
Absolutní cesta k repository; v podstatě to, co napíšete ke globálnímu parametru -d. Ovšem tato proměnná vždy obsahuje pouze lokální cestu, nikoliv různé přístupové metody oddělené dvojtečkami apod. Pokud tedy chceme uvést cestu třeba k souboru CVSROOT/rcsinfo, můžeme to zapsat jako ${CVSROOT}/CVSRO­OT/rcsinfo a vždycky nám to bude fungovat, ať je repository na disku kdekoliv a přistupujeme k němu jakkoliv.
${CVSEDITOR}, ${EDITOR}, ${VISUAL}
Editor, který používá CVS ke vkládání log message.

Krom toho můžeme při spuštění libovolného CVS příkazu nastavit i vlastní proměnné; v konfiguračním souboru se na ně pak odkazujeme stylem ${=PROMĚNNÁ}. K nastavení proměnné využijeme globální parametr-s: cvs -s SILENT=1 ci. Pokud pak v konfiguračním souboru máme řetězec ${=SILENT}, dosadí se nám za něj jednička. Pamatujte, že parametry můžete uložit do ~/.cvsrc, pak se automaticky použijí při každém spuštění CVS příkazu.

Co se týče formátu souborů, obvykle platí co údaj, to řádek. Až na výjimky jsou ignorovány prázdné řádky a komentáře, kteréžto začínají znakem ‚#‘.

Tak, a konečně si můžeme projít jednotlivé konfigurační soubory. Přesuňme se tedy do vycheckoutované kopie modulu CVSROOT, pohodlně se usaďme a můžeme jít na to!

modules

Tento soubor jednoduše obsahuje definice modulů. Dosud jsme předpokládali, že moduly jsou prostě podadresáře přímo v adresáři repository, ovšem celá věc je poněkud složitější. Pomocí tohoto souboru si můžete nadefinovat rozličné „speciální“ moduly, které přímo nekorespondují s jednotlivými adresáři, nebo i ovlivňovat chování standardních modulů.

Definice každého modulu je na zvláštní řádce, povoleny jsou prázdné řádky i komentáře. Navíc můžeme dlouhé řádky rozdělit na vícero řádků, pospojovaných znakem ‚\‘ na konci každého předchozího řádku.

Základním typem záznamu v tomto souboru je obyčejný modul. Stačí napsat na řádek jméno modulu a cestu k němu v rámci repository. Pokud tedy chceme mít modul nějakýmodul, který bude žít v adresáři ${CVSROOT}/mo­je/nějakýmodul, vložíme do souboru modules řádek: nějakýmodul moje/nějakýmodul. Pokud máme velké množství modulů, můžeme si je takto pohodlně hierarchicky uspořádat.

Nejjednoduším speciálním modulem je alias modul. Jeho zápis je: aliasmodul -a nějakýmodul. Pak je použití modulu aliasmodul zcela ekvivalentní použití modulu nějakýmodul, obě jména jsou plně zaměnitelná. Můžeme za -a zapsat modulů i více, pak je modul aliasmodul ekvivalentní ručnímu vypsání všech uvedených modulů.

Druhým typem speciálního modulu je tzv. ampersand modul: skladmodul &nějakýmodul &dalšímodul. Při checkoutu skladmodulu se ve vytvořeném adresáři založí podadresáře pro nějakýmodul a dalšímodul, do kterých se tyto moduly vycheckoutují. Ampersandový modul tedy funguje jako jakýsi kontejner pro ostatní moduly.

Změny chování modulů (spuštění programu při checkoutu, omezení modulu jen na určité soubory, status modulu…) si zde vypisovat nebudeme, obvykle se totiž využívají pouze u rozsáhlých projektů a i tam jen zřídka; pokud vás tedy tato zmínka zaujala, nezbývá než doporučit dokumentaci k CVS.

history

V našem seriálu jsem se příliš nezmiňoval o příkazu cvs history ani o tomto souboru, poněvadž ho považuji za dosti speciální, a přestože má jistě využití, rozhodně není příliš časté. V souboru CVSROOT/history se udržuje kompletní historie celého repository včetně všech checkoutů, updatů a samozřejmě i commitů. Tento soubor je však v repository uložen přímo v „surové“ podobě, nikoliv jako RCS soubor, proto jej nelze vycheckoutovat. Pro přístup k historii by se měl vždy používat příkaz cvs history, který nabízí širokou škálu možností pro filtrování jednotlivých událostí i pro formátování výstupu.

Historie repository může s časem nabýt dosti mohutných rozměrů, pokud vám však nečiní místo na disku vyložené problémy, doporučuji ji nechávat udržovat, co kdyby jednou… Pokud si jste jisti, že nikdy, stačí souborhistory smazat a zapomenout na něj — CVS do něj loguje pouze, pokud již existuje. Můžete ovšem také zapnout logování pouze některých událostí, a to volbou LogHistory v souboru CVSROOT/config (o kterém bude řeč později).

cvsignore

V pátém dílu jsme si povídali o souboru .cvsignore, který můžeme umístit do aktuálního adresáře, a pak budou v rámci tohoto adresáře ignorovány soubory v .cvsignore uvedené. Ovšem je to ještě zajímavější — každý uživatel může mít totiž i vlastní ~/.cvsignore, který se pak bude aplikovat na veškerou jeho práci s CVS. A navíc může v každém repository být právě CVSROOT/cvsignore, který platí na celé repository. Formát obou souborů je stejný jako formát .cvsignore z pátého dílu.

V tomto souboru nesmějí být komentáře.

cvswrappers

Pomocí cvswrappers můžete jednoduše řečeno CVS oznámit, že soubory vyhovující určité masce jsou binární, a podle toho by se s nimi mělo zacházet.

Na každém řádku je nejdříve jméno souboru (nebo maska, například *.jpg), za ním pak následují jednotlivé parametry. Ty mohou být dva:-k určuje keyword expansion, pro binární soubory to tedy bude -k b, a -m, který určuje způsob slučování změn; buď -m MERGE (CVS se pokusí soubory sloučit klasickým způsobem určeným pro textové soubory) nebo -m COPY (které CVS říká, aby nic automaticky neslučovalo a nechalo to na uživateli).

bitcoin_skoleni

Výchozí nastavení souboru je -m MERGE, ovšem pokud souboru nastavíme -k b, automaticky se zároveň nastaví i -m COPYa nemusíme se tedy obvykle parametrem -m zatěžovat. Výsledná řádka v souboru cvswrappers bude tedy:  *.jpg -k b.


Příště na řadu přijde zbytek konfiguračních souborů, ovšem už teď si můžete psát o různá užitečná udělátka, která byste rádi viděli v přehlídce všelijakých doplňků a rozšíření CVS; tou již brzy uzavřeme tuto část našeho seriálu.