Provided by:
manpages-tr_1.0.5.1-1.1_all 
İ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,
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'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