Herhangi bir çalışma dizininden -p0 yamasını nasıl uygulayabilirim?


26

Kullanmak istediğim mutlak yolları olan bir yamam var. yani ilk birkaç satır aşağıdaki gibidir.

--- /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml  2014-10-10 18:47:23.000000000 +1100
+++ /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml.mod  2014-11-11 09:44:17.786200477 +1100

Ancak, kök dizinde olmadığım sürece başarısız olur.

~$ cd
~$ sudo patch -i /tmp/fix_kde_icons.patch -p0
Ignoring potentially dangerous file name /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml
Ignoring potentially dangerous file name /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml.mod
can't find file to patch at input line 3
Perhaps you used the wrong -p or --strip option?
...
~$ cd /tmp
/tmp$ sudo patch -i /tmp/fix_kde_icons.patch -p0
... #same error as above
/tmp$ cd /usr
/usr$ sudo patch -i /tmp/fix_kde_icons.patch -p0
... #same error as above
/usr$ cd /
/$ sudo patch -i /tmp/fix_kde_icons.patch -p0
patching file /usr/share/apps/plasma/packages/org.kde.pager/contents/ui/main.qml

patchHerhangi bir çalışma dizini ile mutlak yolu kullanmak için bir yolu var mı ?


Bunun yerine yamayı kendim düzenlerdim.
Braiam

@Braiam Yamada ne gibi düzenlemeler yapabilirim? Temelde patchkomutta herhangi bir hedef yolu belirtmek zorunda kalmamayı merak edip edemeyeceğimi merak ediyorum .
Sparhawk

Bazı bağlamlar lütfen. Bu yamayı çalışan bir sisteme uygulamaya mı çalışıyorsunuz? Öyleyse neden? Dağıtımınız / işletim sisteminiz nedir? Bu yama ne yapıyor? KDE olayı için bir yama gibi gözüküyor. Hangi bileşen? Genel olarak, dağıtımı sizin için yamayı uygulamıyorsanız, ilgili paketi uygulayarak yamayı uygulayarak yamanız gerekir. Ve yolun baş kısmını kırpabilirsiniz. Bu bir problem olmamalı. Ne kadar kesim yaptığınız kaynağın neye benzediğine bağlıdır.
Faheem Mitha 11:14

1
@FaheemMitha Evet, Arch / KDE ile çalışıyor. Bu hatayı düzeltmek için . Düzeltme, değişiklikleri el ile uygularsam çalışır. Ancak, bağlamın bu durumda çok önemli olduğunu sanmıyorum, çünkü bu sorunu bir sınama dosyasıyla çoğaltabiliyorum /tmp/foo. Bunun için geçerli olan genel bir cevapla daha çok ilgileniyorum patch.
Sparhawk

Yanıtlar:


35

GNU yamasının kaynak koduna bakıldığında bu davranış 2.7 sürümünden beri yerleşiktir. GNU yaması 2.7.1'den itibaren, ..geçerli dizin kök dizin olmadıkça , yalnızca içermeyen göreceli yollar kabul edilir.

Mutlak yollar içeren bir yama uygulamak için kullanabilirsiniz.

(cd / && sudo patch -p0) <foo.patch

GNU yamasının son sürümlerinde, basitçe

sudo patch -d/ -p0 <foo.patch

Tamam, işte bu. Ancak, komutlarımı kontrol ederseniz cd /usr, hedef dosyalar bu dizinde olsa da, başarısız oldu.
Sparhawk

@Sparhawk Üzgünüm, açıklamam kısmen yanlıştı. Sınama: geçerli dizin değilse /, o zaman bir ..bileşeni içeren mutlak yolu veya yolu reddet .
Gilles 'SO- kötülük yapmayı bırak'

7
Ya da daha doğrusu,sudo patch -d/ -p0 <foo.patch
Qian

@Bu anda o yorumu kaçırdım. Cevap olarak yazmalısın.
Sparhawk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.