subversion

Subversion adattár böngésző WebSVN-nel és Drupal szintaxis kiemeléssel.

Drupal szintaxis kiemelés WebSVN alattBár a Drupal projekt CVS-ről GIT-re vált, azért még így is elég sokan vagyunk, akik verziókezelésre Subversiont használunk, a Drupal közösségen belül és kívül egyaránt.

Egy verziókezelő használata során nekem mindig szükségem volt valamilyen eszközre, amely vizuálisan ábrázolja a különböző verziók, branch-ek közötti eltéréseket, vagy egyszerűen csak böngészni lehet vele a verziókezelőben tárolt adatokat, azaz a repository-t.

A WebSVN egy jól bevált Subversion böngésző, amelyet most Drupal szintaxis kiegészítéssel fogunk fűszerezni.

Hozzávalók

Elkészítés

Bizonyosodjunk meg róla, hogy a telepített subversion szerver és a http szerver (pl. Apache) működik.

Töltsük le a subversion verzióhoz megfelelő WebSVN verziót. 1.4-es SVN felett már használható a legfrissebb, 2.3-as WebSVN. A subversion verziószámát így deríthetjük ki:

# svnadmin --version

WebSVN telepítés

A WebSVN telepítése gyerekjáték. Csomagoljuk ki a letöltött fájlt egy könyvtárba, ahonnan a webszerver majd ki fogja szolgálni. Majd kövessük a doc/install.html utasításait. Ez mindössze annyit fog jelenteni, hogy az include/distconfig.php fájlt le kell másolnunk include/config.php néven, majd ezt a fájl értelemszerűen szerkesztenünk kell.

A config.php fájlban meg kell mutatni a WebSVN-nek, hogy hol találja az svn repositorykat. Ehhez a $config->addRepository() vagy a $config->parentPath() megfelelő beállítása szükséges. A beállításhoz minden szükséges információ rendelkezésre áll a config.php fájlban megjegyzés formájában.

A WebSVN a repositorykat az svn és az svnlook parancsok segítségével fogja olvasni, úgyhogy ezek elérhetőek kell legyenek a path-ban webszerver felhasználó számára. Ha mégsem, akkor a config fájlban a parancsok pontos helye is beállítható.

A WebSVN futtatásához nem szükséges adatbázis. Ha eddig mindent jól csináltunk, akkor van egy működő WebSVN-ünk, próbáljuk ki!

Drupal syntax highlight

Az utolsó lépés a legérdekesebb, Drupal szintaxis kiemelőt fogunk beállítani a WebSVN-hez. Ehhez a Drupal GeSHi filter modulból fogjuk kölcsönvenni azt a fájlt, amelyik a Drupal függvények és konstansok definícióját tartalmazza.

Töltsük le és csomagoljuk ki a Drupal GeSHi filter modult. Mindegy hova, most épp nincs szükség telepített Drupal-ra. Keressük meg a geshifilter/geshi-extra/drupal6.php nevű fájlt (ha drupal 5 szintaxis kiegészítést szeretnénk, akkor a drupal5.php fájlt használjuk) és másoljuk át a fájlt a már telepített WebSVN lib/gheshi nevű könyvtárába. Ebben a könyvtárban vannak a programozási nyelvek leírói. Itt fogjuk megtalálni a perl.php-t, a php.php és 156 másik nyelv leíróját.

Legutolsó lépésként már csak azt kell elmagyarázni a WebSVN-nek, hogy mely fájlok esetén szeretnénk drupal szintaxis kiemelést látni. Ehhez nyissuk meg újra az include/config.php fájlt és bizonyosodjunk meg arról, hogy a $config->useGeshi() parancs nincs megjegyzésbe téve. Illetve szúrjuk be még ezt a sort:

<?php
$extGeshi
['drupal6'] = array('module','inc','install','profile','test');
?>

Ezzel elértük, hogy a module, inc, stb. kiterjesztésű fájlokat a drupal 6 nyelvűnek értelmezi a WebSVN és ennek megfelelő szintaxis kiemelést alkalmaz majd.

Ha mindent jól csináltunk, és megjelenítjük például egy drupal modul forráskódját (*.module) a WebSVN-ben, akkor a Drupal mag függvényei és konstansai kiemelten jelennek meg és link-ként viselkednek, amelyek az api.drupal.org-ra mutatnak. Emellett természetesen megmarad a PHP szintaxis kiemelés is, amely linkek viszont a php.net-re mutatnak.

A bejegyzés megírásához ezeket a verziókat használtam:
Subversion: 1.6.6 (r40053)
WebSVN: 2.3.1
GeSHi filter: 6.x-1.3

Az eredeti receptre Wim Leers blogján akadtam rá: http://wimleers.com/article/run-your...drupal-syntax-highlighting, köszönet érte!

.svn könyvtárak tiltása Apache webszerveren

Ha az SVN-t web alkalmazások verziókezelésére használjuk, és az éles szerveren lévő fájlokat is verziókezelni akarjuk, akkor egyrészt jól jöhet a tipp, hogyan tegyük ezt leállás nélkül, másrészt belefutunk abba a problémába, hogy a webszerver megjeleníti a .svn könyvtárak tartalmát.

