Linux repositories inspector
GNU
21 Mart 1998

manpages-tr

Turkish version of the manual pages

patch

A utility to apply patch files to original sources

ÝSÝM

patch - bir yama dosyasýný orjinaline uygular

KULLANIM

patch [seçenekler] [orjinal [yama]]
genellikle þöyle kullanýlýr:
patch -psayý <yama

AÇIKLAMA

patch, diff(1) ile üretilmiþ bir fark listesi içeren bir yama dosyasý alýr ve bu yama dosyasýndaki farklarý bir veya daha fazla orjinal dosyaya uygulayarak orjinallerin yamalý sürümlerini üretir. Normalde yamalý sürümler orjinal dosyalara yazýlarak oluþturulur. Yedekler oluþturulabilir; -b ve --backup seçeneklerine bakýnýz. Yamanacak dosyalarýn isimleri normalde yama dosyasýndan alýnýr, ancak eðer sadece bir yamanacak dosya varsa ismi komut satýrýnda orjinal olarak belirtilebilir.
patch çalýþtýrýldýðýnda fark listesinin türü -c (--context), -e (--ed), -n (--normal) veya -u (--unified) seçenekleri ile belirtilmemiþse önce fark listesinin türünü saptamaya çalýþýr. ed fark dosyalarý bir boruhattý ile ed(1) metin düzenleyicisi üzerinden uygulanýrken, baðlamsal fark dosyalarý (eski, yeni ve birleþik) ve normal fark dosyalarý doðrudan patch tarafýndan uygulanýr.
patch yama dosyasýndaki olasý bozuk alanlarý atlayarak yamayý uygulamaya çalýþýr. Bu özelliðinden yararlanarak yama dosyasý içine bir açýklama yerleþtirebilirsiniz ve buna raðmen yama uygulanýr. Eðer diff dosyasýnýn içeriði sürekli ayný biçimde girintilenmiþse veya bir baðlamsal fark dpsyasýnda satýrlar CRLF ile bitiyorsa ya da Internet RFC 934\N’39’de "-" için belirtildiði gibi "-" ile baþlayan satýrlar varsa bunlar hesaba katýlýr.
Baðlamsal fark dosyalarý ile ve bir daha az geniþletme yapan normal fark dosyalarý ile patch, yama içindeki satýr numaralarý yanlýþ olduðunda bunu saptayabilir ve yama listesinin her elemanýnýn uygulanacaðý doðru yeri bulmaya çalýþýr. Önce listedeki her eleman ile ilgili satýr numaralarýný alýr ve yamanýn uygulanmasýnda kullanýlan artý ve eksi ile belirlenmiþ satýrlara bakar. Eðer satýr numaralarý doðru yeri belirtmiyorsa, eksi ile belirtilmiþ satýrlarý bulmak üzere metni ileri ve geri her iki yönde tarar. patch ilk taramada deðiþtirilecek satýrlarýn tamamý için bir eþleþme arar. Böyle bir eþleþme bulamazsa, yama dosyasý bir baðlamsal yama dosyasý ise ve belirsizlik faktörü de 1 ise deðiþtirilecek satýrlarýn ilkini ve sonuncusunu yok sayarak bir arama daha yapar. Bulamazsa ve belirsizlik faktörü 2 veya 2 den büyükse bu kez ilk ve son iki satýrý yok sayarak bir arama daha yapar. (Öntanýmlý belirsizlik faktörü 2\N’39’dir.) patch yamanýn uygulanacaðý yeri bulamazsa, uygulayamadýðý bölümü bir red dosyasýna yazar. Bu dosyanýn ismi normalde yama dosyasýnýn ismine .rej eklenerek elde edilir. Eðer .rej eki çok uzun bir dosya ismi oluþturacaksa dosya isminin sonuna # eklenir, bu karakter de fazla geliyorsa dosya isminin son karakteri # ile deðiþtirilir. (Rededdilen kýsým yamanýn biçiminden baðýmsýz olarak sýradan baðlamsal fark biçiminde çýktýlanýr. Eðer girdi bir normal fark dosyasý ise baðlamýn çoðu basitçe boþ olur.) Red dosyasýndaki reddedilen kýsýmlarla ilgili satýr numaralarý yama dosyasýndaki satýr numaralarýndan farklý olabilir: yeni satýr numaralarý yamanýn eski dosyada deðil de yeni (yamanmýþ) dosyada bulunabileceði yaklaþýk yeri belirtecek þekilde oluþturulur.
Her yama parçasý tamamlandýðýnda, eðer parçanýn uygulanmasý baþarýsýz olmuþsa (yeni dosyadaki) hangi satýrdan itibaren devam edeceðini size bildirilir. Eðer yama parçasý fark dosyasýnda belirtilen satýrdan farklý numaralý bir satýra uygulanmýþsa size yeni konumu bildirir. Yeni konumun çok farklý olmasý parçanýn yanlýþ yeri yamamakta kullanýldýðýný belirtebilir. Bir eþleþme bulunurken belirsizlik faktörü kullanmak gerekmiþse, biraz kuþku duyasýnýz diye bu da ayrýca bildirilir. --verbose seçeneðini belirtmiþseniz baþarýyla uygulanan yama parçalarý hakkýnda da bilgi verilir.
Komut satýrýnda orjinal dosya belirtilmemiþse patch, yama dosyasýndaki yama olarak uygulanabilecek alanlarýn dýþýndaki alanlarý deðerlendirerek aþaðýdaki kurallara baðlý olarak yamanýn uygulanacaðý dosyanýn ismini tespit etmeye çalýþýr.
Önce, aday dosya isimlerinin listesini elde etmeye çalýþýr. Bunu þöyle yapar:
· Baþlýk bir baðlamsal fark dosyasý baþlýðý ise, patch eski ve yeni dosya isimlerini baþlýktan alýr. Eðer isimdeki bölü çizgilerinin sayýsý -psayý veya --strip=sayý seçenekleri ile belirtilen kadar deðilse bu isim yoksayýlýr. /dev/null ismi de ayrýca yoksayýlýr.
· Yama olarak uygulanacak alanlarýn dýþýnda Index: ile baþlayan satýrlar varsa ve hem yeni hem de eski dosya isimleri belirtilmemiþse veya patch POSIX uyumlu ise, patch dosya isimlerini Index: ile baþlayan satýrlardan alýr.
· Bundan sonraki kurallara uygun olmak üzere, aday dosya isimlerinin, baþlýkta göründükleri sýraya bakýlmaksýzýn, (eski, yeni, Index) düzeninde olacaklarý varsayýlýr.
patch bir dosya ismini aday dosya listesinden þu kurallara göre seçer:
· Bazý isimli dosyalar mevcutsa, patch POSIX uyumluysa ilk dosya ismi deðilse eniyi isim seçilir.
· Eðer patch RCS, ClearCase ve SCCS\N’39’yi yoksaymýyorsa (-g sayý veya --get=sayý seçeneklerine bakýnýz) ve isimli bir dosya mevcut deðilse ama bir RCS, ClearCase veya SCCS ana dosyasý varsa patch ilk isimli dosyayý RCS, ClearCase veya SCCS ana dosyasý ile seçer.
· Ýsimli dosya mevcut deðilse, bir RCS, ClearCase veya SCCS ana dosyasý da yoksa ama bazý dosya isimleri verilmiþse, patch POSIX uyumlu deðilse ve yamanýn bir dosya oluþturmasý gerekiyorsa, patch en az dizin oluþturulacak þekilde en iyi dosya ismini seçer.
· Þimdiye dek bahsedilen kurallarla hal bir dosya ismi seçilememiþse, yamanacak dosyanýn ismi size sorulur ve patch dosya ismini buna göre seçer.
Ýsimli dosyalar listesinden "eniyi" dosya ismi þöyle seçilir: önce en az sayýda dizini dosya yolu olarak alýr, bundan sonra, uzantýsýz en kýsa dosya isimleri, bundlardan sonra en kýsa isimlerin tümü ve son olarak da kalan ilk isim alýnýr.
Ek olarak, Yama olarak uygulanacak alanlarýn dýþýnda Prereq: ile baþlayan bir satýr varsa, patch bu öngereklilikler satýrýndaki ilk sözcüðü (normalde bir sürüm numaraasýdýr) alýr ve orjinal dosyaya bu sözcük var mý diye bakar. Yoksa patch iþine devam etmeden önce bir doðrulama isteði yapar.
Tüm bunlarýn nihayetinde, þöyle bir bildirim de yapabilirsiniz:
| patch -d /usr/src/local/blurfl
ve, blurfl dizinindeki bir dosya yama dosyasýyla yamanýr.
Eðer yama dosyasý bir yamadan fazlasýný içeriyorsa patch onlarýn herbirini farklý birer yama dosyasýndan geliyormuþçasýna uygular. Yama olarak uygulanabilecek her satýr grubundan önce gelen satýrlarda bulunan dosya isimleri ve sürüm numaralarýndan yukarýda bahsedildiði gibi yamanacak dosyanýn ismi saptanarak bu iþlem gerçekleþtirilir.

