patch

Autres langues

Langue: pl

Autres versions - même langue

Version: 21 marca 1998 (openSuse - 09/10/07)

Section: 1 (Commandes utilisateur)

NAZWA

patch - do³±cz plik ró¿nicowy do orygina³u

SK£ADNIA

patch [opcje] [plikoryginalny [plikz³at±]]

lecz zazwyczaj po prostu

patch -pnum <plikz³at±

OPIS

Patch pobiera plik z ³at±, który mo¿e zawieraæ jedn± z czterech postaci ró¿nic, dawanych przez program diff(1). Je¶li plikz³at± jest pominiêty lub jest my¶lnikiem, to ³ata bêdzie czytana ze standardowego wej¶cia. Nastêpnie do³±cza te ró¿nice do pliku oryginalnego, daj±c w efekcie wersjê za³atan±. Domy¶lnie, wersja za³atana jest podstawiana na miejsce orygina³u. Mo¿e te¿ tworzyæ kopie zapasowe zmienianego orygina³u, zob. opcja -b lub --backup. Kopia orygina³u jest zapisywana obok, z rozszerzeniem .orig (na systemach nie obs³uguj±cych d³ugich nazw plików ~). Postaæ nazwy kopii zapasowej mo¿na kontrolowaæ przez opcje -b (--suffix), -B (--prefix), lub -V (--version-control).

Nazwy plików do za³atania s± zwykle brane z pliku ³aty, ale je¶li ³atany bêdzie tylko jeden plik, to mo¿na podaæ go w wierszu poleceñ jako plikoryginalny.

Podczas uruchamiania, patch próbuje sam okre¶liæ rodzaj listingu ró¿nicowego. Mo¿na to zrobiæ te¿ rêcznie, opcjami -c (--context), -e (--ed), -n (--normal) lub -u (--unified). Ró¿nice typu context (starego rodzaju, nowego rodzaju i unifikowane (unified)) s± nanoszone na orygina³ wprost przez program patch, podczas gdy ró¿nice ed s± po prostu przesy³ane poprzez potok do edytora ed(1).

Patch próbuje automatycznie pomin±æ wszelkie ¶mieci znajduj±ce siê przed fragmentem ró¿nicowym, dokonaæ za³atania i znowu pomin±æ ¶mieci, znajduj±ce siê za ró¿nic±. Tak wiêc przekazanie patchowi, ró¿nicy znajduj±cej siê np. w wiadomo¶ci pocztowej, powinno dzia³aæ. Je¶li ca³o¶æ ró¿nic jest wciêta o ten sam rozmiar, lub ró¿nice kontekstowe zawieraj± linie zakoñczone parami CRLF, lub s± raz b±d¼ wielokrotnie zakapsu³kowane przez poprzedzenie ci±giem "- " linii zaczynaj±cych siê od "-", jak podano w RFC 934, to jest to poprawnie uwzglêdniane w ³ataniu.

W przypadku ró¿nic typu context i w mniejszym stopniu ró¿nic typu normal, patch potrafi wykryæ, kiedy numery linii wymienione w ³acie s± nieprawid³owe i spróbuje znale¼æ w³a¶ciwe miejsce. Jako pierwszy strza³, u¿ywany jest numer linii u¿yty w badanym kawa³ku plus lub minus offset u¿yty do zaaplikowania poprzedniego kawa³ka. Je¶li nie jest to w³a¶ciwe miejsce, nast±pi skanowanie w przód i wstecz w poszukiwaniu zestawu linii odpowiadaj±cego podanemu kontekstowi. Na pocz±tek, szukane jest miejsce, do którego pasuj± wszystkie linie fragmentu. Je¶li nie uda siê go znale¼æ i mamy do czynienia z ró¿nicami kontekstowymi a wspó³czynnik `maximum fuzz factor' jest ustawiony na 1 lub wiêcej, to skanowanie jest powtarzane, lecz teraz ignoruje pierwsz± i ostatni± liniê kontekstu. Je¶li i to zawiedzie, a wy¿ej wymieniony wspó³czynnik jest ustawiony na 2 lub wiêcej, to ignorowane bêd± dwie pierwsze i dwie ostatnie linie. (Domy¶lnym wspó³czynnikiem jest 2.) Je¶li patch nie mo¿e znale¼æ w³a¶ciwego miejsca do zaaplikowania fragmentu ró¿nicy, to wstawi go do pliku odrzuceñ, który normalnie ma nazwê pliku wyj¶ciowego, z dopisan± koñcówk± .rej (lub # je¶li .rej utworzy³oby zbyt d³ug± nazwê pliku. Je¶li dodanie nawet pojedynczego znaku # powoduje, ¿e nazwa pliku staje siê za d³uga, to # zastêpuje ostatni znak nazwy). (Zauwa¿, ¿e odrzucony fragment zostanie wyprodukowany jako ró¿nica typu context, niezale¿nie od postaci ³aty wej¶ciowej. Je¶li by³a ona typu normal, wiele kontekstów bêdzie po prostu pustych.) Numery linii w pliku odrzuceñ mog± byæ inne ni¿ w ³acie: odzwierciedlaj± one przypuszczaln± pozycjê w nowym pliku, do której prawdopodobnie nale¿± odrzucone fragmenty.

Gdy obróbka fragmentu jest zakoñczona, zostaniesz poinformowany, czy zakoñczy³a siê sukcesem, czy te¿ siê nie powiod³a i w której linii (nowego pliku) wg patcha ten fragment powinien siê znale¼æ. Je¶li jest ona inna od numeru linii, podanego w pliku ró¿nicowym, zostaniesz poinformowany o offsecie. Pojedynczy du¿y offset mo¿e byæ wskazówk±, ¿e fragment zainstalowano w z³ym miejscu. Je¶li do porównania u¿yto wspó³czynnika `fuzz factor', to te¿ bêdziesz o tym poinformowany, gdy¿ mo¿e to byæ podejrzane. Je¶li u¿y³e¶ opcji --verbose, zostaniesz te¿ powiadomiony o fragmentach dopasowanych dok³adnie.