Ez nekünk nem jó, nagyon nem. Ugyanis biztonsági rés keletkezik, az egyébként gondosan felépített pajzson.

El kell tehát magyarázni a webszervernek, hogy a .svn könyvtárakat és azok tartalmát felejtse el, soha ne szolgáljon ki ilyen tartalmat.

Ha Apache kiszolgálót használunk, akkor ezt megtehetjük a .htaccess fájlokban is, de pratikusabb közvetlenül a központi konfigurációs fájlban, a httpd.conf-ban megtenni. Ennek helye linux rendszereken általában a /etc/httpd/conf/httpd.conf, Windows környezetben pedig C:\Program Files\Apache\Apache2\conf\httpd.conf

És a lényeg, hogyan tehetjük ezt meg:

<Directory ~ "\.svn">
  Order allow,deny
  Deny from all
</Directory>

A beállítás elég egyszerű, különösebb magyarázatot nem igényel. A ~ jelentése, hogy reguláris kifejezéssel mintát fogunk illeszteni az aktuálisan vizsgált útvonalra. A "\.svn" jelentése, hogy minden olyan elérési útra igaz a beállítás, amiben benne van a .svn string. A következő két sor meg annyit mond, hogy tilos kiszolgálni.

Ennyi, remélem hasznos volt.

.SVN könyvtárak szűrése Total Commander-ben

Ismét aktív subversion felhasználó vagyok, így jöhet egy második tipp:

Van a Total Commander-ben egy nagyszerű funkció, két könyvtárszerkezet összehasonlítására és/vagy szinkronizálására szolgáló Synchronize directories (CTRL+C, Y). Ezzel szoktam összehasonlítani a fejlesztői szerveren és az éles szerveren lévő PHP forráskódok különbségeit és esetleg frissítem az éles szervert.

Igen ám, de ha SVN-t használunk, a subversion working copy-ban elhelyezett .SVN könyvtárak használhatatlanná teszik a funkciót. Szerencsére a Ghisler Úr, a TotalCmd fejlesztője, gondolt ilyen esetekre, és lehet szűrni, hogy mit akarunk összevetni. A szűrőben a *.*-ot kell kicserélni erre:

*.*|*.svn-base all-wcprops entries format dir-prop-base

A kifejezés jelentése, mindent kivéve az svn working copy-hoz tartozó fájlok. Így újra használható ez a funkció. A régi 6-os TotalCMD-vel is működik.

A szűrő kifejezés nem az én szüleményem, az interneten találtam, de már nem emlékszem pontosan hol.

Subversion tipp: kezdő import leállás nélkül

Egy ideje hanyagoltam a verziókezelést. Tudom, fekete pont. De most rendbetettem ezt is, és a közben gyűjtött tapasztalatokból most megosztanék egyet:

Új repository létrehozása rövid leállással

Ha az ember új repository-t akar létrehozni, és megnézi a dokumentációkat, mindenhol ezt fogja látni:

  1. » svnadmin create PATH-0
  2. » svn import PATH-1 URL -m "Initial import"
  3. » svn checkout URL PATH-2

Első parancs: létrehozzuk a repository-t a szerveren a PATH-0 könyvtárban. Második: beimportáljuk a kliens gépen a kezdeti fájlokat a PATH-1 könyvtárból. Harmadik: lekérjük az SVN-től a repo aktuális tartalmát (rev.1) a kliensen a PATH-2 könyvtárba.

Ez szép és jó, a baj csak az, hogy a kliensen a PATH-1 és a PATH-2 különböző kell legyen. Általában nem is lenne ez nagy baj, a fenti művelet végén PATH-1-et töröljük, PATH-2-t pedig átmozgatjuk PATH-1-re, ezzel elérve, hogy az eredeti fájlok, az eredeti helyen, már working copy-ként működjenek.

De ha egy éles webszerveren akarjuk a használat alatt álló fájlokat bevonni a verziókezelésbe, akkor ez a módszer nem működik. Sajnos az svn checkout parancs nem hajalndó felülírni már meglévő fájlokat, ezért PATH-1 szigorúan különböző PATH-2-től. A fenti lépéssorozattal csak úgy oldható meg a probléma, ha egy rövid időre leállítjuk az alkalmazást.

Új repository létrehozása leállás nélkül

Szerencsére találtam egy megoldást, amivel leállás nélkül be lehet vonni fájlokat a verziókezelésbe:

  1. » svnadmin create PATH-0
  2. » svn checkout URL PATH-1
  3. » svn add PATH-1/*
  4. » svn commit -m "Initial import"

A trükk mindössze annyi, hogy a repo létrehozása után, azonnal lekérjük az SVN-től az aktuális állapotot (rev.0)! Ezáltal lesz egy teljesen üres working copy a kliens gépen. Ezután egyenként hozzáadjuk azokat a fájlokat, amelyeket be akarunk vonni a verziókezelésbe, végül pedig egy commit paranccsal elkövetjük az kezdő importálást.

Ráadásul, így nem kötelező a teljes könyvtárat bevinni SVN-be, több svn add utasítással, lehet szelektálni is.

Mindössze ennyi, nekem hasznos volt.

Feliratkozás RSS - subversion csatornájára