SEÇENEKLER

-b, --backup
Dosyalarýn yedeðini oluþturur. Bir dosya yamanýrken orjinal dosya silinmez, ya baþka bir yere kopyalanýr ya da ismi deðiþtirilir. Mevcut olmayan bir dosyanýn yedeði yapýlýrken, olmayan dosyayý belirtmek için sadece ismi olan cismi olmayan (boþ) bir dosya oluþturulur. Yedek dosya isimlerinin nasýl oluþturulduðu -V veya --version-control seçeneklerinin açýklamalarýnda bulunabilir.
--backup-if-mismatch
Yama bir dosya ile tam uyuþmazsa ve yedekleme istenmese de dosya yedeklenir. patch POSIX uyumlu deðilse bu seçenek öntanýmlý olarak uygulanýr.
--no-backup-if-mismatch
Yama bir dosya ile tam uyuþmazsa ve yedekleme istense de dosya yedeklenmez. patch POSIX uyumlu deðilse bu seçenek öntanýmlý olarak uygulanýr.
-B önek, --prefix=önek
Basit yedek dosya ismi oluþturulurken dosya isminin önüne önek getirilir. Örneðin, -B /junk/ ile dosya ismi src/patch/util.c olan bir dosyanýn basit yedeði yapýlýrken dosya ismi /junk/src/patch/util.c yapýlýr.
--binary
Standart çýktý veya /dev/tty dýþýnda tüm dosyalar için okuma ve yazma iþlemleri iklik kipte yapýlýr. Bu seçenek POSIX uyumlu sistemlerde etkisizdir. DOS benzeri sistemlerde ise bu seçeneðin bir fark oluþturmasý için yama diff -a --binary ile üretilmiþ olmalýdýr.
-c, --context
Yama dosyasý sýradan bir baðlamsal fark dosyasý olarak yorumlanýr.
-d dizin, --directory=dizin
Hiçbir þey yapmadan, hemen dizin dizinine geçilir.
-D taným, --ifdef=taným
Deðiþiklikleri iþaretlemede #ifdef ... #endif yapýsý taným farklýlaþtýrma sembolü ile kullanýlýr.
--dry-run
Hiçbir dosyada deðiþiklik yapmaksýzýn uygulanan yamalarýn sonuçlarý basýlýr.
-e, --ed
Yama dosyasý bir ed betiði olarak yorumlanýr.
-E, --remove-empty-files
Yama uygulandýktan sonra boþalan dosyalar silinir. Aslýnda, bu seçenek gereksizdir, çünkü patch yamadýktan sonra dosyanýn varolup olmayacaðýný saptamak için baþlýktaki tarih damgasýný inceler. Buna raðmen, girdi bir baðlamsal fark dosyasý deðilse ya da patch POSIX uyumlu ise, patch bu seçenek verilmedikçe yamandýktan sonra boþalan dosyalarý silmez. patch böyle bir dosyayý sildikten sonra boþalmýþsa dosyanýn bulunduðu dizini de silmeye çalýþýr.
-f, --force
Kullanýcýnýn ne yaptýðýný tam olarak bildiði varsayýlýr ve kullanýcýya herhangi bir soru yöneltilmez. Hangi dosyalarýn yamanacaðýný belirtmeyen baþlýklar içeren yamalar atlanýr; Prereq: ile baþlayan satýrlarda yanlýþ sürüm bilgisi olsa bile dosya yamanýr; eski ve yeni dosyalarýn yer deðiþtirilmesi gerekse bile yamalarýn bu iþlem yapýlmadan uygulanacaðý varsayýlýr. Bu seçenek açýklamalarý engellemez, bunun için -s seçeneðine bakýnýz.
-F sayý, --fuzz=sayý
En büyük belirsizlik faktörünü belirtmekte kullanýlýr. Bu seçenek sadece baðlamsal fark dosyalarýna uygulanýr ve patch yamanacak yeri bulurken yama olarak kullanýlacak satýrlarýn baþtan ve sondan bu kadarýný yoksayar. Çok büyük belirsizlik faktörlerinin yamanýn baþarýsýzlýðýný arttýracaðýný unutmayýn. Öntanýmlý belirsizlik faktörü 2\N’39’dir ve baðlamsal fark dosyalarýnda baðlamsal satýr sayýsýndan daha yüksek bir deðer (genelde 3\N’39’tür) atanmamalýdýr.
-g sayý, --get=sayý
Bir dosya RCS veya SCCS denetimindeyken, böyle bir dosya yoksa veya salt-okunursa ya da öntanýmlý sürümüyle eþleþiyorsa; veya ClearCase denetimindeyken, böyle bir dosya yoksa, bu seçenek, patch\N’39’in eylemlerini denetlemekte kullanýlýr. sayý pozitifse, patch dosyayý sürüm denetim sisteminden alýr; sýfýrsa, RCS, SCCS veya ClearCase yoksayýlýr ve dosya alýnmaz; negatifse dosyanýn alýnýp alýnmayacaðý kullanýcýya sorulur. Bu seçeneðin öntanýmlý deðeri eðer atanmýþsa, PATCH_GET ortam deðiþkeninden alýnýr; atanmamýþsa ve patch POSIX uyumluysa öntanýmlý deðer sýfýr, aksi takdirde negatiftir.
--help
Seçeneklerin bir özetini basar ve çýkar.
-i yamadosyasý, --input=yamadosyasý
Yama yamadosyasý dosyasýndan okunur. yamadosyasý olarak - verilmiþse öntanýmlý olarak standart girdi okunur.
-l, --ignore-whitespace
Yamanacak dosyalarýn içindeki sekmeler ve boþluklar için yama içindeki boþluklarla birebir eþleþme aranmaz, ancak herhangi bir uzunlukta boþluðun her iki dosyada da karþýlýklý varlýðý þarttýr, satýr sonlarýndaki boþluklar eþleþme açýsýndan yoksayýlýr. Normal karakterler tam olarak eþleþtirilir. Baðlamsal her satýr yamanacak dosyadaki satýrlarla daima eþleþtirilir.
-n, --normal
Yama dosyasý normal bir yama dosyasý olarak yorumlanýr.
-N, --forward
Eski ve yeni dosyalarýn yer deðiþtirileceði görünen veya zaten uygulanmýþ yamalar yoksayýlýr. -R seçeneðine de bakýnýz.
-o çýktýdosyasý, --output=çýktýdosyasý
Dosyalarýn yerinde yamanmasý yerine çýktý, çýktýdosyasý dosyasýna gönderilir.
-p sayý, --strip=sayý
Yama dosyasýnda bulunan her dosya isminin baþýndan sayý ile belirtilen sayýda bölü çizgisi içeren dizge yoksayýlýr. Birden fazla yanyana bölü çizgisi varsa bunlar tek bir bölü çizgisi sayýlýr. Yama dosyasýnýn yamanacak dosyalardan farklý bir dizinde tutulmasý durumunda yamanacak dosyalarýn nasýl bulunacaðýný belirtmek amacýyla kullanýlýr. Örneðin, yama dosyasýnda yamanacak dosya isminin þöyle verildiðini varsayalým:
/u/howard/src/blurfl/blurfl.c
Seçenek -p0 olarak verilirse bu dizge olduðu gibi ele alýnýr, -p1 verilirse,
u/howard/src/blurfl/blurfl.c
baþtaki bölü çizgisi atýlýr, -p4 verilirse,
blurfl/blurfl.c
olur. -p hiç belirtilmezse sonuç blurfl.c olacaktýr. Bu durumda dosya yamanýn bulunduðu dizinde aranacaðýndan dosya daha farklý bir yerdeyse bu da -d seçeneði ile belirtilebilir.
--posix
POSIX standardýna kesinlikle uyulur:
· Fark dosyasý baþlýklarýndan dosya isimleri öðrenilirken, listedeki (eski, yeni, birleþik) ilk mevcut dosya alýnýr.
· Yamandýktan sonra boþalan dosyalar silinmez.
· RCS, ClearCase veya SCCS\N’39’deki dosyalar için alýnacak mý diye sormaz.
· Komut satýrýnda seçeneklerin dosyalardan önce verilmesi gerekir.
· Eþleþmeyen dosyalarýn yedeklemesi yapýlmaz.
--quoting-style=sözcük
Çýktýlanan isimler sarmalanýrken sözcük ile belirtilen tarz kullanýlýr. sözcük þunlardan biri olabilir:
literal
Ýsimler olduðu gibi çýktýlanýr.
shell Ýsimler kabuk metakarakterleri içeriyorsa kabuk için sarmalanýr yoksa anlamý belirsiz çýktýlama yapýlýr.
shell-always
Normalde sarmalanmalarý gerekmese bile isimler daima kabuk için sarmalanýr.
c Ýsimler C dilinde dizgelere uygulandýðý gibi sarmalanýr.
escape Ýsimler çevreleyen çifttýrnaklarýn ihmal edilmesi dýþýnda c tarzýndaki gibi sarmalanýr.
--quoting-style seçeneði için öntanýmlý deðeri QUOTING_STYLE ortam deðiþkeninde belirtebilirsiniz. Bu ortam deðikeni atanmamýþsa öntanýmlý deðer shell\N’39’dir.
-r reddosyasý, --reject-file=reddosyasý
Bu yamanýn eski ve yeni dosyalar yer deðiþtirilerek uygulanacaðý varsayýlýr. Yama olarak kullanýlacak her bölümdeki eski ve yeni satýrlar yer deðiþtirilerek uygulanmaya çalýþýlýr. Yer deðiþtirildiðinde anlamsýz olan kýsýmlar reddedilir. -R seçeneði ed fark betikleri ile çalýþmaz, çünkü yer deðiþtirme iþlemini gerçekleþtirmek için çok az bilgi içerirler.
Yama içindeki kýsýmlardan ilkinin uygulanmasý baþarýsýz olursa, patch bu kýsmýn eski ve yeni satýrlarýný yer deðiþtirerek böyle uygulanabiliyor mu diye bakar. Böyle uygulanabiliyorsa kullanýcýya -R seçeneðinin uygulanmasýný isteyip istemediðini sorar. Uygulanamýyorsa, patch normal olarak uygulamaya devam eder. (Bilgi: Eðer yama bir normal yama ise ve boþ bir içerik bile daima eþleþeceðinden ilk komut yamanýn bir ek uygulanacaðýný belirtiyorsa bu yöntem yer deðiþtirmeli yamayý saptayamaz. Tesadüfen, çoðu yama bir satýrýn tamamen silinmesini deðil ya bir ek ya da bir deðiþiklik yapýlmasýný gerektirir, bu durumda yer deðiþtirmeli normal fark dosyalarýndan silme iþlemi ile baþlayanlar baþarýyý arttýran kurallarýn uygulanmasýna baðlý olarak baþarýsýz olur.)
-s, --silent, --quiet
Bir hata oluþmadýkça bilgilendirici hiçbir þey çýktýlanmaz.
-t, --batch
-f seçeneðinde olduðu gibi sorular engellenir ama bu biraz farklý kabulllerle yapýlýr: baþlýklarýnda dosya isimlerini içermeyen yamalar atlanýr (-f ile ayný); yamanýn Prereq: satýrýnda yanlýþ sürüm belirtilen dosyalar için yamalar atlanýr; ve yer deðiþtirme uygulanmasý gerekliliði saptanan yamalarýn yer deðiþtirme ile uygulanacaðý varsayýlýr.
-T, --set-time
Yamanmýþ dosyalarýn eriþim ve deðiþtirme zamanlarý, baðlamsal fark dosyalarýnýn baþlýklarýndaki zaman bilgisinin yerel zamaný gösterdiði varsayýmýyla bu zamana ayarlanýr. Bu seçeneðin kullanýlmasý önerilmez, çünkü yerel zaman kullanýlarak uygulanan yamalarý diðer zaman dilimlerindeki kulanýcýlar kolayca kullanamazlar, ayrýca yaz saati uygulamasýndan dolayý yerel zaman damgalarý yamanýn geçmiþte uygulanmasý gibi tuhaflýklara sebep olabilir. Bu seçenek yerine -Z veya --set-utc seçeneklerini kullanarak zamaný UTC\N’39’ye göre belirtmeyi tercih edin.
-u, --unified
Yama dosyasý birleþik baðlamsal fark dosyasý olarak yorumlanýr.
-v, --version
patch\N’39’in sürüm baþlýðýný ve ama seviyesini basar ve çýkar.
-V yöntem, --version-control=yöntem
Yedek dosya isimleri saptanýrken yöntem kullanýlýr. Bu yöntem ayrýca bu seçenek ile gerektiðinde deðiþtirilmek üzere PATCH_VERSION_CONTROL (veya bu atanmamýþsa VERSION_CONTROL) ortam deðiþkeni ile atanabilir. Burada bir yöntemin atanmasý yedekleme yapýlacaðý anlamýna gelmez, sadece yedekleme yapýlacaksa yedek dosyalarýnýn ismi bu yöntem kullanýlarak saptanýr.
yöntem deðeri GNU Emacs\N’39’ýn \N’96’version-control\N’39’ deðiþkeni gibidir; farklý olarak patch daha açýklayýcý olan eþanlamlýlarýný da tanýr. Geçerli yöntem deðerleri þunlardýr (eþsiz kýsaltmalar da kabul edilir):
existing, nil
Zaten varolan dosyalarýn numaralý yedekleri yapýlýr, aksi takdirde basit yedekleme yapýlýr. Bu öntanýmlýdýr.
numbered, t
Numaralý yedekleme yapýlýr. F dosyasýnýn yedek dosyasý N sürüm numarasýný belirtmek üzere F.~N~ biçiminde isimlendirilir.
simple, never
Basit yedekleme yapýlýr. -B (--prefix), -Y (--basename-prefix) ve -z (--suffix) seçenekleri ile basit yedek dosyasý ismi belirtilebilir. Bu seçeneklerin hiçbiri belirtilmemiþse, basit yedekleme soneki kullanýlýr; sonek deðeri SIMPLE_BACKUP_SUFFIX ortam deðiþkeni ile belirtilmemiþse öntanýmlý olarak .orig soneki kullanýlýr.
Numaralý ve basit yedeklemede dosya ismi çok uzun olursa bunlar yerine sonek olarak ~ kullanýlýr, bu iþlem de dosya isminin çok uzun olmasýna sebep oluyorsa dosya ismindeki son karakter ~ karakteri ile deðiþtirilir.
--verbose
Yapýlan iþlem hakkýnda daha ayrýntýlý bilgi verilir.
-x sayý, --debug=sayý
Sadece patch yamacýlarýný ilgilendiren hata ayýklama seçeneklerini belirtmek için kullanýlýr.
-Y önek, --basename-prefix=önek
Basit yedek dosyasý ismi oluþturulurken dizinlerden arýndýrýlmýþ dosya isminin önüne önek getirilir. Örneðin basit yedek dosya ismi -Y .del/ ile belirtilmiþse src/patch/util.c dosyasýnýn ismi src/patch/.del/util.c yapýlýr.
-z sonek, --suffix=sonek
Basit yedek dosyasý ismi oluþturulurken dosya isminin sonuna sonek getirilir. Örneðin basit yedek dosya ismi -z - ile belirtilmiþse src/patch/util.c dosyasýnýn ismi src/patch/util.c- yapýlýr. Yedekleme soneki gerektiðinde bu seçenek ile deðiþtirilmek üzere SIMPLE_BACKUP_SUFFIX ortam deðiþkeni ile de atanabilir.
-Z, --set-utc
Yamanmýþ dosyalarýn eriþim ve deðiþtirme zamanlarý, baðlamsal fark dosyalarýnýn baþlýklarýndaki zaman bilgisinin koordinatlý evrensel zamaný (UTC; GMT olarak da bilinir) gösterdiði varsayýmýyla bu zamana ayarlanýr. Ayrýca -T veya --set-time seçeneklerinin açýklamasýna da bakýnýz.
Dosyanýn orjinal zamaný yama baþlýðýnda belirtilen zamanla eþleþmezse ya da onun içeriði yama ile tam olarak eþleþmezse, -Z (--set-utc) ve -T (--set-time) seçenekleri bir dosyanýn zamanýný ayarlamaktan kaçýnýr. Buna raðmen -f (--force) seçeneði belirtilmiþse dosyanýn zamaný ne olursa olsun ayarlanýr.
diff çýktý biçiminin sýnýrlamalarýndan dolayý, dosyalarý içeriði deðiþtirilmeyecekse, bu seçeneklerle bu dosyalarýn zamaný güncellenemez. Ayrýca, bu seçenekleri kullandýðýnýz takdirde, zamanlarý güncellenmiþ dosyalara baðýmlý dosyalarý kaldýrmalýsýnýz (make clean gibi). Böylece sonraki make çaðrýlarýnda yamanmýþ dosyalarýn zamanlarýndan dolayý hatalarla/uyarýlarla karþýlaþmazsýnýz.