Je¶li w linii komend nie podano ¿adnego pliku oryginalnego, patch spróbuje go odgadn±æ ze ¶mieci, zawartych w pliku z ró¿nic±, stosuj±c poni¿sze zasady.

Najpierw buduje uporz±dkowan± listê kandydatur wed³ug takich regu³:

*
Je¶li nag³ówek jest nag³ówkiem ró¿nicy typu context, nazwa starego i nowego pliku odczytywana jest z niego. Nazwa pliku jest ignorowana je¶li ma za ma³o uko¶ników dla opcji -pnum lub --strip=num. Nazwa /dev/null jest równie¿ ignorowana.
*
Je¶li w pocz±tkowych ¶mieciach jest linia Index: i albo brakuje obu nazw, starego i nowego pliku, albo patch dzia³a zgodnie z POSIX, to pobierana jest nazwa z tej linii.
*
W poni¿szych regu³ach zak³ada siê, ¿e rozwa¿ane nazwy plików s± uporz±dkowane (stary, nowy, indeks), niezale¿nie od kolejno¶ci, w jakiej wystêpuj± w nag³ówku.

Nastêpnie patch wybiera nazwê pliki z listy potencjalnych nazw:

*
Je¶li który¶ z wymienionych plików istnieje, to wybierana jest pierwsza nazwa zgodna z POSIX, w przeciwnym razie najlepsza.
*
Je¿eli patch nie ignoruje RCS, ClearCase i SCCS (zob. opcjê -g num lub --get=num), a tak wskazany plik istnieje, ale znaleziono g³ówn± (master) pozycjê RCS, ClearCase lub SCCS, wybrany zostanie pierwszy plik wymieniony w tej pozycji.
*
Je¶li nie istnieje plik o danej nazwie, nie znaleziono g³ównej pozycji RCS, ClearCase lub SCCS, podano jakie¶ nazwy, patch nie stosuje siê do POSIX, za¶ ³ata wymaga utworzenia pliku, to wybierana jest najlepsza nazwa wymagaj±ca stworzenia najmniejszej liczby katalogów.
*
Je¶li powy¿szy algorytm heurystyczny nie da ¿adnej nazwy pliku, to zostaniesz o ni± zapytany. Poza tym, je¶li w prowadz±cych ¶mieciach znajduje linia Prereq: , patch spróbuje pobraæ pierwsze s³owo z tej linii (zwykle numer wersji) i sprawdziæ czy istnieje ono w pliku wej¶ciowym. Je¶li nie, patch zapyta o potwierdzenie przed kontynuacj±.

Efektem tego wszystkiego jest to, ¿e powiniene¶ byæ w stanie podaæ w interfejsie newsów nastêpuj±ce:

     | patch -d /usr/src/local/blurfl

i tym samym za³ataæ katalog blurfl bezpo¶rednio z artyku³u, który zawiera ³atê.

Je¶li plik z ³at± sk³ada siê z wiêcej ni¿ jednej ³aty, program patch spróbuje zaaplikowaæ je tak, jakby przysz³y w osobnych plikach z ³atami. Znaczy to miêdzy innymi tyle, ¿e nazwa ³atanego pliku jest okre¶lana dla ka¿dego listingu ró¿nic z osobna i ¿e ¶mieci, znajduj±ce siê przed ka¿dym z listingów bêd± analizowane jak opisano wy¿ej. Do kolejnych ³at mo¿na przekazywaæ opcje (i inn± oryginaln± nazwê pliku), oddzielaj±c odpowiadaj±ce listy argumentów znakiem +. (Lista argumentów kolejnej ³aty nie musi jednak podawaæ nowej nazwy pliku z ³at±.)

OPCJE

