Bu iki soru üzerinde dokunulduğunda, ' Bir dosya veya klasör zaten yamalı olup olmadığını kontrol edin ' ve ' Yap patch
return 0 zaten uygulanmış yama atlama ' Ancak ne bir tatmin cevap vardı.
Bir senaryo yazıyorum ve bir yama için aşağıdakileri test etmek istiyorum:
Tamamen uygulandı: devam
Kısmen uygulandı: çıkış
Uygulanmadı: başarıyla uygulanabiliyorsa ve devam edin, aksi takdirde çıkın
Sorun kısmen uygulanan vakayı ele almaktır:
mkdir test && cd test
cat << EOF > foobar.patch
--- /dev/null
+++ foo
@@ -0,0 +1 @@
+foo
--- /dev/null
+++ bar
@@ -0,0 +1 @@
+bar
EOF
patch --forward -i foobar.patch
rm foo
Bar var ama foo yok çünkü bir noktada kaldırıldı. Şimdi yamayı kuru çalıştırmada ileri doğru uygularsam çıkış kodu başarılı bir şekilde uygulanmadığı için 1 olur.
$ patch --dry-run --forward --force -i foobar.patch
checking file foo
The next patch would create the file bar,
which already exists! Skipping patch.
1 out of 1 hunk ignored
$ echo $?
1
Bu bana yamanın tamamen uygulanıp uygulanmadığını söylemiyor, sadece kuru çalışmayı başaramadı. Bunun neden stackoverflow yanıtı olarak işaretlendiğini bilmiyorum. Tersine çevirmeyi denedim, ancak etkileşimli olmayan bir komut dosyası olduğundan sadece zorla çalıştı:
$ patch --dry-run --reverse --force -i foobar.patch
The next patch, when reversed, would delete the file foo,
which does not exist! Applying it anyway.
checking file foo
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED
checking file bar
$ echo $?
1
Öyleyse, kuru bir çalışmada bir yamayı zorla tersine çevirmeye çalışırsam ve yamanın tamamen uygulandığını ve tamamen uygulanmadığını (veya hiç uygulanmadığını) başarırsa her zaman tutar mı? Çünkü eğer öyleyse böyle bir şey yapabilirim
patch --dry-run --reverse --force -i foobar.patch ||
(patch --dry-run --forward --force -i foobar.patch &&
patch --forward --force -i foobar.patch) ||
exit 1