ORTAM DEÐÝÞKENLERÝ

PATCH_GET
Eksik ya da salt-okunur dosyalarýn RCS, ClearCase veya SCCS\N’39’den öntanýmlý olarak alýnýp alýnmayacaðýný belirtmek için kullanýlýr. -g (--get) seçeneðinin açýklamasýna bakýnýz.
POSIXLY_CORRECT
Bu deðiþken atanmýþsa patch öntanýmlý olarak POSIX standardýna uyumlu davranýr. --posix seçeneðinin açýklamasýna bakýnýz.
QUOTING_STYLE
--quoting-style seçeneðinin öntanýmlý deðeridir.
SIMPLE_BACKUP_SUFFIX
Bu ortam deðiþkeninin deðeri basit yedekleme dosyalarýnda .orig soneki yerine kullanýlacak sonektir.
TMPDIR, TMP, TEMP
Geçici dosyalarý konulacaðý dizindir. patch bu listeden atanmýþ deðerlerden ilkinin deðeri kullanýr. Hiçbiri atanmamýþsa sisteme baðlý öntanýmlý deðer kullanýlýr. Unix makinalar için bu deðer normalde /tmp dizinidir.
VERSION_CONTROL, PATCH_VERSION_CONTROL
Sürüm denetim tarzýný belirtir. -v (--version-control) seçeneðinin açýklamasýna bakýnýz.

