                   Nastrojka hranilischa CVS - podhod FreeBSD

  Stijn Hoop

   <stijn@win.tue.nl>

   Izdanie: 43126

   Avtorskie prava (c) 2001-2003 Stijn Hoop

   FreeBSD `eto zaregistrirovannaya torgovaya marka FreeBSD Foundation.

   Mnogie iz oboznachenij, ispol'zuemye proizvoditelyami i prodavcami dlya
   oboznacheniya svoih produktov, zayavlyayutsya v kachestve torgovyh marok.
   Kogda takie oboznacheniya poyavlyayutsya v `etom dokumente, i Proektu
   FreeBSD izvestno o torgovoj marke, k oboznacheniyu dobavlyaetsya znak
   <<(TM)>> ili <<(R)>>.

   2013-11-07 gabor.
   Annotaciya

   V `etoj stat'e opisany shagi, kotorye ya predprinyal dlya nastrojki
   hranilischa CVS, ispol'zuyuschego te zhe samye skripty, chto
   ispol'zuyutsya v proekte FreeBSD v ih nastrojke. `Eto imeet nekotorye
   preimuschestva pered standartnoj nastrojkoj CVS, v tom chisle bolee
   tochnyj kontrol' dostupa k derevu ishodnyh tekstov i posylku
   soderzhatel'nyh soobschenij `elektronnoj pochty pri kazhdom kommite.

     ----------------------------------------------------------------------

   Soderzhanie

   1. Vvedenie

   2. Pervonachal'naya nastrojka

   3. Specifichnaya dlya FreeBSD nastrojka

1. Vvedenie

   Bol'shinstvo programmnyh proektov s otkrytym kodom ispol'zuyut CVS v
   kachestve sistemy upravleniya ishodnym kodom. Hotya CVS ves'ma horosha v
   `etom kachestve, u neio est' svoi neudobstva i nedostatki. Odnim iz nih
   yavlyaetsya to, chto sovmestnoe ispol'zovanie dereva ishodnyh tekstov s
   drugimi razrabotchikami mozhet bystro privesti k koshmarnym problemam pri
   administrirovanii, osobenno esli kto-to zahochet zaschitit' chasti dereva
   ot obschedostupnosti.

   FreeBSD yavlyaetsya odnim iz proektov, ispol'zuyuschim CVS. Zdes' takzhe
   imeet bol'shoe kolichestvo razrabotchikov, razbrosannyh po vsemu miru. Oni
   razrabotali nekotorye skripty, oblegchayuschie upravlenie hranilischem.
   Nedavno Josef Karthauser <joe@FreeBSD.org> peresmotrel i privel v poryadok
   `eti skripty v celyah oblegcheniya ih ispol'zovaniya v drugih proektah. V
   `etoj stat'e opisan odin iz metodov ispol'zovaniya novyh skriptov.

   CHtoby izvlech' maksimum informacii iz `etoj stat'i, vy dolzhny vladet'
   osnovnymi metodami raboty s CVS.

