İ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'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'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'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'dir ve bağlamsal fark
dosyalarında bağlamsal satır sayısından daha
yüksek bir değer (genelde 3'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'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,
-
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'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'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'ye göre belirtmeyi tercih edin.
- -u, --unified
- Yama dosyası birleşik bağlamsal fark
dosyası olarak yorumlanır.
- -v, --version
- patch'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 `version-control'
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'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'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'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'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'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ı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'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'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'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'in geleneksel davranışından
farklı davranışlar belirtir.
patch'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'de -p seçeneğinin
terimi isteğe bağlıdır. Yalnız başına
-p seçeneği -p0'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'de yedekleme
öntanımlı olarak etkindir. Bu davranış şimdi
sadece -b (--backup) seçeneği ile etkin
kılınabilmektedir.
Bunun tersine, POSIX patch'de bir eşleşmeme olsa bile
yedekleme asla yapılmaz. GNU patch'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'in -b sonek seçeneği ile GNU
patch'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'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'in orjinal sürümü Larry Wall tarafından
yazılmıştır. Paul Eggert
patch'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