ÝLGÝLÝ DOSYALAR

/dev/tty
denetim uçbirimi; kullanýcýya sorulan sorularýn yanýtlarýný almak için kullanýlýr.
$TMPDIR/p*
geçici dosyalar

ÝLGÝLÝ BELGELER

diff(1), ed(1).
Marshall T. Rose ve Einar A. Stefferud, Proposed Standard for Message Encapsulation,
Internet RFC 934 <URL: ftp://ftp.isi.edu/innotes/rfc934.txt> (1985-01).

YAMA GÖNDERENLER ÝÇÝN

Yama göndermeye hazýrlanýyorsanýz, hatýrlamanýz gereken bir sürü þey olacaktýr.
Yamanýzý sistemli olarak oluþturmalýsýnýz. Ýyi bir yöntem
diff -Naur eski yeni komutunu kullanmaktýr. Burada eski ve yeni ile eski ve yeni dizin isimleri belirtilir. Bu isimler herhangi bir bölü çizgisi içermemelidir. diff komutunun baþlýklarý yama uygulayýcýlarýn yamayý -Z (--set-utc) seçeneði ile uygulayabilecekleri þekilde Evrensel Zamanda geleneksel Unix tarih ve zaman biçiminde içermelidir. Bu örnekte, komut Bourne kabuðu (bash) sözdizimiyle yazýlmýþtýr:
LC_ALL=C TZ=UTC0 diff -Naur gcc-2.7 gcc-2.8
Yamanýzý uygulayacak olanlara hangi dizine geçip hangi patch seçeneðini kullanacaðýný söyleyin. Seçenek dizgesi olarak -Np1 önerilir. Yaptýðýnýz yamayý kendinizi yamayý alacaklarýn yerine koyarak deneyin, yani orjinal dosyalarýn bir kopyasýna bu yamayý uygulayýn.
Ýlk diff\N’39’e göre yama seviyesini arttýrmak için yamanmýþ bir patchlevel.h dosyasý tutmaktan dolayý çok üzgün kiþileri gönderdiðiniz yama sayesinde kazanabilirsiniz. Yama içine bir Prereq: satýrý koyarsanýz onlarýn sýradýþý yamalarý uygularken bazý uyarýlar almamasýný saðlamýþ olursunuz.
Bir dosyanýn yama uygulanýrken oluþturulmasýný isterseniz, oluþturulacak dosyayý /dev/null ile ya da zaman damgasý Unix çað baþlangýcýna (Epoch: 1970-01-01 00:00:00 UTC) ayarlanmýþ boþ bir dosya ile karþýlaþtýrýlarak yapýlmýþ bir fark dosyasý ile bunu saðlayabilirsiniz. Bu sadece, oluþturulacak dosya hedef dizinde yoksa çalýþýr. Tersine, yama uygulanýren mevcut bir dosyanýn silinmesini isterseniz, silinecek dosyayý yine zaman damgasý Unix çað baþlangýcýna ayarlanmýþ boþ bir dosya ile karþýlaþtýrýlarak yapýlmýþ bir fark dosyasý ile bunu saðlayabilirsiniz. Silinmesini istediðiniz dosya, patch POSIX uyumlu deðilse ve -E (--remove-empty-files) seçeneði verilmiþse, silinecektir. Dosyalarý oluþturan ya da silen yamalar üretmenin kolay bir yolu GNU diff\N’39’in -N (--new-file) seçeneðini kullanmaktýr.
Alýcýlarýn -pN seçeneðini kullanacaðýný varsayýyorsanýz, bunun gibi bir çýktýya sahip yama göndermeyin:
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
Çünkü burada eski ve yeni dosya isimleri farklý sayýda bölü çizgisi içermektedir ve patch\N’39’in farklý sürümleri dosya isimlerini farklý yorumlarlar. Karýþýklýðý önlemek için böyle bir çýktý üreten yamalar gönderin:
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
README.orig gibi yedek dosya ismi olarak kullanýlabilecek bir dosya ismi ile karþýlaþtýrýlarak üretilmiþ yamalar göndermekten kaçýnýn. Böyle bir yama patch\N’39’in gerçek dosyayý deðil yedekleme dosyasýný yamamasýna yol açabilir. Bunun yerine old/README ve new/README gibi farklý dizinlerde bulunan ayný isimli iki dosyayý karþýlaþtýrýn.
Yer deðiþtirmeli yamalar göndermemeye çalýþýn. Böyle bir yama zaten uygulanmýþ bir yama gibi görüneceðinden insanlarý þaþýrtýr.
Yamanýzýn türetilerek elde edilen dosyalarý yamamasýna dikkat edin (makefile\N’39’ýnýzýn içinde configure: configure.in diye bir satýr var diye configure dosyasýný yamamak gibi.). Alýcýlar bu tür türetilerek elde edilen dosyalarý zaten kendileri türetebilmelidir. Türetilen dosyalar için fark dosyalarý göndermek zorundaysanýz, fark dosyalarýný UTC kullanarak üretin. Böylece alýcýlar yamayý -Z (--set-utc) seçeneði ile uygulayýp yamanmýþ dosyalara baðýmlý yamanmamýþ dosyalarý kaldýrmak zorunda kalýrlar (make clean yapmak gibi).
Beþyüzbilmemkaç farklýk bir listeyi tek bir dosyaya koymaktan kaçýnmak iyi olurdu. Birbiriyle ilgileri nedeniyle gruplanabilen dosyalarla ilgili yamalarý farklý dosyalara koymak akýllýca olur.

