Como posso aplicar um patch -p0 em qualquer diretório de trabalho?

25

Eu tenho um patch com caminhos absolutos que desejo usar. Ou seja, as primeiras linhas são as seguintes.

--- /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

No entanto, falha a menos que eu esteja no diretório raiz.

~$ 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

Existe uma maneira de fazer com que patch use o caminho absoluto com qualquer diretório de trabalho?

    
por Sparhawk 11.11.2014 / 00:07

1 resposta

30

Olhando o código-fonte do patch GNU, este comportamento é construído desde a versão 2.7. A partir do GNU patch 2.7.1, somente caminhos relativos que não contenham .. são aceitos, a menos que o diretório atual seja o diretório raiz.

Para aplicar um patch contendo caminhos absolutos, você pode usar

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

Em versões recentes do patch GNU, você pode simplesmente

sudo patch -d/ -p0 <foo.patch
    
por 11.11.2014 / 03:43

Tags