ot S.Karadjov(19-01-2001)

reiting (17)   [ dobre ]  [ zle ]

Printer Friendly Variant za otpechatvane

Kakvo e tova pach
Pach(patch) idva ot angliiskata duma patch - oznachavashta krupka, a kato glagol- skurpvam, izglazhdam. V kompyuturniia sviat pachovete se svurzvat s korektsii na dadena programa, obiknoveno s tsel  da raboti tia po-dobre ili  da i se dobaviat novi vuzmozhnosti. Pachovete sa i edno mnogo efikasno reshenie, predlozheno ot suzdatelia na Perl - Lari Uol, za prenasiane samo na neobhodimata chast nuzhna za korigiraneto na dadena programa, vmesto tsialata nova versiia na programata.

Kak da si napravite sami "krupka"
Nuzhno e edinstveno da imate programata "diff" za Unix/Linux ili neina adaptirana versiia za konkretnata operatsionna sistema, koiato izpolzvate. TSelta na programata "diff" e da pokazva razlichieto mezhdu dva faila ili dve direktorii. Neka vidim kak raboti programata pri sravnenieto na dva faila. Za nashiiat primer shte izpolzvame failut old.pl sus slednoto sudurzhanie

#!/usr/local/perl

print "Zdrasti Fenove";

i failut new.pl, koito izglezhda taka
#!/usr/local/perl

print "Zdrasti linux-bg Fenove";

Startiraneto na komandata

diff old.pl new.pl

shte izvede sledniiat rezultat ne ekrana
3c3
< print "Zdrasti Fenove";
\ No newline at end of file
---
> print "Zdrasti linux-bg Fenove";
\ No newline at end of file

Rezultatut ot operatsiiata mozhe da ima niakolko formata, ot koito vazhni sa context i unified. Zadavaneto na tova, koi format da izpolzvate stava posredstvom optsiiata -c za context i -u za unified. Tezi optsii davat informatsiia za failovete s koito boravim. Ne znam, koi ot dvata formata e za predpochitane, az lichno izpolzvam unified no tova edva li e ot goliamo znachenie.

Za da zapishete promenite e nuzhno da prenasochite izhoda kum fail. Tova stava po sledniia nachin

diff -u old.pl new.pl > test.patch

Kudeto failut test.patch predstavliava krupkata, koiato e neobhodima za da se "popravi" failut old.pl do sustoianieto na new.pl. Po tozi nachin vie napravihte vashata purva "krupka".

Osven da se sravniavat failove mozhe da se sravniava i sudurzhanieto na failovete v dve direktorii, kakto i eventualno i tehnite pod-direktorii. Ako ima dve pod-direktorii na  direktoriiata src, s imena new.dir i old.dir.

+--src/
        +--new.dir/
        +--old.dir/

Za da sravnim tiahnoto sudurzhanie e neobhodimo da se napishe slednata komanda(ot src direktoriiata)

diff -Naur news.dir old.dir

Zabelezhete, che pri zadavaneto na direktoriite ne se pishat "/". Optsiiata "r" instruktira komandata diff da sravni i sudurzhanieto na pod-direktoriite na dvete direktorii. S optsiiata "a" ukazvate, che failovete koito sravniavate shte se tretirat kato tekstovi failove, dori i da ne sa takiva. "N" optsiiata instruktira diff, kogato sravniava fail ot ednata direktoriia s fail, koito ne prisustva vuv vtorata direktoriia, da smiata nesushtestvuvashiia fail za sushtestvuvasht, samo che s nuleva dulzhina. V zavisimost ot oblastta na promenite sami reshavate dali da pravite pachove na tseli direktorii ili samo na daden fail.

CHesto se nalaga da izklyuchvate niakoi, ili niakolko faila ot sravnenieto. Tova stava s optsiiata -x. Ako iskate da izklyuchite ot sravnenito failove s razshirenie .txt e nuzhno da napishete

diff -x *.txt  -Naur news.dir old.dir

Po niakoga failovete, koito sravniavate, mogat da  imat neznachitelni razlichiia v broia na intervalite naprimer. Za da ne se  vzemat tezi promeni v predvid izpolzvaite optsiiata --ignore-brackets. Analogichno i za ignorirane na razlichiia mezhdu malki i golemi bukvi se izpolzva optsiiata --ignore-case.

Tezi naputstviia sa vi napulno dostatuchni za da pravite "krupki". Ako vse pak iskate na nauchite neshto poveche, prochetete rukovostvoto na diff komandata. Za novatsite -- stava s komadata komandata

man diff

Kak da prilozhite "krupkata"
Ne e dostatuchno da znaete samo  kak  da napravite krupka. Vazhno e da znete i  kak da ia prilozhite. Tova stava s komandata "patch". Nai-chesto komandata se izpolzva po sledniia  nachin

patch -p0 < test.patch

kudeto test.patch e imeto na veche suzdadenenata krupka.  Edinstvenata optsiia, koiato izpolzvahme po-gore e -p[nomer]. Za kakvo sluzhi tia? CHesto kogato sravniavate failove te se zapisvat s pulnite si imena. Razgledaite edna krupka i shte vidite neshto podobno:

++ /usr/local/test/src/old.dir/file1.pl
-- /usr/local/test/src/new.dir/file1.pl

Ako iskate da se izpolva imeto na programata ot purvata naklonena cherta "/" do kraia izpolzvaite -p0. Ako iskate ot purvata naklonena cherta do kraia pishete -p1 rezultatut ot koeto e local/test/src/old.dir/file1.pl. Ako iskate samoto ime na faila, bez putia, pishete -p bez parametri. V nashiia sluchai rezultata e file1.pl.

Kogato prilagate krupkata, mozhe da kazhete na programata da zapazva "zakurpenite" failove. Tova s stava s optsiiata --backup ili -b. Mozhe sushto taka da izbere s kakvo razshirenie da se zapisvat kopiiata na tezi failove. Stava s optsiiata --suffix=.bak, ako primerno iskate razshirenieto da e .bak.

Programata patch sama se opitva da razbere koi format ste izpolzvali za suzdavane na vashata krupka. Mozhete, ako iskate, izrichno da posochite formata: -c za context ili -u za unified.

Poveche informatsiia za patch, kakto i za dopulnitelni optsii

man patch
 

Ako ste procheli vsichko do tuk vnimatelno ima goliama veroiatnost da zapochnete skoro da pravite i prilagate sobstveni krupki.

Uspeh!


<< S Java i Linux na put | GNOME na bulgarski >>