-b, --backup
Tworzy pliki kopii zapasowych. To znaczy, przy ³ataniu pliku, zamiast usuwania orygina³u tworzy jego kopiê lub zmienia nazwê. Jako kopia zapasowa pliku, który nie istnia³ tworzony jest pusty plik, zastêpczo reprezentuj±cy nieistniej±cy orygina³. Sposób ustalania nazw plików kopii zapasowych opisano przy opcjach -V lub --version-control.
--backup-if-mismatch
Tworzy kopiê zapasow± je¶li ³ata nie pasuje dok³adnie do pliku a nie za¿±dano w inny sposób tworzenia kopii. Jest to zachowanie domy¶lne, chyba ¿e patch dzia³a zgodnie z POSIX.
--no-backup-if-mismatch
Nie tworzy kopii zapasowej je¶li ³ata nie pasuje dok³adnie do pliku i je¶li nie za¿±dano w inny sposób tworzenia kopii. Jest to zachowanie domy¶lne gdy patch dzia³a zgodnie z POSIX.
-B pref, --prefix=pref
Poprzedza przedrostkiem pref nazwê pliku podczas tworzenia nazwy zwyk³ej kopii. Na przyk³ad, przy -B /junk/ nazw± zwyk³ej kopii dla src/patch/util.c jest /junk/src/patch/util.c.
--binary
Za wyj±tkiem standardowego wyj¶cia i /dev/tty, wszystkie pliki czyta i zapisuje w trybie binarnym. Opcja ta nie ma ¿adnych skutków na systemach zgodnych z POSIX. Na systemach podobnych do DOS, gdzie ma znaczenie, ³ata powinna byæ tworzona przy u¿yciu diff -a --binary.
-c, --context
Wymusza interpretacjê pliku z ³at± jako ró¿nicy typu context.
-d kat, --directory=katalog
Powoduje interpretacjê katalogu jako katalogu, który ma byæ bie¿±cym i przechodzi do niego przed zrobieniem czegokolwiek innego.
-D symb, --ifdef=symb
Powoduje u¿ywanie konstrukcji "#ifdef...#endif" do oznaczania zmian. symb bêdzie symbolem ró¿nicuj±cym.
--dry-run
Wypisuje wynik ³atania bez faktycznego zmieniania plików.
-e, --ed
Wymusza interpretacjê pliku z ³at± jako skryptu ed.
-E, --remove-empty-files
Powoduje, ¿e usuwane s± pliki wyj¶ciowe, które po zaaplikowaniu ³at s± puste. Zwykle u¿ycie tej opcji nie jest konieczne, gdy¿ program potrafi zbadaæ znaczniki czasu w nag³ówku i stwierdziæ, czy po naniesieniu ³at plik powinien istnieæ. Je¶li jednak wej¶cie nie jest plikiem ró¿nic kontekstowych lub gdy patch dzia³a zgodnie z POSIX, puste za³atane pliki nie bêd± usuwane, dopóki nie zostanie podana ta opcja. Podczas usuwania pliku patch usi³uje usun±æ równie¿ jego puste katalogi nadrzêdne.
-f, --force
Wymusza za³o¿enie, ¿e u¿ytkownik dok³adnie wie co robi i powoduje niezadawanie pytañ. Pomija ³aty, z których nag³ówków nie wynika, jaki plik powinien byæ za³atany; pliki s± ³atane nawet je¶li maj± z³± wersjê dla linii Prereq:; zak³ada, ¿e ³aty nie s± odwrócone, nawet je¶li tak wygl±daj±. Opcja ta nie eliminuje komentarzy; do tego u¿yj -s.
-F num, --fuzz=num
Ustawia wspó³czynnik `maximum fuzz factor'. Opcja ta tyczy siê tylko ró¿nic typu context i powoduje, ¿e patch ignoruje maksymalnie tyle linii, zagl±daj±c w miejsca, gdzie ma zainstalowaæ fragment ³aty. Zauwa¿, ¿e du¿y wspó³czynnik zwiêksza prawdopodobieñstwo nieprawid³owego naniesienia ³aty. Domy¶ln± warto¶ci± jest 2 i nie mo¿e byæ ustawiona na wiêcej ni¿ liczba linii kontekstu w ró¿nicy, 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. Tak¿e wtedy, gdy jest pod kontrol± ClearCase, a nie istnieje. Je¿eli num jest dodatnie, to pobiera (get) lub aktualizuje (check out) plik z danego systemu kontroli wersji (revision control system). Je¶li wynosi zero, patch ignoruje system kontroli wersji i nie pobiera pliku; je¶li num jest ujemne, to pyta u¿ytkownika czy pobraæ plik. Domy¶lna warto¶æ tej opcji okre¶lana jest warto¶ci± zmiennej ¶rodowiska PATCH_GET je¶li takowa istnieje; je¶li nie, to warto¶æ domy¶lna jest zerem, gdy patch dzia³a zgodnie z POSIX, w przeciwnym razie jest ujemna.
-i plik³aty, --input=plik³aty
Odczytuje ³atê z pliku³aty. Je¶li plikiem³aty jest -, to ze standardowego wej¶cia, domy¶lnie.
-l, --ignore-whitespace
Wykonuje swobodniejsze porównywanie wzorców, w przypadku, gdy w pliku pozamieniano tabulacje i spacje. Dowolna sekwencja bia³ych spacji (znaków tabulacji lub spacji) w linii pliku ³aty bêdzie odpowiadaæ dowolnej sekwencji bia³ych spacji oryginalnego pliku. Ci±gi bia³ych spacji wystêpuj±ce na koñcach linii s± ignorowane. Normalne znaki musz± wci±¿ dok³adnie pasowaæ. Ka¿da linia kontekstu nadal musi pasowaæ do linii oryginalnego pliku.
-n, --normal
Powoduje, ¿e plik z ³at± jest interpretowany jak ró¿nica typu `normal'.
-N, --forward
powoduje ignorowanie ³at, które wydaj± siê byæ odwrócone lub ju¿ zaaplikowane. Zobacz te¿ -R.
-o plik-wyj, --output=plik-wyj
Zamiast ³atania bezpo¶rednio oryginalnych plików, wynik jest kierowany do plik-wyj.
-pnum, --strip=num
Z ka¿dej nazwy pliku znalezionej w pliku ³aty ujmuje najmniejszy przedrostek zawieraj±cy num pocz±tkowych uko¶ników. Ci±g kilku s±siaduj±cych uko¶ników liczy siê za jeden uko¶nik. Opcjê przewidziano na wypadek gdyby¶ przechowywa³ pliki w innym katalogu ni¿ osoba, która przes³a³a ³atê. Na przyk³ad, za³ó¿my, ¿e nazwa pliku w ³acie mia³a warto¶æ

       /u/howard/src/blurfl/blurfl.c

