作業ディレクトリから-p0パッチを適用するにはどうすればよいですか?


26

使用したい絶対パスのパッチがあります。つまり、最初の数行は次のとおりです。

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

ただし、ルートディレクトリにいない限り失敗します。

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

patch作業ディレクトリで絶対パスを使用する方法はありますか?


代わりに、パッチ自体を編集します。
Braiam 14年

@Braiamパッチに対してどのような特定の編集を行いますか?基本的に、patchコマンドでターゲットパスを指定する必要を回避できるかどうか疑問に思っています。
スパルホーク

コンテキストをお願いします。このパッチを実行中のシステムに適用しようとしていますか?もしそうなら、なぜですか?あなたのディストリビューション/ OSは何ですか?このパッチは何をしますか?KDEのパッチのように見えます。どのコンポーネントですか?一般的に、ディストリビューションがパッチを適用していない場合、パッチを適用してソースから関連パッケージを再構築する必要があります。また、パスの先頭部分をトリミングできます。それは問題になりません。どの程度トリミングするかは、ソースがどのように見えるかによって異なります。
ファヒームミタ14

1
@FaheemMithaはい、Arch / KDEで動作しています。このバグを修正することです。変更を手動で適用すると、修正が機能します。ただし、この場合はコンテキストがそれほど重要ではないと思います/tmp/foo。この問題をのテストファイルで再現できるからです。に当てはまる一般的な答えにもっと興味がありますpatch
Sparhawk

回答:


35

GNUパッチのソースコードを見ると、この動作はバージョン2.7以降に組み込まれています。GNUパッチ2.7.1の時点で..は、現在のディレクトリがルートディレクトリでない限り、含まれていない相対パスのみが受け入れられます。

絶対パスを含むパッチを適用するには、次を使用できます

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

GNUパッチの最近のバージョンでは、簡単にできます

sudo patch -d/ -p0 <foo.patch

さて、それはそれです。ただし、cd /usrターゲットファイルがこのディレクトリにあるにもかかわらず、コマンドをチェックすると失敗します。
Sparhawk

@Sparhawk申し訳ありませんが、私の説明は一部不正確でした。テストは、現在のディレクトリがでない場合、/絶対パスまたは..コンポーネントを含むパスを拒否します。
ジル「SO-悪であるのをやめる」14

7
またはもっと簡単にsudo patch -d/ -p0 <foo.patch

@TheoYou当時そのコメントを見逃していた。答えとして書き留めてください。
Sparhawk
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.