İSİM
patch - yama dosyasını uygular
- patch
- [seçenekler] [özgün [yama]]
Genellikle şöyle kullanılır:
- patch
- -psayı < yama
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 özgün
dosyaya uygulayarak özgün dosyaların yamalı
sürümlerini üretir. Normalde yamalı
sürümler özgün 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 özgün 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 boru ile ed(1) metin
düzenleyicisine 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.)
Sonek bağlamından daha az önek
içeriğine sahip olan yama parçaları (belirsizlik
uygulandıktan sonra), ilk satır numarası 1 ise
dosyanın başlangıcına
uygulanmalıdır. Önek bağlamından daha az
sonek içeriğine sahip olan yama parçaları ise
(belirsizlik uygulandıktan sonra) dosyanın sonuna
uygulanmalıdır.
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.)
Reddedilen parça, birleşik veya bağlam
farkı biçeminde çıkar. Girdi normal bir farksa,
bağlamların çoğu basitçe boştur.
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 özgün 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 en iyi isim seçilir.
- Eğer patch RCS, ClearCase, Perforce ve SCCS’yi
yoksaymıyorsa (-g sayı veya
--get=sayı seçeneklerine
bakınız) ve belirtilen dosya mevcut değilse ama bir
RCS, ClearCase, Perforce veya SCCS ana dosyası varsa patch
belirtilen ilk dosyayı RCS, ClearCase, Perforce veya SCCS ana
dosyası ile seçer.
- Belirtilen dosya mevcut değilse, bir RCS, ClearCase, Perforce 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 bir dosya ismi
seçilememişse, yamanacak dosyanın ismi size sorulur
ve patch dosya ismini buna göre seçer.
Belirtilen dosyalar listesinden "en iyi" 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, bunlardan 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 numarasıdır) alır ve
özgün 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 dosya yama dosyasıyla yamanır.
Eğer yama dosyası bir yamadan
fazlasını içeriyorsa patch onların her
birini 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.
Uzun seçenekler için zorunlu olan girdiler
kısa seçenekler için de zorunludur.
- -b, --backup
- Dosyaların yedeğini oluşturur. Bir dosya
yamanırken özgün 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,
--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 ikil 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,
--directory=dizin
- Hiçbir şey yapmadan, hemen dizine geçilir.
- -D ,
--ifdef=tanım
- Değişiklikleri işaretlemede #ifdef ... #endif
yapısı tanım
farklılaştırma simgesi 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 ,
--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 ,
--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 öntanımlı değer
sıfırdır.
- --help
- Seçeneklerin bir özetini basar ve çıkar.
- -i,
--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.
- --merge,
-merge=merge, -merge=diff3
- < Yama dosyasını özgün dosyaya
diff3(1) veya merge(1) gibi uygular. Bir
çelişki bulunursa patch bir uyarı
çıktılar ve çelişkiyi
<<<<<<< ve >>>>>>>
satırları arasına yerleştirir. Bir
çelişki genelde şuna benzer:
<<<<<<<
özgün dosyadaki satırlar
|||||||
yamadaki özgün satırlar
=======
yamadaki yeni satırlar
>>>>>>>
- --merge seçeneğinin seçimlik girdisi
çelişkinin çıktılanma biçemini
değiştirir: diff3 biçeminde |||||||
bölümünden sonra yamadaki özgün
satırlar gösterilir; merge biçeminde, bu
bölüm olmaz. merge biçemi
öntanımlıdır.
Bu seçenek --forward seçeneğini de
uygularken --fuzz=sayı seçeneğini yok
sayar.
- -n, --normal
- Yama dosyası, normal 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,
--output=çıktıdosyası
- Dosyaların yerinde yamanması yerine
çıktı,
çıktıdosyası dosyasına
gönderilir.
- -p,
--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,
--reject-file=reddosyası
- Reddedilenler öntanımlı .rej dosyası
yerine reddosyasına konulur. reddosyası olarak
- belirtilmişse reddedilenler yok sayılır.
- -R, --reverse
- 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.)
- --read-only=davranış
- Salt-okunur bir dosyada değişiklik yapılırken
belirtilen davranışa uyulur: ignore ise
olası sorunlar yok sayılır, warn ise bu konuda
uyarır, fail ise işlem başarısız
olur.
- reject-format=biçem
- Reddedilenler dosyaları belirtilen biçemde
üretir (context veya unified). Bu seçenek
olmaksızın yama unified (birleşik) ise reddedilen
parçalar da unified diff biçeminde olur. Aksi takdirde,
context (bağlamsal) diff biçeminde olur.
- -s, --silent,
--quiet
- Bir hata oluşmadıkça bilgilendirici hiçbir
şey çıktılanmaz.
- --follow-symlinks
- Girdi dosyalarını aranırken sembolik bağlar
izlenir. Sembolik bağların işaret ettiği
dosyaları değiştirmek yerine sembolik
bağları değiştirir. Sembolik bağlara
Git tarzı yamalar artık uygulanmamaktadır. Bu
seçenek, yamanın önceki sürümleriyle
geriye dönük uyumluluk için mevcuttur;
kullanımı önerilmez.
- -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ünü ve yama
seviyesini basar ve çıkar.
- -V,
--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,
--debug=sayı
- Sadece patch yamacılarını ilgilendiren hata
ayıklama seçeneklerini belirtmek için
kullanılır.
- -Y,
--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,
--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 özgün 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.
- PATCH_GET
- Eksik ya da salt-okunur dosyaların RCS, ClearCase, Perforce 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:
http://ftp.isi.edu/innotes/rfc934.txt> (1985-01).
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 eğik çizgi ç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çeminde 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 özgün
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, böyle bir çıktıya
sahip yamayı 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üz bilmem kaç 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.
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.
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.
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ı
-
Yazılım hatalarını lütfen
eposta ile <bug-patch (at) gnu.org> adresine bildiriniz.
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.
Bir yama parçasının nasıl
birleştirileceğini hesaplamak, standart bulanık
algoritmayı kullanmaktan çok daha zordur. Daha
büyük parçalar, daha fazla bağlam,
özgün konumdan daha büyük bir sapma ve daha
kötü bir eşleşme, algoritmayı
yavaşlatır.
Telif Hakkı © 1984, 1985, 1986, 1988 Larry Wall.
Telif hakkı © 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
1997, 1998, 1999, 2000, 2001, 2002, 2009 Free Software Foundation, Inc.
Lisans GPLv3+: GNU GPL sürüm 3 veya üstü
<http://gnu.org/licenses/gpl.html>. Bu bir özgür
yazılımdır: yazılımı
değiştirmek ve dağıtmakta
özgürsünüz. Yasaların izin verdiği
ölçüde HİÇBİR GARANTİ
YOKTUR.
patch’in özgün
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ı.
Andreas Grünbacher birleştirme desteğini
sağladı.
ÇEVİREN
© 2022 Nilgün Belma Bugüner
Bu çeviri özgür yazılımdır:
Yasaların izin verdiği ölçüde
HİÇBİR GARANTİ YOKTUR.
Lütfen, çeviri ile ilgili bildirimde bulunmak veya çeviri
yapmak için https://github.com/TLBP/manpages-tr/issues adresinde
"New Issue" düğmesine tıklayıp yeni
bir konu açınız ve isteğinizi belirtiniz.