İ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