ustawienie -p lub -p0 nie zmienia jej, -p1 daje

       u/howard/src/blurfl/blurfl.c

bez pocz±tkowego uko¶nika, a -p4 daje

       blurfl/blurfl.c

natomiast niepodanie -p w ogóle, daje po prostu blurfl.c. Wynik tej operacji jest poszukiwany albo w katalogu bie¿±cym, albo w katalogu podanym przez opcjê -d.

--posix
Postêpuje bardziej zgodnie ze standardem POSIX:
*
Dociekaj±c nazw plików z nag³ówków ró¿nic z listy (stary, nowy, indeks) bierze pierwszy istniej±cy plik.
*
Nie usuwa plików, które po za³ataniu staj± siê puste.
*
Nie pyta o pobieranie plików z RCS, ClearCase czy SCCS.
*
Wymaga, by w wierszu poleceñ wszystkie opcje wystêpowa³y przed nazwami plików.
*
Nie tworzy kopii zapasowych przy wyst±pieniu niezgodno¶ci.
--quoting-style=wyraz
U¿ywa stylu wyraz do cytowania nazw wyj¶ciowych. Wyraz powinien byæ jednym z poni¿szych:
literal
Wypisuje nazwy bez zmian.
shell
Cytuje nazwy dla pow³oki je¶li zawieraj± metaznaki pow³oki lub spowodowa³yby dwuznaczno¶æ wyniku.
shell-always
Cytuje nazwy dla pow³oki, nawet wtedy, gdy normalnie nie wymaga³yby cytowania.
c
Cytuje nazwy jak dla ³añcuchów w jêzyku C.
escape
Cytuje jak z c, z wyj±tkiem tego, i¿ pomija otaczaj±ce znaki cudzys³owu.

Warto¶æ domy¶ln± opcji --quoting-style mo¿na okre¶liæ za pomoc± zmiennej ¶rodowiska QUOTING_STYLE. Je¶li nie jest ona ustawiona, to warto¶ci± domy¶ln± jest shell.