2. Pervonachal'naya nastrojka

  Preduprezhdenie:

   Navernoe, luchshe snachala vypolnit' `etu proceduru s pustym testovym
   hranilischem, chtoby ponyat' vse posledstviya vashih dejstvij. Kak obychno
   v takih sluchayah, u vas dolzhny imet'sya svezhie chitaemye rezervnye
   kopii!

  2.1. Inicializaciya hranilischa

   Pervym delom pri nastrojke novogo hranilischa neobhodimo ego
   inicializirovat', dlya chego vydat' CVS takuyu komandu:

 % cvs -d path-to-repository init

   Rezul'tatom ee vypolneniya budet sozdannyj CVS sluzhebnyj katalog CVSROOT,
   v kotorom vypolnyaetsya vsya nastrojka.

  2.2. Gruppa pol'zovatelej hranilischa

   Teper' my sozdadim gruppu, kotoraya budet vladet' hranilischem. V `etoj
   gruppe dolzhny prisutstvovat' vse kommittery, dlya togo, chtoby oni mogli
   pisat' v hranilische. Dlya `etoj gruppy my primem standartnoe dlya FreeBSD
   nazvanie ncvs.

 # pw groupadd ncvs

   Zatem vy dolzhny pri pomoschi komandy chown(8) smenit' vladel'ca i gruppu
   dlya tol'ko chto dobavlennogo kataloga:

 # chown -R :ncvs path-to-your-repository

   `Eto nuzhno dlya togo, chtoby nikto ne mog zapisyvat' v hranilische, ne
   yavlyayas' chlenom gruppy.

  2.3. Poluchenie ishodnyh tekstov

   Teper' vam nuzhno poluchit' katalog CVSROOT iz hranilischa FreeBSD.
   Prosche vsego `eto delaetsya izvlecheniem s anonimnogo zerkala CVS
   FreeBSD. Obratites' k sootvetstvuyuschej glave Rukovodstva dlya
   polucheniya dopolnitel'noj informacii. My budem polagat', chto ishodnye
   teksty hranyatsya v podkataloge CVSROOT-freebsd tekuschego kataloga.

  2.4. Kopirovanie skriptov FreeBSD

   Teper' my skopiruem ishodnye teksty FreeBSD iz CVSROOT v nashe
   hranilische. Esli vy znakomy s CVS, to dlya vas mozhet imet' smysl
   popytat'sya importirovat' skripty, chtoby oblegchit' sinhronizaciyu s
   posleduyuschimi versiyami. Odnako pri `etom okazyvaetsya, chto CVS imeet v
   `etoj oblasti nedostatok: pri importirovanii ishodnyh tekstov v katalog
   CVSROOT ona ne budet obnovlyat' neobhodimye administrativnye fajly. CHtoby
   v `etom ubedit'sya, vam nuzhno proverit' kazhdyj fajl posle
   importirovaniya, pri `etom smysl cvs import teryaetsya. Po`etomu
   rekomenduemym metodom yavlyaetsya prostoe kopirovanie skriptov.

   Ne imeet znacheniya, kak vy otnosites' k predyduschemu paragrafu-rezul'tat
   odin i tot zhe. Prosto pomestite vash CVSROOT i skopirujte fajly FreeBSD
   poverh vashih lokal'nyh (neizmenennyh) kopij:

 % cvs -d path-to-your-repository checkout CVSROOT
 % cd CVSROOT
 % cp ../CVSROOT-freebsd/* .
 % cvs add *

   Zametim, chto vy, skoree vsego, poluchite neskol'ko preduprezhdenij o tom,
   chto nekotorye katalogi ne byli skopirovany; `eto normal'no, vam oni ne
   nuzhny.

  2.5. Skripty

   Teper' u vas est' rabochij katalog i tochnaya kopiya skriptov, kotorye
   ispol'zuyutsya v proekte FreeBSD dlya raboty s hranilischem. Dalee sleduet
   kratkoe opisanie naznacheniya kazhdogo fajla.

     * access - po umolchaniyu pri standartnoj nastrojke `etot fajl ne
       ispol'zuetsya. On primenyaetsya v specifichnyh dlya proekta FreeBSD
       nastrojkah, gde on upravlyaet dostupom k hranilischu. Vy mozhete
       udalit' `etot fajl, esli vy ne sobiraetes' ispol'zovat' takuyu
       nastrojku.

     * avail - `etot fajl upravlyaet dostupom k hranilischu. V nem vy mozhete
       ukazat' gruppy lyudej, kotorym razreshen dostup k hranilischu, a
       takzhe zapretit' kommity na urovne katalogov. Vy dolzhny podnastroit'
       ego tak, chtoby on soderzhal gruppy i katalogi, imeyuschiesya v vashem
       hranilische.

     * cfg.pm - `etot fajl analiziruet vashu konfiguraciyu i soderzhit
       nastrojki po umolchaniyu. Vy ne dolzhny izmenyat' `etot fajl. Vmesto
       `etogo razmeschajte vashi izmeneniya v konfiguracii v fajle
       cfg_local.pm.

     * cfg_local.pm - `etot fajl soderzhit vse nastraivaemye parametry
       sistemy. Vy dolzhny nastraivat' vse parametry zdes', naprimer, kuda
       posylaetsya pochta pri kommite, s kakih hostov mozhno vypolnyat'
       kommity, i prochee. Nizhe daetsya bolee polnaya informaciya ob `etom.

     * checkoutlist - `eti fajly perechislyayut vse fajly, upravlyaemye CVS v
       `etom kataloge. Vy dolzhny otredaktirovat' ego dlya udaleniya
       nekotoryh specifichnyh dlya FreeBSD fajlov.

     * commit_prep.pl - `etot skript vypolnyaet razlichnye proverki pered
       vypolneniem kommita, v zavisimosti ot togo, vklyuchili li vy ih v
       cfg_local.pm. Vam ne nuzhno ego trogat'.

     * commitcheck - `etot skript vyzyvaetsya neposredstvenno iz CVS.
       Snachala on proveryaet, s ispol'zovaniem cvs_acls.pl, imeet li
       kommiter dostup k ukazannoj chasti dereva, a zatem zapuskaet
       commit_prep.pl dlya vypolneniya razlichnyh proverok pered kommitom.
       Esli oni vypolnilis' normal'no, to CVS pozvolit vypolnit' kommit. Vam
       ne nuzhno trogat' `etot fajl.

     * commitinfo - `etot fajl ispol'zuetsya v CVS dlya opredeleniya togo,
       kakoj skript zapuskat' pered kommitom-v dannom sluchae commitcheckl.
       Vam ne nuzhno trogat' `etot fajl.

     * config - konfiguracionnyj fajl dlya `etogo hranilischa. Vy dolzhny
       izmenyat' ego pri neobhodimosti, no bol'shinstvo administratorov mogut
       ostavit' vse nastrojki po umolchaniyu. Dopolnitel'nuyu informaciyu o
       parametrah, kotorye mogut byt' zdes' zadany, mozhno najti v
       rukovodstve po CVS.

     * cvs_acls.pl - `etot skript identificiruet pol'zovatelya i to, imeet li
       on dostup k derevu. `Eto delaetsya na osnove informacii v fajle avail.
       Vam ne nuzhno trogat' `etot fajl.

     * cvsignore - `etot fajl perechislyaet fajly, kotorye CVS ne dolzhna
       pomeschat' v hranilische. Vy mozhete otredaktirovat' ego po svoemu
       usmotreniyu. Bolee polnaya informaciya ob `etom fajle nahoditsya v
       rukovodstve po CVS.

     * cvswrappers - `etot fajl ispol'zuetsya v CVS dlya vklyucheniya ili
       vyklyucheniya rasshireniya klyuchevyh slov, ili dolzhen li fajl
       schitat'sya binarnym. Vy mozhete redaktirovat' ego po svoemu
       usmotreniyu. Bolee polnaya informaciya ob `etom fajle nahoditsya v
       rukovodstve po CVS. Imejte vvidu, chto opcii CVS -t i -f nekorrektno
       rabotayut v rezhime klient/server.

     * edithook - `etot fajl bol'she ne ispol'zuetsya, no ostavlen po
       istoricheskim prichinam. Vy mozhete spokojno udalit' `etot fajl.

     * editinfo - CVS ispol'zuet `etot fajl dlya nastrojki redaktora. FreeBSD
       ne ispol'zuet `etu funkcional'nost', tak kak obrabotka soobschenij
       dlya zhurnala vypolnyaetsya v fajlah verifymsg i logcheck. `Eto
       proishodit po toj prichine, chto editinfo nekorrektno rabotaet v
       rezhime klient/server, ili v sluchayah kogda ispol'zuyutsya opcii -m
       ili -F. Vam ne nuzhno trogat' `etot fajl.

     * exclude - v `etom fajle perechisleny regulyarnye vyrazheniya,
       ispol'zuemye commit_prepl.pl dlya vydeleniya fajlov, v kotoryh mogut
       ne soderzhat'sya zagolovki s nomerom versii. V nastrojke FreeBSD vse
       fajly soderzhaschiesya v hranilische dolzhny imet' zagolovok s versiej
       (tipa $FreeBSD$). Vse fajly s imenami, kotorye sootvetstvuyut odnoj iz
       strok `etogo fajla, isklyuchayutsya iz proverki. Vy dolzhny dobavit'
       vyrazheniya v `etot fajl, esli vy pomeschaete v hranilische fajly,
       kotorye ne mogut imet' zagolovki s versiyami. Dlya celej ustanovki
       skriptov luchshim resheniem mozhet okazat'sya isklyuchenie CVSROOT/ iz
       proverki zagolovkov.

     * log_accum.pl - `eto skript, kotoryj prinimaet zhurnal'noe soobschenie
       v vide, dannom skriptom logcheck, i dobavlyaet ego k fajlu zhurnala v
       hranilische dlya hraneniya rezervnoj kopii. On takzhe otrabatyvaet
       posylku soobscheniya po `elektronnoj pochte na adres, kotoryj vy
       zadadite (v fajle cfg_local.pm). On podklyuchaetsya k CVS cherez
       loginfo. Vam ne nuzhno trogat' `etot fajl.

     * logcheck - pri kommite `etot fajl analiziruet soobschenie dlya
       zhurnala, kotoroe sostavlyayut kommittery, i pytaetsya ego nekotorym
       obrazom uluchshit'. On podklyuchaetsya k CVS cherez logcheck. Vam ne
       nuzhno trogat' `etot fajl.

  Primechanie:

       `Etot skript zavisit ot ryada lokal'nyh modifikacij CVS, sdelannyj vo
       FreeBSD: `eta versiya chitaet zhurnal'noe soobschenie povtorno posle
       togo, kak `etot skript ego modificiruet. Standartnaya versiya CVS
       `etogo ne delaet, chto delaet `etot skript bespoleznym, tak kak on ne
       mozhet modificirovat' zhurnal'noe soobschenie, hotya mozhet proverit'
       ego na predmet pravil'nosti sintaksisa. CVS versii 1.11.2 i vyshe
       mozhet byt' nastroen, chtob imet' povedenie podobnoe FreeBSD, putem
       ustanovki opcii RereadLogAfterVerify=always v fajle config.

     * loginfo - `etot fajl ispol'zuetsya CVS dlya upravleniya togo, kuda
       posylaetsya protokol'naya informaciya. S pomosch'yu `etogo fajla
       podklyuchaetsya log_accum.pl. Vam ne nuzhno trogat' `etot fajl.

     * modules - `etot fajl sohranyaet svoio tradicionnoe naznachenie v CVS.
       Vy dolzhny udalit' moduli FreeBSD iz standartnoj versii. Vy mozhete
       redaktirovat' `etot fajl po svoemu usmotreniyu. Bolee polnaya
       informaciya ob `etom fajle nahoditsya v rukovodstve po CVS.

     * notify - `etot fajl ispol'zuetsya v CVS v tom sluchae, esli kto-to
       zadast otslezhivanie fajla. `Eto ne ispol'zuetsya v hranilische
       FreeBSD. Vy mozhete redaktirovat' ego po svoemu usmotreniyu. Bolee
       polnaya informaciya ob `etom fajle nahoditsya v rukovodstve po CVS.

     * options - `etot fajl specifichen dlya versii CVS ot FreeBSD, no takzhe
       podderzhivaetsya versiej dlya Debian. On soderzhit klyuchevoe slovo
       dlya rasshireniya v zagolovkah versij. Vy dolzhny zamenit' `eto na
       klyuchevoe slovo, kotoroe vy zadali v fajle cfg_local.pm (esli vy
       ispol'zuete `etu vozmozhnost', kotoraya v nastoyaschee vremya
       specifichna dlya FreeBSD).

     * rcsinfo - `etot fajl otobrazhaet katalogi v hranilische na fajly
       shablonov, kak naprimer rcstemplate. Po umolchaniyu FreeBSD ispol'zuet
       odin shablon dlya vsego hranilischa. Vy mozhete dobavlyat' drugie k
       `etomu fajlu po svoemu usmotreniyu.

     * rcstemplate - `etot fajl yavlyaetsya aktual'nym fajlom shablona,
       kotoryj vidyat kommittery, kogda pomeschayut chto-to v hranilische. Vy
       dolzhny otredaktirovat' ego dlya opisaniya razlichnyh dopolnitel'nyh
       parametrov, kotorye vy opredelili v cfg_local.pm.

     * tagcheck - `eti fajly upravlyayut dostupom k sozdaniyu metok v
       hranilische. Standartnaya dlya FreeBSD versiya ne pozvolyaet sozdavat'
       metki s imenami tipa RELENG* iz-za peresecheniya s processom sozdaniya
       relizov. Vy dolzhny otredaktirovat' `etot fajl po vashemu usmotreniyu.

     * taginfo - `etot fajl stavit v sootvetstvie operacii s metkami nad
       katalogami hranilischa skriptam upravleniya dostupom, naprimer
       tagcheck. Vam ne nuzhno trogat' `etot fajl.

     * unwrap - `etot skript nuzhen dlya avtomaticheskoj obratnoj obrabotki
       (<<unwrap>>) dvoichnyh fajlov (posmotrite cvswrappers) pri
       izvlechenii. `Eto ne ispol'zuetsya v tekuschej nastrojke FreeBSD po
       prichine togo, chto ne rabotaet s konfiguraciej klient/server. Vam ne
       nuzhno trogat' `etot fajl.

     * verifymsg - `etot fajl stavit v sootvetstvie katalogam hranilischa
       skripty vtorichnoj obrabotki zhurnal'nyh soobschenij, naprimer
       logcheck. Vam ne nuzhno trogat' `etot fajl.

     * wrap - `etot skript mozhet byt' ispol'zovan dlya avtomaticheskoj
       obrabotki (<<wrap>>) dvoichnyh fajlov (posmotrite cvswrappers) pri
       pomeschenii v hranilische. `Eto ne ispol'zuetsya v tekuschej nastrojke
       FreeBSD, po prichine togo, chto ne rabotaet s konfiguraciej
       klient/server. Vam ne nuzhno trogat' `etot fajl.

  2.6. Nastrojka skriptov

   Sleduyuschim shagom yavlyaetsya nastrojka skriptov tak, chtoby oni
   rabotali v vashih usloviyah. Vy dolzhny prosmotret' vse fajly v kataloge i
   vypolnit' vashi nastrojki. V chastnosti, vy mozhet potrebovat'sya
   otredaktirovat' sleduyuschie fajly:

    1. Esli vy ne hotite ispol'zovat' specifichnye dlya FreeBSD vozmozhnosti
       skriptov, to vy mozhete bez posledstvij udalit' fajl access:

 % cvs rm -f access

    2. Otredaktirujte avail tak, chtoby on soderzhal razlichnye katalogi
       hranilischa, dostupom k kotorym vy hotite upravlyat'. Obyazatel'no
       sohranite strochku avail||CVSROOT, inache vy zablokiruete sami sebya
       na sleduyuschem shage.

       Drugimi parametrami, kotorye vy mozhete dobavit' v `etot fajl,
       yavlyayutsya gruppy kommitterov. Po umolchaniyu FreeBSD ispol'zuet
       fajl access dlya perechisleniya vseh kommitterov, no vy mozhete
       ispol'zovat' lyuboj fajl. Vy mozhete takzhe dobavit' gruppy, esli
       hotite (sintaksis opisan v nachale fajla cvs_acls.pl).

    3. Otredaktirujte fajl cfg_local.pm tak, chtoby on soderzhal parametry,
       kotorye vy hotite. V chastnosti, vy dolzhny vzglyanut' na takie punkty
       nastrojki:

          * %TEMPLATE_HEADERS - oni obrabatyvayutsya skriptami vedeniya
            protokola, i vstavlyayutsya nizhe pochtovogo soobscheniya, esli
            oni prisutstvuyut i ne yavlyayutsya pustymi v soobschenii pri
            kommite. Vy mozhete, navernoe, udalit' stroki PR i MFC after. I,
            konechno, vy mozhete dobavit' svoi sobstvennye.

          * $MAIL_BRANCH_HDR - esli vy hotite v kazhdoe soobschenie pri
            kommite vstavlyat' zagolovok, opisyvayuschij vetku, v kotoruyu
            byl vypolnen kommit, zadajte `eto v sootvetstvii s vashim
            okruzheniem. Ili ostav'te `eto pustym, esli ne hotite imet' takoj
            zagolovok.

          * @COMMIT_HOSTS - zadajte zdes' spisok hostov, s kotoryh mozhno
            vypolnyat' kommity.

          * $MAILADDRS - zadajte zdes' adres administratora ili spiska, v
            kotoryj dolzhny napravlyat'sya pochtovye soobscheniya pri
            kommite.

          * @LOG_FILE_MAP - izmenite `etot massiv po svoemu usmotreniyu -
            kazhdoe regulyarnoe vyrazhenie sravnivaetsya s katalogom kommita,
            i protokol'noe soobschenie pri kommite sohranyaetsya v
            podkataloge commitlogs v ukazannom fajle.

          * $COMMITCHECK_EXTRA - esli vy ne hotite ispol'zovat' specifichnye
            dlya FreeBSD proverki dostupa, to vy dolzhny udalit' opredeleniya
            $COMMITCHECK_EXTRA iz `etogo fajla.

  Primechanie:

       Izmenenie parametra $IDHEADER garantirovanno rabotaet tol'ko na
       platformah FreeBSD; `eto zavisit ot specifichnyh dlya FreeBSD
       modifikacij v CVS.

       Vy mozhete proverit' cfg.pm na predmet togo, kakie drugie parametry
       mogut byt' izmeneny, no perechislennoe vyshe yavlyaetsya dostatochnym
       podmnozhestvom.

    4. Otredaktirujte exclude dlya udaleniya specifichnyh dlya FreeBSD
       zapisej (naprimer, vseh strok, kotorye nachinayutsya s ^ports/ i tak
       dalee). Bolee togo, zakommentirujte stroki, nachinayuschiesya s
       ^CVSROOT/, i dobav'te odnu stroku tol'ko s ^CVSROOT/. Posle ustanovki
       obrabotchika (wrapper) vy mozhete dobavit' svoi zagolovki k fajlam v
       kataloge CVSROOT i vosstanovit' `eti stroki, no teper' oni budut imet'
       smysl, tol'ko kogda vy popytaetes' vypolnit' kommit pozzhe.

    5. Otredaktirujte fajl modules i udalite vsio, chto otnositsya k FreeBSD.
       Dobav'te sobstvennye moduli, esli hotite.

    6. Primechanie:

       `Etot shag neobhodim, esli tol'ko vy zadali znachenie dlya $IDHEADER v
       cfg_local.pm (chto rabotaet tol'ko pri ispol'zovanii modificirovannoj
       vo FreeBSD versii CVS).

       Otredaktirujte fajl options tak, chtoby on sootvetstvoval metke,
       kotoruyu vy zadali v cfg_local.pm. Global'nyj poisk i zamena FreeBSD
       na vashu metku dolzhny srabotat'.

    7. Otredaktirujte fajl rcstemplate tak, chtoby on soderzhal te zhe samye
       klyuchevye slova, chto zadany v cfg_local.pm.

    8. Opcional'no udalite proverki FreeBSD iz tagcheck. Vy mozhete prosto
       dobavit' exit 0 v nachalo fajla, chtoby zapretit' vse proverki pri
       ustanovke metki.

    9. Poslednim dejstviem, kotoroe nuzhno sdelat' pered tem, kak zakonchit'
       rabotu, yavlyaetsya proverka togo, chto protokoly kommitov mogut
       sohranyat'sya. Po umolchaniyu oni sohranyayutsya v hranilische, v
       podkataloge commitlogs kataloga CVSROOT. `Etot katalog dolzhen byt'
       sozdan, tak chto vypolnite sleduyuschee:

 % mkdir commitlogs
 % cvs add commitlogs

   A teper', posle tschatel'noj proverki, vy dolzhny vypolnit' kommit vashih
   izmenenij. Ubedites', chto vy dali sami sebe dostup k katalogu CVSROOT v
   vashem avail do togo, kak ego delat', tak kak v protivnom sluchae vy
   zablokiruete sami sebya. Tak chto ubedites', chto vsio imenno tak, kak vy
   i predpolagali, a zatem vypolnite sleduyuschee:

 % cvs commit -m '- Initial FreeBSD scripts commit'

  2.7. Testirovanie nastrojki

   Vy gotovy k pervomu testirovaniyu: prinuditel'nomu kommitu v fajl avail,
   chtoby ubedit'sya, chto vsio rabotaet tak, kak ozhidalos'.

 % cvs commit -f -m 'Forced commit to test the new CVSROOT scripts' avail

   Esli vsio rabotaet, pozdravlyaem! Teper' u vas imeetsya rabotayuschaya
   nastrojka skriptov FreeBSD dlya vashego hranilischa. Esli CVS vsio eschio
   o chiom-to soobschaet, vernites' i prover'te, vse li vysheupomyanutye
   shagi byli vypolneny pravil'no.

