Nem tudom Ti hogy vagytok vele, de nekem bizony majd minden napra jut valamilyen használt eszköznek a verzió frissítése. Ez legtöbbször Drupal-t jelent, de van amikor Awstats-ot, phpMyAdmin-t, valami webmail scriptet, stb …
Namármost ezeknek a programoknak közös jellemzőjük, hogy van hozzájuk egy configurációs minta fájl, amit még a telepítéskor át kell nevezni és tesre kell szabni.
Frissítéskor a testreszabott, beállított konfig fájlokat természetesen nem írjuk felül, ezek érintetlenül maradnak. Igen ám, de az eredeti alapértelmezett konfigurációs fájlok néha megváltoznak, általában egy-egy új opcióval bővülnek, vagy csak a kommenteket egészítik ki a fejlesztők.
Szóval engem mindig is zavart, hogy a régi telepítések config fájljai nem követik az új verziók frissítéseit. Annyira zavart, hogy el is kezdtem megoldást keresni. És ahogy ez lenni szokott az open source világában, hamar kiderült, hogy másokban már sokkal korábban felmerült ez a probléma, sőt már réges régen meg is oldották. A programot ami segíteni fog nekünk elhárítani ezt a problémát, úgy hívják hogy diff3. A használati útmutatója (man page) teljesen világos, én most csak a fenti esetre kihegyezve mutatom be a paraméterezését.
A diff3 használata konfig fájlok összehasonlítására
Először ellenőrizzük, hogy nincs-e ütközés a módosításokban:
diff -x REGI_TESTRESZABOTT REGI_DEFAULT UJ_DEFAULT
-x paraméter után három fájlnevet vár, a régi testreszabott konfig fájl, a régi eredeti konfig fájl és az új eredeti fájl. Ha üres a parancs kimenete, akkor kell örülni, akkor nincs ütközés.
A fenti három fájl segítségével hozzuk létre az új konfig fájlt, amely tartalmazza mind a mi módosításainkat, mind pedig fejlesztők módosításait.
diff -x REGI_TESTRESZABOTT REGI_DEFAULT UJ_DEFAULT > UJ_TESTRESZABOTT
Ha az első lépésben volt ütközés, akkor az -m kapcsoló elvégzi a migrálást.
Ezek után én még egy sima diff-el ellenőrizni szoktam, hogy minden rendben ment-e, mondjuk így:
diff -y --suppress-common-lines UJ_DEFAULT UJ_TESTRESZABOTT
A kimenetből jól látszik, hogy az új konfigurációs fájlba átvezette a diff3 a régi változtatásokat.
The Drupal way
Az imént leírtak a default.settings.php és a settings.php-re vonatkoztak. De ugyanezt a módszert szoktam használni a .htaccess fájl és a robots.txt frissen tartására is.
Persze csak kis verzió ugrásnál, pl. 7.0-ról 7.1-re, főverzió ugrásnál, pl. 6.0-ról 7.0-ra, ennél azért több munkára lesz szükség :)
Másra is használható
Természetesen másra is használható a diff3: ha egy fájlt két külön irányba módosítanak, mert mondjuk ketten dolgoznak ugyanazon a forráskódon, akkor a diff3 egyszerűen összefésüli a módosításokat. Már amennyiben nincs közvetlen ütközés a módosítások között.