TANI ÝLETÝLERÝ

Taný iletilerinin varlýðý genellikle patch\N’39’in yama dosyanýzý çözümleyemediðini belirtir.
--verbose seçeneði verilmiþse bir Hmm... iletisi, yama dosyasýnda iþlenemeyen bir metinin varlýðýný ve patch\N’39’in bu metin içinde bir yama var mý acaba, varsa bu ne tür bir yamadýr acaba diye bir saptama yapmaya çalýþtýðýný gösterir.
patch\N’39’in çýkýþ durumu 0 ise, listedeki yamalarýn hepsi baþarýyla uygulanmýþ demektir. 1 ise bazýlarý uygulanamamýþtýr. 2 ise biraz daha fazla sorun vardýr. Bir döngü içinde çok sayýda yama uyguluyorsanýz her seferinde bu çýkýþ durumuna bakmanýz icabeder, böylece kýsmen yamanmýþ dosyalara sonraki yamayý uygulamamýþ olursunuz.

YETERSÝZLÝKLER

Baðlamsal fark dosyalarý boþ dosyalarýn ve boþ dizinlerin ya da sembolik bað gibi özel dosyalarýn oluþturulmasý ve silinmesi için güvenilir bir içerik sunamazlar. Sahiplik, dosya izinleri gibi dosyalarýn temel verilerinde bir deðiþiklik bilgisi sunamadýklarý gibi bir dosyanýn baþka bir dosyaya sabit bað mý olacaðý gibi bilgileri de içeremezler. Bu tür deðiþiklikler gerekliyse, bunlarý gerçekleþtirecek bir betik yamaya eþlik etmelidir.
patch, bir ed betiðinde olmayan satýr numaralarý hakkýnda birþey söyleyemediði gibi, bir normal fark dosyasýnda da sadece bir deðiþiklik ya da silme iþlemi bulursa hatalý satýr numaralarýný saptayabilir. Belirsizlik faktörü olarak 3 verildiðinde baðlamsal fark dosyalarý da sorun yaratabilir. Elveriþli bir etkileþimli arayüz eklenene kadar, bir baðlamsal fark dosyasýnýn böyle bir durumda sorun çýkarýp çýkarmayacaðýný kendiniz saptamalýsýnýz. Þüphesiz, hatasýz gerçekleþen bir derleme iþlemi yamanýn hatasýz uygulandýðýný gösteriyor gibi görünse de bu daima böyle olmaz.
patch, bazan biraz fazla tahmin yapmasý gerekse bile genellikle doðru sonuçlar üretir. Yine de, yamanýn üretildiði dosya ile yamanýn uygulandýðý dosya ayný sürüme ait olduðu zaman sonuçlarýn doðru olacaðý garanti edilmiþtir.