3. Specifichnaya dlya FreeBSD nastrojka

   Proekt FreeBSD sam po sebe ispol'zuet neskol'ko druguyu nastrojku, v
   kotoroj takzhe ispol'zuyutsya fajly iz podkataloga freebsd kataloga
   FreeBSD CVSROOT. Proekt ispol'zuet ih iz-za bol'shogo kolichestva
   kommitterov, kotorye vse dolzhny byt' v odnoj i toj zhe gruppe. Po`etomu
   byl napisan prostoj obrabotchik, proveryayuschij, chto lyudi imeyut
   pravil'nye prava na vypolnenie kommita, a zatem ustanavlivayuschij
   identifikator gruppy, sootvetstvuyuschij identifikatoru hranilischa.

   Esli vashemu hranilischu `eto tozhe nuzhno, to shagi dlya vypolneniya
   `etogo opisany nizhe. No snachala obzor svyazannyh s `etim fajlov.

  3.1. Fajly, ispol'zuemye v nastrojke FreeBSD

     * access - `etot fajl upravlyaet informaciej o dostupe. Vy dolzhny
       otredaktirovat' `etot fajl dlya vklyucheniya vseh uchastnikov vashego
       proekta.

     * freebsd/commitmail.pl - `etot fajl bol'she ne ispol'zuetsya, no
       ostavlen po istoricheskim prichinam. Vam ne nuzhno trogat' `etot fajl.

     * freebsd/cvswrap.c - `eto ishodnyj tekst obrabotchika CVS, kotoryj vam
       nuzhno ustanovit', chtoby proverki dostupa real'no zarabotali.
       Dopolnitel'naya informaciya ob `etom nizhe. Vy dolzhny otredaktirovat'
       marshruty v makrosah ACCESS i REALCVS tak, chtoby oni sootvetstvovali
       vashej nastrojke.

     * freebsd/mailsend.c - `etot fajl nuzhen v nastrojke FreeBSD dlya
       spiskov rassylki. Vam ne nuzhno trogat' `etot fajl.

  3.2. Procedura

    1. Otredaktirujte fajl access tak, chtoby on soderzhal tol'ko vashe imya
       pol'zovatelya.

    2. Otredaktirujte cvswrap.c tak, chtoby on soderzhal pravil'nyj marshrut
       dlya vashej nastrojki. `Eto opredeleno v makrose po imeni ACCESS. Vy
       dolzhny takzhe izmenit' raspolozhenie real'nogo vypolnimogo fajla cvs,
       esli ono ne podhodit k vashej situacii. Dlya standartnogo cvswrap.c
       predpolagaetsya, chto on zamenit obschesistemnuyu komandu cvs,
       kotoraya budet peremeschena v /usr/bin/ncvs.

       V moiom `ekzemplyare cvswrap.c pomescheno sleduyuschee:

 #define ACCESS "/local/cvsroot/CVSROOT/access"
 #define REALCVS "/usr/bin/ncvs"

    3. Sleduyuschim shagom yavlyaetsya ustanovka obrabotchika dlya togo,
       chtoby proverit' pravil'nost' ustanovki gruppy pri vypolnenii kommita.
       Ishodnye teksty dlya `etogo razmescheny v cvswrap.c iz vashego
       CVSROOT.

       Otkompilirujte ishodnye teksty, kotorye vy redaktirovali dlya
       vklyucheniya pravil'nyh putej:

 % cc -o cvs cvswrap.c

       A zatem ustanovite ih (dlya `etogo vy dolzhny byt' pol'zovatelem
       root):

 # mv /usr/bin/cvs /usr/bin/ncvs
 # mv cvs /usr/bin/cvs
 # chown root:ncvs /usr/bin/cvs /usr/bin/ncvs
 # chmod o-rx /usr/bin/ncvs
 # chmod u-w,g+s /usr/bin/cvs

       Pri `etom obrabotchik budet ustanovlen po umolchaniyu kak komanda cvs,
       chto garantiruet vsemi, ispol'zuyuschimi hranilische, poluchenie
       pravil'nyh urovnej dostupa.

    4. Teper' vy mozhete ubrat' vseh iz vashej gruppy hranilischa. Vsio
       upravlenie dostupom vypolnyaetsya vashim obrabotchikom, i on budet
       ustanavlivat' pravil'nuyu gruppu dlya dostupa.

  3.3. Testirovanie nastrojki

   Teper' vash obrabotchik dolzhen byt' ustanovlen. Konechno, vy mozhete
   protestirovat' ego, vypolniv prinuditel'nyj kommit v fajl access:

 % cvs commit -f -m 'Forced commit to test the new CVSROOT scripts' access

   I snova, esli `eto ne srabotaet, prover'te, pravil'no li byli vypolneny
   vse vysheperechislennye shagi.