-r plik-odrz, --reject-file=plik-odrz
Odrzucone poprawki s± umieszczane w zadanym pliku-odrz, a nie w domy¶lnym pliku odrzuceñ .rej.
-R, --reverse
Mówi, ¿e ³ata ta zosta³a utworzona przy zamienionych miejscami starych i nowych plikach [t³um. zamiast `diff -c stary nowy' u¿yto pomy³kowo `diff -c nowy stary']. (Tak, obawiam siê ¿e czasem siê to zdarza, natura ludzka jest jaka jest.) Patch Spróbuje zamieniæ ka¿dy fragment przed jego zaaplikowaniem. Odrzucenia wyjd± w formacie zamienionym (swapped). Opcja -R nie dzia³a ze skryptami ró¿nicowymi eda gdy¿ jest tam zbyt ma³o danych do zrekonstruowania operacji odwrotnej.

Je¶li pierwszy fragment ³aty zawiedzie, patch odwraca ten fragment, sprawdzaj±c czy nie mo¿e byæ tak zaaplikowany. Je¶li mo¿e, zostaniesz zapytany czy chcesz ustawiæ opcjê -R. Je¶li nie, ³ata bêdzie aplikowana dalej w sposób tradycyjny. (Uwaga: metoda ta nie mo¿e wykryæ ³aty odwróconej je¶li jest to ró¿nica typu normal i je¶li pierwsz± komend± jest doklejanie (append) (tj. powinno to byæ kasowanie -- delete). Jest tak dlatego, ¿e doklejanie zawsze dzia³a, gdy¿ pusty kontekst pasuje wszêdzie. Szczê¶liwym trafem, wiele ³at raczej dodaje lub zmienia linie ni¿ je kasuje, wiêc wiêkszo¶æ odwróconych ró¿nic typu normal zaczyna siê od kasowania, co zawiedzie i wywo³a heurystykê.)

-s, --silent, --quiet
Powoduje, ¿e patch dzia³a cicho, chyba ¿e pojawi siê b³±d.
-t, --batch
Podobne do -f, gdy¿ eliminuje pytania, lecz dzia³a wed³ug innych za³o¿eñ: pomija ³aty, których nag³ówki nie zawieraj± nazw plików (tak samo jak -f), pomija ³aty dla plików ze z³ymi wersjami Prereq: i przyjmuje, ¿e ³aty s± odwrócone, je¶li na takie wygl±daj±.
-T, --set-time
Ustawia czasy modyfikacji i ostatniego dostêpu za³atanych plików wed³ug znaczników czasu podanych w nag³ówkach ró¿nic typu context, zak³adaj±c, ¿e nag³ówki te stosuj± czas lokalny. Opcja ta jest niezalecana, gdy¿ u¿ycie ³at korzystaj±cych z czasu lokalnego przez osoby z innych stref czasowych nie jest ³atwe. Ponadto znaczniki czasu lokalnego nie s± jednoznaczne w przypadku, gdy zegar lokalny jest cofany w zwi±zku z dostosowywaniem do czasu letniego. Zamiast tej opcji, powinno siê tworzyæ ³aty z czasem uniwersalnym (UTC) i stosowaæ opcjê -Z lub --set-utc.
-u, --unified
Wymusza interpretacjê ³aty jako ró¿nicy typu unified context (zunifikowana ró¿nica kontekstowa).
-V metoda, --version-control=metoda
-V metoda, --version--control=metoda Powoduje, ¿e metoda staje siê metod± tworzenia nazw plików zapasowych. Rodzaje robionych kopii zapasowych mo¿na równie¿ podaæ w zmiennej ¶rodowiskowej PATCH_VERSION_CONTROL (lub, je¶li nie jest ustawiona, zmienn± VERSION_CONTROL), która jest przes³aniana przez tê opcjê. Wybrana metoda nie ma wp³ywu na to, czy kopie zapasowe bêd± wykonywane, i w jakich przypadkach. Okre¶la tylko sposób tworzenia nazw plików zapasowych. Warto¶æ metody jest podobna jak zmiennej `version-control' GNU Emacsa. Patch rozpoznaje te¿ ich bardziej opisowe synonimy. Poprawne warto¶ci to (przyjmowane s± rozró¿nialne skróty):
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 plików, które ju¿ je maj±, a zwyk³e kopie dla pozosta³ych. Tak jest domy¶lnie.
`never' lub `simple'
Zawsze robi zwyk³e kopie zapasowe. Opcje -B lub --prefix, -Y lub --basename-prefix i -z lub --suffix okre¶laj± nazwê pliku zwyk³ej kopii zapasowej. Je¿eli nie podano ¿adnej z nich, to stosowany jest przyrostek zwyk³ej kopii zapasowej. Jest to warto¶æ zmiennej ¶rodowiska SIMPLE_BACKUP_SUFFIX, je¶li jest ona ustawiona, lub .orig w przeciwnym razie.

Przy kopiach numerowanych lub zwyk³ych, je¶li nazwa pliku kopii zapasowej jest zbyt d³uga, to zamiast niej u¿ywa siê przyrostka kopii ~. Je¿eli nawet dodanie ~ spowodowa³oby, ¿e nazwa bêdzie za d³uga, to ~ zastêpuje ostatni znak nazwy pliku.

--verbose
Wypisuje dodatkowe informacje o wykonywanej pracy.
-x num, --debug=num
ustawia wewnêtrzne flagi debuggowe. Ma to znaczenie tylko dla ³ataczy programu patch.
-Y pref, --basename-prefix=pref
Przy tworzeniu nazwy zwyk³ej kopii poprzedza przedrostkiem pref podstawow± czê¶æ nazwy pliku. Na przyk³ad, przy -Y .del/ nazw± pliku zwyk³ej 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 zwyk³ych kopii zapasowych. Na przyk³ad, przy -z - nazw± pliku zwyk³ej kopii kopii dla src/patch/util.c jest src/patch/util.c-. Przyrostek kopii mo¿na te¿ okre¶liæ za pomoc± zmiennej ¶rodowiska SIMPLE_BACKUP_SUFFIX, która jest przes³aniana przez tê opcjê.
-Z, --set-utc
Ustawia czasy modyfikacji i ostatniego dostêpu za³atanych plików wed³ug znaczników czasu podanych w nag³ówkach ró¿nic typu context, zak³adaj±c, ¿e nag³ówki 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 je¶li jego oryginalny czas nie pasuje do czasu podanego w nag³ówku ³aty lub jej zawarto¶æ nie pasuje dok³adnie do ³aty. Jednak, je¶li podano opcjê -f lub --force, to czas pliku jest ustawiany bez wzglêdu na niezgodno¶ci.

Z powodu ograniczeñ formatu wyj¶ciowego stosowanego przez diff, opcje te nie potrafi± aktualizowaæ czasów plików, których zawarto¶æ siê nie zmieni³a. Wykorzystuj±c te opcje powinno siê pamiêtaæ o usuniêciu (np. za pomoc± make clean) wszystkich plików, które zale¿± od za³atanych, by pó¼niejsze wywo³ania make nie zosta³y zmylone czasem za³atanych plików.

--help
Wypisuje listê opcji i koñczy dzia³anie.
-v, --version
Wypisuje wersjê programu i koñczy dzia³anie.

¦RODOWISKO

PATCH_GET
Okre¶la, czy patch powinien domy¶lnie pobieraæ brakuj±ce lub przeznaczone tylko do odczytu pliki z RCS, ClearCase lub SCCS. Zobacz opis opcji -g lub --get.
POSIXLY_CORRECT
Je¶li jest ustawiona, patch ¶ci¶lej stosuje siê do standardu POSIX w zachowaniu domy¶lnym. Zobacz opis opcji --posix.
QUOTING_STYLE
Domy¶lna warto¶æ opcji --quoting-style.
SIMPLE_BACKUP_SUFFIX
Przyrostek stosowany do tworzenia nazw plików zwyk³ych kopii zapasowych .orig.
TMPDIR, TMP, TEMP
Katalog do przechowywania plików tymczasowych. patch wykorzystuje pierwsz± zmienn± ¶rodowiska z tej listy, jaka jest ustawiona. Je¶li ¿adna nie jest, warto¶æ domy¶lna zale¿y 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 steruj±cy; u¿ywany do uzyskania odpowiedzi na pytania zadawane u¿ytkownikowi.

ZOBACZ TAK¯E

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£AJ¡CYCH £ATY

Istnieje kilka rzeczy, o których nale¿y pamiêtaæ przy wysy³aniu ³at.

Twórz ³atê wed³ug 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 uko¶ników. Nag³ówki z poleceñ diff powinny zawieraæ daty i czasy czasu uniwersalnego (UTC) z zastosowaniem tradycyjnego formatu uniksowego, by odbiorcy ³aty mogli skorzystaæ z opcji -Z lub --set-utc. Oto przyk³adowe polecenie, z u¿yciem sk³adni pow³oki Bourne'a:

     LC_ALL=C TZ=UTC0 diff -Naur gcc-2.7 gcc-2.8

Powiadom odbiorców, jak zaaplikowaæ ³atê, wskazuj±c, do którego katalogu przej¶æ cd i jakich opcji patch u¿yæ. Zalecany jest ³añcuch opcji -Np1. Wypróbuj procedurê stawiaj±c siê na miejscu odbiorcy i stosuj±c ³atê na kopiê oryginalnych plików.

Mo¿esz oszczêdziæ ludziom wielu problemów, zachowuj±c plik patchlevel.h Jest on ³atany aby zwiêkszyæ poziom ³aty (patch level). Umie¶æ go jako pierwsz± ró¿nicê w pliku z ³at±, który wysy³asz. Je¶li do ³aty wstawisz liniê Prereq:, to nie pozwoli ona na stosowanie ³at poza kolejno¶ci± bez ostrze¿enia.

Mo¿esz utworzyæ plik u odbiorcy wysy³aj±c mu ró¿nicê z porównania /dev/null lub pusty plik o dacie równej Epoce (1970-01-01 00:00:00 UTC) z plikiem, który chcesz stworzyæ. Zadzia³a to tylko je¶li plik taki jeszcze nie istnieje w katalogu docelowym. I odwrotnie, mo¿esz usun±æ plik wysy³aj±c ró¿nicê kontekstow± porównuj±c± plik do usuniêcia z pustym plikiem datowanym na Epokê. Plik nie zostanie usuniêty je¶li patch dzia³a zgodnie z POSIX a nie podano opcji -E lub --remove-empty-files. Prost± metod± generowania ³at, które tworz± i usuwaj± pliki jest u¿ycie opcji -N lub --new-file programu GNU diff. Je¶li spodziewasz siê, ¿e odbiorca u¿yje opcji -pN, nie wysy³aj wyj¶cia wygl±daj±cego 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 plików maj± ró¿n± liczbê uko¶ników, a rozmaite wersje patch ró¿nie interpretuj± nazwy plików. Unikniesz mylnej interpretacji, wysy³aj±c zamiast tego takie wyj¶cie:

   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 wysy³ania ³at porównuj±cych pliki o takich nazwach, jakie maj± kopie zapasowe, jak np. README.orig, gdy¿ mo¿e to zmyliæ patch, tak ¿e bêdzie nak³ada³ ³atê na plik kopii zamiast na rzeczywisty plik. Zamiast tego powiniene¶ wysy³aæ ³aty porównuj±ce pliki o takich samych nazwach podstawowych, po³o¿one w ró¿nych katalogach, np. old/README i new/README.

Uwa¿aj by nie wysy³aæ ³at odwrotnych, gdy¿ powoduje to, ¿e ludzie zastanawiaj± siê czy ju¿ za³±czyli ³atê.

Nie próbuj budowaæ ³at, które zmienia³y by pliki pochodne (np. plik configure, w którym jest linia configure: configure.in w swoim makefile), poniewa¿ odbiorca i tak powinien byæ w stanie je odtworzyæ. Je¶li musisz wys³aæ ró¿nice plików pochodnych, utwórz je u¿ywaj±c czasu uniwersalnego UTC; odbiorcy powinni zaaplikowaæ ³±tê stosuj±c opcjê -Z lub --set-utc, a nastêpnie usun±æ wszystkie nie³atane pliki, które zale¿± od w³a¶nie za³atanych (np. za pomoc± make clean).

Mimo i¿ mo¿na umie¶ciæ 582 listingów ró¿nic w jednym pliku, to lepiej wstawiæ grupy powi±zanych ³at do osobnych plików.

Poza tym, upewnij siê, ¿e poda³e¶ poprawnie nazwy plików, zarówno w nag³ówku ró¿nicy kontekstowej, jak i w linii Index:. Je¶li ³atasz co¶ w podkatalogu, upewnij siê, ¿e powiadomi³e¶ u¿ytkownika, by poda³ opcjê -p.

DIAGNOSTYKA

Zbyt wiele by tu wymieniaæ, lecz ogólnie wskazuj±, ¿e patch nie móg³ przetworzyæ pliku z ³at±.

Je¶li podano opcjê --verbose, komunikat Hmm... wskazuje, ¿e w pliku z ³at± jest nieprzetworzony tekst i ¿e patch próbuje domy¶liæ siê, czy znajduje siê w nim ³ata, a je¶li tak, to jakiego jest rodzaju.

Patch koñczy pracê z kodem 0 je¶li wszystkie kawa³ki zaaplikowano poprawnie, 1 je¶li jakie¶ nie mog³y byæ zaaplikowane, a 2 w przypadku powa¿niejszych k³opotów. Podczas aplikowania zbioru ³at w pêtli, umo¿liwia ci sprawdzenie tego kodu, tak by nie do³±czaæ ju¿ reszty ³at do czê¶ciowo po³atanego pliku.

ZASTRZE¯ENIA

Ró¿nice kontekstowe nie mog± wiarygodnie odwzorowywaæ tworzenia lub usuwania pustych plików, pustych katalogów czy plików specjalnych, jak dowi±zania symboliczne. Nie potrafi± te¿ reprezentowaæ zmian w metadanych pliku, takich jak w³a¶ciciel, grupa, prawa czy to, ¿e jeden plik jest twardym dowi±zaniem do drugiego. Je¶li takie zmiany s± równie¿ wymagane, ³acie powinny towarzyszyæ osobne instrukcje (np. w postaci skryptu pow³oki).

Patch nie potrafi stwierdziæ, czy w skrypcie ed nie istniej± numery linii, a w normalnych ró¿nicach mo¿e wykryæ niew³a¶ciwe numery tylko gdy odnajdzie zmianê lub usuniêcie. Ró¿nica kontekstowa, u¿ywaj±ca wspó³czynnika `fuzz factor' 3 mo¿e mieæ podobne problemy. Dopóki nie zostanie dodany w³a¶ciwy interaktywny interfejs u¿ytkownika, powiniene¶ raczej w tych wypadkach robiæ ró¿nice typu context. Zobaczysz czy zmiany maj± sens. Oczywi¶cie kompilowanie bez b³êdów jest ca³kiem dobrym wskazaniem, ¿e ³ata zadzia³a³a, lecz nie jest to zawsze prawda.

Patch zwykle daje prawid³owe wyniki, nawet gdy musi du¿o zgadywaæ. Jednak rezultaty maj± gwarancjê prawid³owo¶ci tylko wtedy, gdy ³aty aplikowane s± do dok³adnie tej samej wersji pliku, z której zosta³y wygenerowane.

KWESTIE ZGODNO¦CI

Standard POSIX podaje zachowanie, które ró¿ni siê od tradycyjnego zachowania siê patcha. Powiniene¶ pamiêtaæ o tych ró¿nicach je¶li musisz wspó³pracowaæ z patch w wersji 2.1 lub wcze¶niejszymi, które nie s± zgodne z POSIX.
*
W tradycyjnym patchu argument opcji -p by³ opcjonalny, a go³e -p by³o równowa¿ne -p0. Obecnie opcja -p wymaga argumentu, a -p 0 jest teraz równowa¿nikiem -p0. Dla zachowania maksymalnej zgodno¶ci, stosuj opcje typu -p0 i -p1.

Ponadto, tradycyjny patch po prostu zlicza uko¶niki przy obcinaniu przedrostków ¶cie¿kowych; patch liczy obecnie sk³adowe nazwy pliku. To znaczy, ci±g s±siaduj±cych uko¶ników liczy siê obecnie za jeden uko¶nik. Dla zachowania maksymalnej zgodno¶ci, unikaj wysy³ania ³at zawieraj±cych // w nazwach plików.

*
W tradycyjnym patchu, tworzenie kopii zapasowych by³o w³±czone domy¶lnie. Zachowanie to jest teraz w³±czane opcj± -b lub --backup.

I odwrotnie, w POSIX-owym patch, kopie nigdy nie s± tworzone, nawet je¶li wyst±pi niedopasowanie ³aty. W GNU patch, zachowanie to jest w³±czane opcj± --no-backup-if-mismatch lub przez w³±czenie zgodno¶ci z POSIX opcj± --posix albo ustawieniem zmiennej ¶rodowiska POSIXLY_CORRECT.

Opcja -b suffix tradycyjnego patch jest równowa¿na opcjom -b -z suffix dla GNU patch.

*
Tradycyjny patch stosuje skomplikowan± (i nie w pe³ni udokumentowan±) metodê domy¶lania siê z nag³ówka ³aty nazwy pliku do za³atania. Metoda ta nie jest zgodna z POSIX i ma kilka niepoprawnie zakodowanych fragmentów [gotchas]. Obecny patch korzysta z innej, równie skomplikowanej (ale lepiej udokumentowanej) metody, która jest opcjonalnie zgodna z POSIX; mamy nadziejê, ¿e ma mniej b³êdów. Obie te metody s± ze sob± zgodne je¶li nazwy plików w nag³ówku ró¿nicy kontekstowej i w linii Index: po obciêciu przedrostka s± identyczne. Normalnie ³ata jest zgodna je¶li wszystkie nazwy plików w nag³ówku zawieraj± tê samê liczbê uko¶ników.
*
Gdy tradycyjny patch zadawa³ u¿ytkownikowi pytanie, kierowa³ je na standardowe wyj¶cie b³êdów i oczekiwa³ odpowiedzi z pierwszego pliku poni¿szej listy bêd±cego terminalem: standardowe wyj¶cie b³êdów, standardowe wyj¶cie, /dev/tty, i standardowe wej¶cie. Teraz patch wysy³a pytania na standardowe wyj¶cie i pobiera odpowiedzi z /dev/tty. Zmieniono domy¶lne odpowiedzi na niektóre z pytañ. Dziêki temu patch nigdy nie wchodzi w nieskoñczon± pêtlê przy stosowaniu domy¶lnych odpowiedzi.
*
Tradycyjny patch koñczy³ dzia³anie z kodem równym liczbie b³êdnych fragmentów, albo z kodem 1 je¶li napotkano powa¿ny problem. Obecnie patch koñczy dzia³anie z kodem 1 je¶li nie uda³o siê zaaplikowaæ jakich¶ fragmentów, albo 2 je¶li napotkano powa¿ny problem.
*
Wysy³aj±c instrukcje okre¶laj±ce sposób skorzystania z ³aty przez kogo¶ pracuj±cego z GNU patch, tradycyjnym patchem, lub patch em zgodnym z POSIX ogranicz siê do podanych ni¿ej opcji. W tym zestawieniu spacje s± znacz±ce, a argumenty wymagane.

-c

-d kat

-D symb

-e

-l

-n

-N

-o plik-wyj

-pnum

-R

-r plik-odrz

B£ÊDY

Zg³oszenia b³êdów proszê wysy³aæ do <bug-gnu-utils@gnu.org>.

Móg³by byæ sprytniejszy co do czê¶ciowych trafieñ, nadmiernie odbiegaj±cych od normy offsetów i zamienionego kodu, lecz wymaga³oby to dodatkowego przebiegu.

Je¶li kod zosta³ powielony (np. #ifdef STARYKOD ... #else ... #endif), patch nie mo¿e za³ataæ obu wersji, i je¶li w ogóle zadzia³a, prawdopodobnie za³ata niew³a¶ciw± i powie, ¿e uda³o mu siê z obydwiema.

Je¶li aplikujesz ³atê, któr± ju¿ zaaplikowa³e¶, patch pomy¶li ¿e jest to odwrotna ³ata i zaoferuje zdjêcie ³aty. Mo¿na to uwa¿aæ 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 napisa³ pierwotn± wersjê patcha. Paul Eggert usun±³ istniej±ce w programie arbitralne ograniczenia. Doda³ obs³ugê plików binarnych, ustawianie czasów pliku i usuwanie plików, i uczyni³ go bardziej zgodnym z POSIX-em. Swój wk³ad wnie¶li te¿ Wayne Davison, który doda³ obs³ugê formatu unidiff, i David MacKenzie, który do³o¿y³ obs³ugê ustawieñ i kopii zapasowych.