UYUMLULUK BÝLGÝLERÝ

POSIX standardý, patch\N’39’in geleneksel davranýþýndan farklý davranýþlar belirtir. patch\N’39’in POSIX uyumluluðu olmayan 2.1 ve daha önceki sürümleri ile çalýþmak zorundaysanýz bu farklardan haberdar olmanýz gerekir.
· Geleneksel patch\N’39’de -p seçeneðinin terimi isteðe baðlýdýr. Yalnýz baþýna -p seçeneði -p0\N’39’a eþdeðerdir. Þimdiki durumda ise -p seçeneðinin bir terime sahip olmasý zorunludur ve -p 0 seçeneði -p0 seçeneðine eþdeðerdir. En yüksek derecede uyumluluk adýna seçeneði -p0 ve -p1 gibi kullanýn.
Ayrýca, geleneksel patch dosya yolunu saptarken bölü çizgilerinin sayýsýna bakarken yeni sürümleri dosya yolunu oluþturan elemanlarýn sayýsýna bakmaktadýr. Bundan dolayý, birden fazla yanyana bölü çizgisi tek bir bölü çizgisi olarak ele alýnmaktadýr. En yüksek derecede uyumluluk adýna gönderilen yamalarýn içindeki dosya isimlerinde // olmamasýna dikkat edin.
· Geleneksel patch\N’39’de yedekleme öntanýmlý olarak etkindir. Bu davranýþ þimdi sadece -b (--backup) seçeneði ile etkin kýlýnabilmektedir.
Bunun tersine, POSIX patch\N’39’de bir eþleþmeme olsa bile yedekleme asla yapýlmaz. GNU patch\N’39’de bu davranýþ --posix seçeneði kullanýlarak yahut POSIXLY_CORRECT ortam deðiþkeninin varlýðý sayesinde POSIX uyumluluðu saðlanarak aksi takdirde --no-backup-if-mismatch seçeneði ile etkinleþtirilir.
Geleneksel patch\N’39’in -b sonek seçeneði ile GNU patch\N’39’in -b -z sonek seçenekleri eþdeðerdir.
· Geleneksel patch yama baþlýðýndan yamanacak dosyanýn ismini öðrenmek için karmaþýk (ve iyi belgelenmemiþ) bir yöntem kullanýr. Bu yöntem POSIX ile uyumlu olmadýðý gibi, birkaç yanlýþ gibi görünmeyen yanlýþ içerir. Þimdi patch ayný karmaþýklýkta (ama daha iyi belgelenmiþ) ve isteðe baðlý olarak POSIX uyumlu olabilen bir yöntem kullanmaktadýr; onun artýk daha az yanlýþ gibi görünmeyen yanlýþ içerdiðini düþünüyoruz. Baðlamsal fark dosyasýnýn baþlýðýnda ve Index: satýrýnda dosya isimlerinden önek ayýrmasý yapýldýktan sonra kalan dosya isimleri ayný ise bu iki yöntem birbiriyle uyumludur. Yamanýz, her baþlýktaki dosya isimleri eþit sayýda bölü çizgisi içeriyorsa, normal olarak uyumludur.
· Geleneksel patch kullanýcýya bir soru yönelteceði zaman soruyu standart hataya gönderir ve yanýtý bir uçbirim olarak sýrayla þu dosyalarda arar: standart hata, standart çýktý, /dev/tty ve standard girdi. Þimdi ise patch soruyu standart çýtýya gönderip yanýtý /dev/tty\N’39’den okur. Bazý sorularýn öntanýmlý yanýtlarý deðiþtirilmiþtir, böyle öntanýmlý yanýtlarý olan sorularda patch artýk sonsuz bir döngüye girip yanýt beklememektedir.
· Geleneksel patch gerçek bir hata durumunda 1 ile dönerken, uygulanamayan yamalar olduðunda bunlarýn sayýsýný belirten bir çýkýþ deðeri ile döner. Þimdi ise patch uygulanamayan yamalar olduðunda 1 ile, gerçek bir sorun olmasý durumunda 2 çýkýþ deðeri ile döner.
· GNU patch, geleneksel patch ve POSIX uyumlu patch için ortak olan seçeneklerle kendinizi sýnýrlarsanýz iyi olur. Bu seçenekler aþaðýda listelenmiþtir. Terimli seçeneklerde terimler zorunludur ve terim ile seçenek arasýndaki boþluðun olup olmamasý önemlidir.
-c
-d dizin
-D taným
-e
-l
-n
-N
-o çýktýdosyasý
-psayý
-R
-r reddosyasý

