Provided by:
manpages-pl_20060617-3_all 
NAZWA
patch - dolcz plik ronicowy do oryginalu
SK/LADNIA
patch [opcje] [plikoryginalny [plikz/lat]]
lecz zazwyczaj po prostu
patch -pnum <plikz/lat
OPIS
Patch pobiera plik z lat, ktory moe zawiera jedn z czterech postaci
ronic, dawanych przez program diff(1). Jeli plikz/lat jest pominity lub
jest mylnikiem, to lata bdzie czytana ze standardowego wejcia.
Nastpnie dolcza te ronice do pliku oryginalnego, dajc w efekcie wersj
zalatan. Domylnie, wersja zalatana jest podstawiana na miejsce
oryginalu. Moe te tworzy kopie zapasowe zmienianego oryginalu, zob.
opcja -b lub --backup. Kopia oryginalu jest zapisywana obok, z
rozszerzeniem ".orig" (w systemach nie obslugujcych dlugich nazw plikow
"~"). Posta nazwy kopii zapasowej mona kontrolowa przez opcje -b
(--suffix), -B (--prefix), lub -V (--version-control).
Nazwy plikow do zalatania s zwykle brane z pliku laty, ale jeli latany
bdzie tylko jeden plik, to mona poda go w wierszu polece jako
plikoryginalny.
Podczas uruchamiania, patch probuje sam okreli rodzaj listingu
ronicowego. Mona to zrobi te rcznie, opcjami -c (--context), -e (--ed),
-n (--normal) lub -u (--unified). Ronice typu context (starego
rodzaju, nowego rodzaju i unifikowane (unified)) s nanoszone na
oryginal wprost przez program patch, podczas gdy ronice ed s po prostu
przesylane poprzez potok do edytora ed(1).
Patch probuje automatycznie pomin wszelkie mieci znajdujce si przed
fragmentem ronicowym, dokona zalatania i znowu pomin mieci, znajdujce
si za ronic. Tak wic przekazanie patchowi, ronicy znajdujcej si np. w
wiadomoci pocztowej, powinno dziala. Jeli calo ronic jest wcita o ten
sam rozmiar, lub ronice kontekstowe zawieraj linie zakoczone parami
CRLF, lub s raz bd wielokrotnie zakapsulkowane przez poprzedzenie
cigiem "- " linii zaczynajcych si od "-", jak podano w RFC 934, to jest
to poprawnie uwzgldniane w lataniu.
W przypadku ronic typu context i w mniejszym stopniu ronic typu normal,
patch potrafi wykry, kiedy numery linii wymienione w lacie s
nieprawidlowe i sprobuje znale wlaciwe miejsce. Jako pierwszy strzal,
uywany jest numer linii uyty w badanym kawalku plus lub minus offset
uyty do zaaplikowania poprzedniego kawalka. Jeli nie jest to wlaciwe
miejsce, nastpi skanowanie w przod i wstecz w poszukiwaniu zestawu
linii odpowiadajcego podanemu kontekstowi. Na pocztek, szukane jest
miejsce, do ktorego pasuj wszystkie linie fragmentu. Jeli nie uda si
go znale i mamy do czynienia z ronicami kontekstowymi a wspolczynnik
`maximum fuzz factor' jest ustawiony na 1 lub wicej, to skanowanie jest
powtarzane, lecz teraz ignoruje pierwsz i ostatni lini kontekstu. Jeli
i to zawiedzie, a wyej wymieniony wspolczynnik jest ustawiony na 2 lub
wicej, to ignorowane bd dwie pierwsze i dwie ostatnie linie. (Domylnym
wspolczynnikiem jest 2.) Jeli patch nie moe znale wlaciwego miejsca do
zaaplikowania fragmentu ronicy, to wstawi go do pliku odrzuce, ktory
normalnie ma nazw pliku wyjciowego, z dopisan kocowk .rej (lub # jeli
.rej utworzyloby zbyt dlug nazw pliku. Jeli dodanie nawet pojedynczego
znaku # powoduje, e nazwa pliku staje si za dluga, to # zastpuje
ostatni znak nazwy). (Zauwa, e odrzucony fragment zostanie
wyprodukowany jako ronica typu context, niezalenie od postaci laty
wejciowej. Jeli byla ona typu normal, wiele kontekstow bdzie po prostu
pustych.) Numery linii w pliku odrzuce mog by inne ni w lacie:
odzwierciedlaj one przypuszczaln pozycj w nowym pliku, do ktorej
prawdopodobnie nale odrzucone fragmenty.
Gdy obrobka fragmentu jest zakoczona, zostaniesz poinformowany, czy
zakoczyla si sukcesem, czy te si nie powiodla i w ktorej linii (nowego
pliku) wg patcha ten fragment powinien si znale. Jeli jest ona inna od
numeru linii, podanego w pliku ronicowym, zostaniesz poinformowany o
offsecie. Pojedynczy duy offset moe by wskazowk, e fragment
zainstalowano w zlym miejscu. Jeli do porownania uyto wspolczynnika
`fuzz factor', to te bdziesz o tym poinformowany, gdy moe to by
podejrzane. Jeli uyle opcji --verbose, zostaniesz te powiadomiony o
fragmentach dopasowanych dokladnie.
Jeli w linii komend nie podano adnego pliku oryginalnego, patch
sprobuje go odgadn ze mieci, zawartych w pliku z ronic, stosujc ponisze
zasady.
Najpierw buduje uporzdkowan list kandydatur wedlug takich regul:
+o Jeli naglowek jest naglowkiem ronicy typu context, nazwa starego i
nowego pliku odczytywana jest z niego. Nazwa pliku jest ignorowana
jeli ma za malo ukonikow dla opcji -pnum lub --strip=num. Nazwa
/dev/null jest rownie ignorowana.
+o Jeli w pocztkowych mieciach jest linia Index: i albo brakuje obu
nazw, starego i nowego pliku, albo patch dziala zgodnie z POSIX, to
pobierana jest nazwa z tej linii.
+o W poniszych regulach zaklada si, e rozwaane nazwy plikow s
uporzdkowane (stary, nowy, indeks), niezalenie od kolejnoci, w
jakiej wystpuj w naglowku.
Nastpnie patch wybiera nazw pliki z listy potencjalnych nazw:
+o Jeli ktory z wymienionych plikow istnieje, to wybierana jest
pierwsza nazwa zgodna z POSIX, w przeciwnym razie najlepsza.
+o Jeeli patch nie ignoruje RCS, ClearCase i SCCS (zob. opcj -g num lub
--get=num), a tak wskazany plik istnieje, ale znaleziono glown
(master) pozycj RCS, ClearCase lub SCCS, wybrany zostanie pierwszy
plik wymieniony w tej pozycji.
+o Jeli nie istnieje plik o danej nazwie, nie znaleziono glownej
pozycji RCS, ClearCase lub SCCS, podano jakie nazwy, patch nie
stosuje si do POSIX, za lata wymaga utworzenia pliku, to wybierana
jest najlepsza nazwa wymagajca stworzenia najmniejszej liczby
katalogow.
+o Jeli powyszy algorytm heurystyczny nie da adnej nazwy pliku, to
zostaniesz o ni zapytany. Poza tym, jeli w prowadzcych mieciach
znajduje linia "Prereq: ", patch sprobuje pobra pierwsze slowo z tej
linii (zwykle numer wersji) i sprawdzi czy istnieje ono w pliku
wejciowym. Jeli nie, patch zapyta o potwierdzenie przed kontynuacj.
Efektem tego wszystkiego jest to, e powiniene by w stanie poda w
interfejsie newsow nastpujce:
| patch -d /usr/src/local/blurfl
i tym samym zalata katalog blurfl bezporednio z artykulu, ktory zawiera
lat.
Jeli plik z lat sklada si z wicej ni jednej laty, program patch
sprobuje zaaplikowa je tak, jakby przyszly w osobnych plikach z latami.
Znaczy to midzy innymi tyle, e nazwa latanego pliku jest okrelana dla
kadego listingu ronic z osobna i e mieci, znajdujce si przed kadym z
listingow bd analizowane jak opisano wyej. Do kolejnych lat mona
przekazywa opcje (i inn oryginaln nazw pliku), oddzielajc odpowiadajce
listy argumentow znakiem ' +'. (Lista argumentow kolejnej laty nie
musi jednak podawa nowej nazwy pliku z lat.)
OPCJE
-b, --backup
Tworzy pliki kopii zapasowych. To znaczy, przy lataniu pliku,
zamiast usuwania oryginalu tworzy jego kopi lub zmienia nazw. Jako
kopia zapasowa pliku, ktory nie istnial tworzony jest pusty plik,
zastpczo reprezentujcy nieistniejcy oryginal. Sposob ustalania nazw
plikow kopii zapasowych opisano przy opcjach -V lub
--version-control.
--backup-if-mismatch
Tworzy kopi zapasow jeli lata nie pasuje dokladnie do pliku a nie
zadano w inny sposob tworzenia kopii. Jest to zachowanie domylne,
chyba e patch dziala zgodnie z POSIX.
--no-backup-if-mismatch
Nie tworzy kopii zapasowej jeli lata nie pasuje dokladnie do pliku i
jeli nie zadano w inny sposob tworzenia kopii. Jest to zachowanie
domylne gdy patch dziala zgodnie z POSIX.
-B pref, --prefix=pref
Poprzedza przedrostkiem pref nazw pliku podczas tworzenia nazwy
zwyklej kopii. Na przyklad, przy -B /junk/ nazw zwyklej kopii dla
src/patch/util.c jest /junk/src/patch/util.c.
--binary
Za wyjtkiem standardowego wyjcia i /dev/tty, wszystkie pliki czyta i
zapisuje w trybie binarnym. Opcja ta nie ma adnych skutkow na
systemach zgodnych z POSIX. Na systemach podobnych do DOS, gdzie ma
znaczenie, lata powinna by tworzona przy uyciu diff -a --binary.
-c, --context
Wymusza interpretacj pliku z lat jako ronicy typu context.
-d kat, --directory=katalog
Powoduje interpretacj katalogu jako katalogu, ktory ma by biecym i
przechodzi do niego przed zrobieniem czegokolwiek innego.
-D symb, --ifdef=symb
Powoduje uywanie konstrukcji "#ifdef...#endif" do oznaczania zmian.
symb bdzie symbolem ronicujcym.
--dry-run
Wypisuje wynik latania bez faktycznego zmieniania plikow.
-e, --ed
Wymusza interpretacj pliku z lat jako skryptu ed.
-E, --remove-empty-files
Powoduje, e usuwane s pliki wyjciowe, ktore po zaaplikowaniu lat s
puste. Zwykle uycie tej opcji nie jest konieczne, gdy program
potrafi zbada znaczniki czasu w naglowku i stwierdzi, czy po
naniesieniu lat plik powinien istnie. Jeli jednak wejcie nie jest
plikiem ronic kontekstowych lub gdy patch dziala zgodnie z POSIX,
puste zalatane pliki nie bd usuwane, dopoki nie zostanie podana ta
opcja. Podczas usuwania pliku patch usiluje usun rownie jego puste
katalogi nadrzdne.
-f, --force
Wymusza zaloenie, e uytkownik dokladnie wie co robi i powoduje
niezadawanie pyta. Pomija laty, z ktorych naglowkow nie wynika, jaki
plik powinien by zalatany; pliki s latane nawet jeli maj zl wersj
dla linii Prereq:; zaklada, e laty nie s odwrocone, nawet jeli tak
wygldaj. Opcja ta nie eliminuje komentarzy; do tego uyj -s.
-F num, --fuzz=num
Ustawia wspolczynnik `maximum fuzz factor'. Opcja ta tyczy si tylko
ronic typu context i powoduje, e patch ignoruje maksymalnie tyle
linii, zagldajc w miejsca, gdzie ma zainstalowa fragment laty.
Zauwa, e duy wspolczynnik zwiksza prawdopodobiestwo nieprawidlowego
naniesienia laty. Domyln wartoci jest 2 i nie moe by ustawiona na
wicej ni liczba linii kontekstu w ronicy, czyli zwykle 3.
-g num, --get=num
Steruje akcjami programu patch gdy oryginalny plik jest pod kontrol
RCS lub SCCS, a nie istnieje lub jest przeznaczony tylko dla
odczytu. Take wtedy, gdy jest pod kontrol ClearCase, a nie
istnieje. Jeeli num jest dodatnie, to pobiera (get) lub aktualizuje
(check out) plik z danego systemu kontroli wersji (revision control
system). Jeli wynosi zero, patch ignoruje system kontroli wersji i
nie pobiera pliku; jeli num jest ujemne, to pyta uytkownika czy
pobra plik. Domylna warto tej opcji okrelana jest wartoci zmiennej
rodowiska PATCH_GET jeli takowa istnieje; jeli nie, to warto domylna
jest zerem, gdy patch dziala zgodnie z POSIX, w przeciwnym razie
jest ujemna.
-i plik/laty, --input=plik/laty
Odczytuje lat z pliku/laty. Jeli plikiem/laty jest -, to ze
standardowego wejcia, domylnie.
-l, --ignore-whitespace
Wykonuje swobodniejsze porownywanie wzorcow, w przypadku, gdy w
pliku pozamieniano tabulacje i spacje. Dowolna sekwencja bialych
spacji (znakow tabulacji lub spacji) w linii pliku laty bdzie
odpowiada dowolnej sekwencji bialych spacji oryginalnego pliku.
Cigi bialych spacji wystpujce na kocach linii s ignorowane.
Normalne znaki musz wci dokladnie pasowa. Kada linia kontekstu nadal
musi pasowa do linii oryginalnego pliku.
-n, --normal
Powoduje, e plik z lat jest interpretowany jak ronica typu `normal'.
-N, --forward
powoduje ignorowanie lat, ktore wydaj si by odwrocone lub ju
zaaplikowane. Zobacz te -R.
-o plik-wyj, --output=plik-wyj
Zamiast latania bezporednio oryginalnych plikow, wynik jest
kierowany do plik-wyj.
-pnum, --strip=num
Z kadej nazwy pliku znalezionej w pliku laty ujmuje najmniejszy
przedrostek zawierajcy num pocztkowych ukonikow. Cig kilku
ssiadujcych ukonikow liczy si za jeden ukonik. Opcj przewidziano na
wypadek gdyby przechowywal pliki w innym katalogu ni osoba, ktora
przeslala lat. Na przyklad, zalomy, e nazwa pliku w lacie miala
warto
/u/howard/src/blurfl/blurfl.c
ustawienie -p lub -p0 nie zmienia jej, -p1 daje
u/howard/src/blurfl/blurfl.c
bez pocztkowego ukonika, a -p4 daje
blurfl/blurfl.c
natomiast niepodanie -p w ogole, daje po prostu blurfl.c. Wynik tej
operacji jest poszukiwany albo w katalogu biecym, albo w katalogu
podanym przez opcj -d.
--posix
Postpuje bardziej zgodnie ze standardem POSIX:
+o Dociekajc nazw plikow z naglowkow ronic z listy (stary, nowy,
indeks) bierze pierwszy istniejcy plik.
+o Nie usuwa plikow, ktore po zalataniu staj si puste.
+o Nie pyta o pobieranie plikow z RCS, ClearCase czy SCCS.
+o Wymaga, by w wierszu polece wszystkie opcje wystpowaly przed
nazwami plikow.
+o Nie tworzy kopii zapasowych przy wystpieniu niezgodnoci.
--quoting-style=wyraz
Uywa stylu wyraz do cytowania nazw wyjciowych. Wyraz powinien by
jednym z poniszych:
literal
Wypisuje nazwy bez zmian.
shell Cytuje nazwy dla powloki jeli zawieraj metaznaki powloki lub
spowodowalyby dwuznaczno wyniku.
shell-always
Cytuje nazwy dla powloki, nawet wtedy, gdy normalnie nie
wymagalyby cytowania.
c Cytuje nazwy jak dla lacuchow w jzyku C.
escape Cytuje jak z c, z wyjtkiem tego, i pomija otaczajce znaki
cudzyslowu.
Warto domyln opcji --quoting-style mona okreli za pomoc zmiennej
rodowiska QUOTING_STYLE. Jeli nie jest ona ustawiona, to wartoci
domyln jest shell.
-r plik-odrz, --reject-file=plik-odrz
Odrzucone poprawki s umieszczane w zadanym pliku-odrz, a nie w
domylnym pliku odrzuce .rej.
-R, --reverse
Mowi, e lata ta zostala utworzona przy zamienionych miejscami
starych i nowych plikach [tlum. zamiast `diff -c stary nowy' uyto
pomylkowo `diff -c nowy stary']. (Tak, obawiam si e czasem si to
zdarza, natura ludzka jest jaka jest.) Patch Sprobuje zamieni kady
fragment przed jego zaaplikowaniem. Odrzucenia wyjd w formacie
zamienionym (swapped). Opcja -R nie dziala ze skryptami ronicowymi
eda gdy jest tam zbyt malo danych do zrekonstruowania operacji
odwrotnej.
Jeli pierwszy fragment laty zawiedzie, patch odwraca ten fragment,
sprawdzajc czy nie moe by tak zaaplikowany. Jeli moe, zostaniesz
zapytany czy chcesz ustawi opcj -R. Jeli nie, lata bdzie aplikowana
dalej w sposob tradycyjny. (Uwaga: metoda ta nie moe wykry laty
odwroconej jeli jest to ronica typu normal i jeli pierwsz komend
jest doklejanie (append) (tj. powinno to by kasowanie -- delete).
Jest tak dlatego, e doklejanie zawsze dziala, gdy pusty kontekst
pasuje wszdzie. Szczliwym trafem, wiele lat raczej dodaje lub
zmienia linie ni je kasuje, wic wikszo odwroconych ronic typu normal
zaczyna si od kasowania, co zawiedzie i wywola heurystyk.)
-s, --silent, --quiet
Powoduje, e patch dziala cicho, chyba e pojawi si bld.
-t, --batch
Podobne do -f, gdy eliminuje pytania, lecz dziala wedlug innych
zaloe: pomija laty, ktorych naglowki nie zawieraj nazw plikow (tak
samo jak -f), pomija laty dla plikow ze zlymi wersjami Prereq: i
przyjmuje, e laty s odwrocone, jeli na takie wygldaj.
-T, --set-time
Ustawia czasy modyfikacji i ostatniego dostpu zalatanych plikow
wedlug znacznikow czasu podanych w naglowkach ronic typu context,
zakladajc, e naglowki te stosuj czas lokalny. Opcja ta jest
niezalecana, gdy uycie lat korzystajcych z czasu lokalnego przez
osoby z innych stref czasowych nie jest latwe. Ponadto znaczniki
czasu lokalnego nie s jednoznaczne w przypadku, gdy zegar lokalny
jest cofany w zwizku z dostosowywaniem do czasu letniego. Zamiast
tej opcji, powinno si tworzy laty z czasem uniwersalnym (UTC) i
stosowa opcj -Z lub --set-utc.
-u, --unified
Wymusza interpretacj laty jako ronicy typu unified context
(zunifikowana ronica kontekstowa).
-V metoda, --version-control=metoda
-V metoda, --version--control=metoda Powoduje, e metoda staje si
metod tworzenia nazw plikow zapasowych. Rodzaje robionych kopii
zapasowych mona rownie poda w zmiennej rodowiskowej
PATCH_VERSION_CONTROL (lub, jeli nie jest ustawiona, zmienn
VERSION_CONTROL), ktora jest przeslaniana przez t opcj. Wybrana
metoda nie ma wplywu na to, czy kopie zapasowe bd wykonywane, i w
jakich przypadkach. Okrela tylko sposob tworzenia nazw plikow
zapasowych. Warto metody jest podobna jak zmiennej `version-
control' GNU Emacsa. Patch rozpoznaje te ich bardziej opisowe
synonimy. Poprawne wartoci to (przyjmowane s rozronialne skroty):
numbered lub t
Tworzy zawsze numerowane kopie zapasowe. Nazw numerowanej kopii
zapasowej pliku F jest F.~N~ gdzie N to numer wersji.
existing lub nil
Tworzy numerowane kopie zapasowe plikow, ktore ju je maj, a
zwykle kopie dla pozostalych. Tak jest domylnie.
`never' lub `simple'
Zawsze robi zwykle kopie zapasowe. Opcje -B lub --prefix, -Y lub
--basename-prefix i -z lub --suffix okrelaj nazw pliku zwyklej
kopii zapasowej. Jeeli nie podano adnej z nich, to stosowany
jest przyrostek zwyklej kopii zapasowej. Jest to warto zmiennej
rodowiska SIMPLE_BACKUP_SUFFIX, jeli jest ona ustawiona, lub
.orig w przeciwnym razie.
Przy kopiach numerowanych lub zwyklych, jeli nazwa pliku kopii
zapasowej jest zbyt dluga, to zamiast niej uywa si przyrostka kopii
~. Jeeli nawet dodanie ~ spowodowaloby, e nazwa bdzie za dluga, to
~ zastpuje ostatni znak nazwy pliku.
--verbose
Wypisuje dodatkowe informacje o wykonywanej pracy.
-x num, --debug=num
ustawia wewntrzne flagi debuggowe. Ma to znaczenie tylko dla lataczy
programu patch.
-Y pref, --basename-prefix=pref
Przy tworzeniu nazwy zwyklej kopii poprzedza przedrostkiem pref
podstawow cz nazwy pliku. Na przyklad, przy -Y .del/ nazw pliku
zwyklej kopii zapasowej dla src/patch/util.c jest
src/patch/.del/util.c.
-z suffix, --suffix=suffix
Powoduje, e suff jest interpretowane jako przyrostek nazw zwyklych
kopii zapasowych. Na przyklad, przy -z - nazw pliku zwyklej kopii
kopii dla src/patch/util.c jest src/patch/util.c-. Przyrostek kopii
mona te okreli za pomoc zmiennej rodowiska SIMPLE_BACKUP_SUFFIX,
ktora jest przeslaniana przez t opcj.
-Z, --set-utc
Ustawia czasy modyfikacji i ostatniego dostpu zalatanych plikow
wedlug znacznikow czasu podanych w naglowkach ronic typu context,
zakladajc, e naglowki te stosuj czas uniwersalny - Coordinated
Universal Time (UTC, znany te jako czas redni Greenwich GMT).
Zobacz te opcja -T lub --set-time.
Opcje -Z lub --set-utc i -T lub --set-time normalnie powstrzymuj si
od ustawiania czasu pliku jeli jego oryginalny czas nie pasuje do
czasu podanego w naglowku laty lub jej zawarto nie pasuje dokladnie
do laty. Jednak, jeli podano opcj -f lub --force, to czas pliku
jest ustawiany bez wzgldu na niezgodnoci.
Z powodu ogranicze formatu wyjciowego stosowanego przez diff, opcje
te nie potrafi aktualizowa czasow plikow, ktorych zawarto si nie
zmienila. Wykorzystujc te opcje powinno si pamita o usuniciu (np.
za pomoc make clean) wszystkich plikow, ktore zale od zalatanych, by
poniejsze wywolania make nie zostaly zmylone czasem zalatanych
plikow.
--help
Wypisuje list opcji i koczy dzialanie.
-v, --version
Wypisuje wersj programu i koczy dzialanie.
RODOWISKO
PATCH_GET
Okrela, czy patch powinien domylnie pobiera brakujce lub
przeznaczone tylko do odczytu pliki z RCS, ClearCase lub SCCS.
Zobacz opis opcji -g lub --get.
POSIXLY_CORRECT
Jeli jest ustawiona, patch cilej stosuje si do standardu POSIX w
zachowaniu domylnym. Zobacz opis opcji --posix.
QUOTING_STYLE
Domylna warto opcji --quoting-style.
SIMPLE_BACKUP_SUFFIX
Przyrostek stosowany do tworzenia nazw plikow zwyklych kopii
zapasowych .orig.
TMPDIR, TMP, TEMP
Katalog do przechowywania plikow tymczasowych. patch wykorzystuje
pierwsz zmienn rodowiska z tej listy, jaka jest ustawiona. Jeli
adna nie jest, warto domylna zaley od systemu: normalnie na
maszynach uniksowych jest to /tmp.
VERSION_CONTROL lub PATCH_VERSION_CONTROL
Wybiera metod kontroli wersji kopii pliku; zobacz opcja -v lub
--version-control.
PLIKI
$TMPDIR/p*
pliki tymczasowe
/dev/tty
terminal sterujcy; uywany do uzyskania odpowiedzi na pytania
zadawane uytkownikowi.
ZOBACZ TAKE
diff(1) ed(1).
Marshall T. Rose and Einar A. Stefferud, Proposed Standard for Message
Encapsulation, Internet RFC 934 <URL:ftp://ftp.isi.edu/in-
notes/rfc934.txt> (1985-01).
UWAGI DLA WYSY/LAJCYCH /LATY
Istnieje kilka rzeczy, o ktorych naley pamita przy wysylaniu lat.
Tworz lat wedlug sprawdzonego schematu. Dobr metod jest polecenie
diff -Naur stary nowy gdzie stary i nowy identyfikuj stary i nowy
katalog. Nazwy stary i nowy nie powinny zawiera adnych ukonikow.
Naglowki z polece diff powinny zawiera daty i czasy czasu uniwersalnego
(UTC) z zastosowaniem tradycyjnego formatu uniksowego, by odbiorcy laty
mogli skorzysta z opcji -Z lub --set-utc. Oto przykladowe polecenie, z
uyciem skladni powloki Bourne'a:
LC_ALL=C TZ=UTC0 diff -Naur gcc-2.7 gcc-2.8
Powiadom odbiorcow, jak zaaplikowa lat, wskazujc, do ktorego katalogu
przej cd i jakich opcji patch uy. Zalecany jest lacuch opcji -Np1.
Wyprobuj procedur stawiajc si na miejscu odbiorcy i stosujc lat na kopi
oryginalnych plikow.
Moesz oszczdzi ludziom wielu problemow, zachowujc plik patchlevel.h
Jest on latany aby zwikszy poziom laty (patch level). Umie go jako
pierwsz ronic w pliku z lat, ktory wysylasz. Jeli do laty wstawisz
lini Prereq:, to nie pozwoli ona na stosowanie lat poza kolejnoci bez
ostrzeenia.
Moesz utworzy plik u odbiorcy wysylajc mu ronic z porownania /dev/null
lub pusty plik o dacie rownej Epoce (1970-01-01 00:00:00 UTC) z
plikiem, ktory chcesz stworzy. Zadziala to tylko jeli plik taki
jeszcze nie istnieje w katalogu docelowym. I odwrotnie, moesz usun
plik wysylajc ronic kontekstow porownujc plik do usunicia z pustym
plikiem datowanym na Epok. Plik nie zostanie usunity jeli patch dziala
zgodnie z POSIX a nie podano opcji -E lub --remove-empty-files. Prost
metod generowania lat, ktore tworz i usuwaj pliki jest uycie opcji -N
lub --new-file programu GNU diff. Jeli spodziewasz si, e odbiorca uyje
opcji -pN, nie wysylaj wyjcia wygldajcego tak:
diff -Naur v2.0.29/prog/README prog/README
--- v2.0.29/prog/README Mon Mar 10 15:13:12 1997
+++ prog/README Mon Mar 17 14:58:22 1997
bo obie nazwy plikow maj ron liczb ukonikow, a rozmaite wersje patch
ronie interpretuj nazwy plikow. Unikniesz mylnej interpretacji,
wysylajc zamiast tego takie wyjcie:
diff -Naur v2.0.29/prog/README v2.0.30/prog/README
--- v2.0.29/prog/README Mon Mar 10 15:13:12 1997
+++ v2.0.30/prog/README Mon Mar 17 14:58:22 1997
Unikaj wysylania lat porownujcych pliki o takich nazwach, jakie maj
kopie zapasowe, jak np. README.orig, gdy moe to zmyli patch, tak e
bdzie nakladal lat na plik kopii zamiast na rzeczywisty plik. Zamiast
tego powiniene wysyla laty porownujce pliki o takich samych nazwach
podstawowych, poloone w ronych katalogach, np. old/README i new/README.
Uwaaj by nie wysyla lat odwrotnych, gdy powoduje to, e ludzie
zastanawiaj si czy ju zalczyli lat.
Nie probuj budowa lat, ktore zmienialy by pliki pochodne (np. plik
configure, w ktorym jest linia configure: configure.in w swoim
makefile), poniewa odbiorca i tak powinien by w stanie je odtworzy.
Jeli musisz wysla ronice plikow pochodnych, utworz je uywajc czasu
uniwersalnego UTC; odbiorcy powinni zaaplikowa lt stosujc opcj -Z lub
--set-utc, a nastpnie usun wszystkie nielatane pliki, ktore zale od
wlanie zalatanych (np. za pomoc make clean).
Mimo i mona umieci 582 listingow ronic w jednym pliku, to lepiej wstawi
grupy powizanych lat do osobnych plikow.
Poza tym, upewnij si, e podale poprawnie nazwy plikow, zarowno w
naglowku ronicy kontekstowej, jak i w linii Index:. Jeli latasz co w
podkatalogu, upewnij si, e powiadomile uytkownika, by podal opcj -p.
DIAGNOSTYKA
Zbyt wiele by tu wymienia, lecz ogolnie wskazuj, e patch nie mogl
przetworzy pliku z lat.
Jeli podano opcj --verbose, komunikat Hmm... wskazuje, e w pliku z lat
jest nieprzetworzony tekst i e patch probuje domyli si, czy znajduje si
w nim lata, a jeli tak, to jakiego jest rodzaju.
Patch koczy prac z kodem 0 jeli wszystkie kawalki zaaplikowano
poprawnie, 1 jeli jakie nie mogly by zaaplikowane, a 2 w przypadku
powaniejszych klopotow. Podczas aplikowania zbioru lat w ptli,
umoliwia ci sprawdzenie tego kodu, tak by nie dolcza ju reszty lat do
czciowo polatanego pliku.
ZASTRZEENIA
Ronice kontekstowe nie mog wiarygodnie odwzorowywa tworzenia lub
usuwania pustych plikow, pustych katalogow czy plikow specjalnych, jak
dowizania symboliczne. Nie potrafi te reprezentowa zmian w metadanych
pliku, takich jak wlaciciel, grupa, prawa czy to, e jeden plik jest
twardym dowizaniem do drugiego. Jeli takie zmiany s rownie wymagane,
lacie powinny towarzyszy osobne instrukcje (np. w postaci skryptu
powloki).
Patch nie potrafi stwierdzi, czy w skrypcie ed nie istniej numery
linii, a w normalnych ronicach moe wykry niewlaciwe numery tylko gdy
odnajdzie zmian lub usunicie. Ronica kontekstowa, uywajca
wspolczynnika `fuzz factor' 3 moe mie podobne problemy. Dopoki nie
zostanie dodany wlaciwy interaktywny interfejs uytkownika, powiniene
raczej w tych wypadkach robi ronice typu context. Zobaczysz czy zmiany
maj sens. Oczywicie kompilowanie bez bldow jest calkiem dobrym
wskazaniem, e lata zadzialala, lecz nie jest to zawsze prawda.
Patch zwykle daje prawidlowe wyniki, nawet gdy musi duo zgadywa. Jednak
rezultaty maj gwarancj prawidlowoci tylko wtedy, gdy laty aplikowane s
do dokladnie tej samej wersji pliku, z ktorej zostaly wygenerowane.
KWESTIE ZGODNOCI
Standard POSIX podaje zachowanie, ktore roni si od tradycyjnego
zachowania si patcha. Powiniene pamita o tych ronicach jeli musisz
wspolpracowa z patch w wersji 2.1 lub wczeniejszymi, ktore nie s zgodne
z POSIX.
+o W tradycyjnym patchu argument opcji -p byl opcjonalny, a gole -p
bylo rownowane -p0. Obecnie opcja -p wymaga argumentu, a -p 0 jest
teraz rownowanikiem -p0. Dla zachowania maksymalnej zgodnoci,
stosuj opcje typu -p0 i -p1.
Ponadto, tradycyjny patch po prostu zlicza ukoniki przy obcinaniu
przedrostkow ciekowych; patch liczy obecnie skladowe nazwy pliku.
To znaczy, cig ssiadujcych ukonikow liczy si obecnie za jeden
ukonik. Dla zachowania maksymalnej zgodnoci, unikaj wysylania lat
zawierajcych // w nazwach plikow.
+o W tradycyjnym patchu, tworzenie kopii zapasowych bylo wlczone
domylnie. Zachowanie to jest teraz wlczane opcj -b lub --backup.
I odwrotnie, w POSIX-owym patch, kopie nigdy nie s tworzone, nawet
jeli wystpi niedopasowanie laty. W GNU patch, zachowanie to jest
wlczane opcj --no-backup-if-mismatch lub przez wlczenie zgodnoci z
POSIX opcj --posix albo ustawieniem zmiennej rodowiska
POSIXLY_CORRECT.
Opcja -b suffix tradycyjnego patch jest rownowana opcjom
-b -z suffix dla GNU patch.
+o Tradycyjny patch stosuje skomplikowan (i nie w pelni udokumentowan)
metod domylania si z naglowka laty nazwy pliku do zalatania. Metoda
ta nie jest zgodna z POSIX i ma kilka niepoprawnie zakodowanych
fragmentow [gotchas]. Obecny patch korzysta z innej, rownie
skomplikowanej (ale lepiej udokumentowanej) metody, ktora jest
opcjonalnie zgodna z POSIX; mamy nadziej, e ma mniej bldow. Obie te
metody s ze sob zgodne jeli nazwy plikow w naglowku ronicy
kontekstowej i w linii Index: po obciciu przedrostka s identyczne.
Normalnie lata jest zgodna jeli wszystkie nazwy plikow w naglowku
zawieraj t sam liczb ukonikow.
+o Gdy tradycyjny patch zadawal uytkownikowi pytanie, kierowal je na
standardowe wyjcie bldow i oczekiwal odpowiedzi z pierwszego pliku
poniszej listy bdcego terminalem: standardowe wyjcie bldow,
standardowe wyjcie, /dev/tty, i standardowe wejcie. Teraz patch
wysyla pytania na standardowe wyjcie i pobiera odpowiedzi z
/dev/tty. Zmieniono domylne odpowiedzi na niektore z pyta. Dziki
temu patch nigdy nie wchodzi w nieskoczon ptl przy stosowaniu
domylnych odpowiedzi.
+o Tradycyjny patch koczyl dzialanie z kodem rownym liczbie bldnych
fragmentow, albo z kodem 1 jeli napotkano powany problem. Obecnie
patch koczy dzialanie z kodem 1 jeli nie udalo si zaaplikowa jakich
fragmentow, albo 2 jeli napotkano powany problem.
+o Wysylajc instrukcje okrelajce sposob skorzystania z laty przez kogo
pracujcego z GNU patch, tradycyjnym patchem, lub patch em zgodnym z
POSIX ogranicz si do podanych niej opcji. W tym zestawieniu spacje
s znaczce, a argumenty wymagane.
-c
-d kat
-D symb
-e
-l
-n
-N
-o plik-wyj
-pnum
-R
-r plik-odrz
B/LDY
Zgloszenia bldow prosz wysyla do <bug-gnu-utils@gnu.org>.
Moglby by sprytniejszy co do czciowych trafie, nadmiernie odbiegajcych
od normy offsetow i zamienionego kodu, lecz wymagaloby to dodatkowego
przebiegu.
Jeli kod zostal powielony (np. #ifdef STARYKOD ... #else ... #endif),
patch nie moe zalata obu wersji, i jeli w ogole zadziala,
prawdopodobnie zalata niewlaciw i powie, e udalo mu si z obydwiema.
Jeli aplikujesz lat, ktor ju zaaplikowale, patch pomyli e jest to
odwrotna lata i zaoferuje zdjcie laty. Mona to uwaa za zaprojektowan
funkcj programu.
KOPIOWANIE
Copyright 1984, 1985, 1986, 1988 Larry Wall.
Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998
Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the
entire resulting derived work is distributed under the terms of a
permission notice identical to this one.
Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions, except that this permission notice may be included in
translations approved by the copyright holders instead of in the
original English.
AUTORZY
Larry Wall napisal pierwotn wersj patcha. Paul Eggert usunl istniejce
w programie arbitralne ograniczenia. Dodal obslug plikow binarnych,
ustawianie czasow pliku i usuwanie plikow, i uczynil go bardziej
zgodnym z POSIX-em. Swoj wklad wnieli te Wayne Davison, ktory dodal
obslug formatu unidiff, i David MacKenzie, ktory doloyl obslug ustawie
i kopii zapasowych.
INFORMACJE O T/LUMACZENIU
Powysze tlumaczenie pochodzi z nieistniejcego ju Projektu Tlumaczenia
Manuali i moe nie by aktualne. W razie zauwaenia ronic midzy powyszym
opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji,
prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.