YAZILIM HATALARI

Yazýlým hatalarýný lütfen eposta ile <bug-gnu-utils (at) gnu.org> adresine bildiriniz.
patch kýsmî eþleþmelerde, aþýrý kaymýþ baþlangýç konumlarýnda ve yer deðiþtirmelerde daha çevik olmalýydý ama bu iþlemler ek bir geçiþ gerektiriyor.
Kod eðer yinelenmiþse (örneðin, #ifdef ESKÝKOD ... #else ... #endif ile) patch her iki sürümüde yamayamayacatýr ve bu her ikisi için de uygulanabiliyorsa, yanlýþ sürüm yamanabilecek ve size iþlemin baþarýlý olduðunu söylececektir.
Evvelce uygulanmýþ bir yamayý uygularsanýz, patch yamanýn yer deðiþtirmeli yama olarak uygulanacaðýný varsayabilir ve size bu yamayý uygulamamayý teklif eder. Bu bir özellik olarak yorumlanabilirdi.

KOPYALAMA

Telif Hakký © 1984, 1985, 1986, 1988 Larry Wall.
Telif Hakký © 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Bu kýlavuzun harfi harfine kopyalanmasýna ve daðýtýlmasýna telif hakký uyarýsýnýn ve bu izin uyarýsýnýn tüm kopyalarýnda bulunmasý þartýyla izin verilmiþtir.
Bu kýlavuzun deðiþtirilmiþ kopyalarýnýn kopyalanmasý ve daðýtýlmasý, türetilmiþ çalýþmanýn sonuçlarýnýn tamamý, harfi harfine kopyalamanýn koþullarýný içererek ve buna eþdeðer bir izin uyarýsý da saðlandýðý takdirde izin verilmiþtir.
Bu kýlavuzun diðer dillere çevirilerinin kopyalanmasý ve daðýtýlmasýna, bu izin uyarýsýnýn bulunduðu orjinal ingilizce sürümdeki telif hakký sahipleri tarafýndan onaylanmýþ bir çeviri deðilse, yukarýda açýklanan deðiþtirilmiþ sürümlerinin koþullarý saðlandýðý takdirde izin verilmiþtir.

COPYING

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.

YAZARLAR

patch\N’39’in orjinal sürümü Larry Wall tarafýndan yazýlmýþtýr. Paul Eggert patch\N’39’in keyfî sýnýrlarýný kaldýrdý; ikilik dosyalarýn desteklenmesi, dosya zamanlarýnýn ayarlanmasý, dosyalarý silinmesi özelliklerini ekledi; ve daha iyi POSIX uyumluluðu saðladý. Diðer destekleyicilerden Wayne Davison unidiff desteðini, David MacKenzie yapýlandýrma ve yedekleme desteklerini saðladý.

ÇEVÝREN

Nilgün Belma Bugüner <nilgun (at) belgeler·gen·tr>, Aðustos 2004

⇧ Top