web-dev-qa-db-ja.com

patchコマンドが機能しているかどうかを確認するにはどうすればよいですか?

Seek-for-Androidプロジェクトによって提供されるパッチを、Cyanogenmodからダウンロードしたコードに適用しようとしています。コードはmakeで正常にコンパイルされたので、すべてのファイルがそこにあることがわかります。パッチが何をしているのか、それが機能しているかどうかさえもわかりません。 -verboseオプションを試しました。パッチがディレクトリをトラバースして更新するファイルを探すのにどれくらいの時間がかかるかわかりません。 CPUでのアクティビティはあまり見られません。これが私が従う指示です: ここにリンクの説明を入力してください これが私が見ているもののスクリーンキャプチャです:

   root@ubuntu:~/Android/system# ls
    abi       cm-11-2      docs             Makefile   sdk
    Android   cm-11-3      external         ndk        smartcard-api-3_1_0
    art       cts          frameworks       out        smartcard-api-3_1_0.tgz
    bionic    dalvik       hardware         packages   system
    bootable  developers   kernel           pdk        tools
    build     development  libcore          prebuilt   vendor
    cm-11     device       libnativehelper  prebuilts
    root@ubuntu:~/Android/system# cd smartcard-api-3_1_0
    root@ubuntu:~/Android/system/smartcard-api-3_1_0# cd ..
    root@ubuntu:~/Android/system# patch -p1 smartcard-api-3_1_0/smartcard-api.patch   ^C
     root@ubuntu:~/Android/system# patch -p1 -R smartcard-api-3_1_0/smartcard- api.patch 
    ^C
    root@ubuntu:~/Android/system# patch -p1 -verbose smartcard-   api-3_1_0/smartcard-  
    api.patch 
    patch 2.6.1
    Copyright (C) 1988 Larry Wall
    Copyright (C) 2003, 2009 Free Software Foundation, Inc.

場合によっては、ターゲットファイルを探す必要があると思いますか?以下の出力は、一方のパッチが成功したが、もう一方のファイルが見つからなかったことを示しているようです。ターゲットファイルを見つけて指定する必要があると思いますか?何らかの理由で、フルパスでさえ認識されません。

root@ubuntu:~/Android/system# patch -p1 < smartcard-api-3_1_0/uicc.patch 
patching file frameworks/base/telephony/Java/com/Android/internal/telephony  /ITelephony.aidl
Hunk #1 FAILED at 304.
1 out of 1 hunk FAILED -- saving rejects to file frameworks/base/telephony /Java/com/Android/internal/telephony/ITelephony.aidl.rej
patching file frameworks/base/telephony/Java/com/Android/internal/telephony  /RILConstants.Java
Hunk #1 FAILED at 55.
Hunk #2 FAILED at 262.
2 out of 2 hunks FAILED -- saving rejects to file frameworks/base/telephony/Java/com/Android/internal/telephony/RILConstants.Java.rej
patching file frameworks/opt/telephony/src/Java/com/Android/internal/telephony /CommandException.Java
Hunk #1 FAILED at 42.
Hunk #2 FAILED at 83.
2 out of 2 hunks FAILED -- saving rejects to file frameworks/opt/telephony  /src/Java/com/Android/internal/telephony/CommandException.Java.rej
patching file frameworks/opt/telephony/src/Java/com/Android/internal/telephony /CommandsInterface.Java
Hunk #1 succeeded at 1250 (offset 109 lines).
patching file frameworks/opt/telephony/src/Java/com/Android/internal/telephony /IccCard.Java
Hunk #1 FAILED at 214.
1 out of 1 hunk FAILED -- saving rejects to file frameworks/opt/telephony  /src/Java/com/Android/internal/telephony/IccCard.Java.rej
patching file frameworks/opt/telephony/src/Java/com/Android/internal/telephony  /RIL.Java
Hunk #1 succeeded at 2592 (offset 253 lines).
Hunk #2 succeeded at 4109 (offset 467 lines).
Hunk #3 succeeded at 4619 (offset 543 lines).
patching file frameworks/opt/telephony/src/Java/com/Android/internal/telephony/sip/SipCommandInterface.Java
Hunk #1 FAILED at 536.
1 out of 1 hunk FAILED -- saving rejects to file frameworks/opt/telephony/src/Java/com/Android/internal/telephony/sip/SipCommandInterface.Java.rej
patching file frameworks/opt/telephony/src/Java/com/Android/internal/telephony  /test/SimulatedCommands.Java
Hunk #1 FAILED at 1655.
1 out of 1 hunk FAILED -- saving rejects to file frameworks/opt/telephony /src/Java/com/Android/internal/telephony/test/SimulatedCommands.Java.rej
patching file frameworks/opt/telephony/src/Java/com/Android/internal/telephony/uicc/IccCardProxy.Java
Hunk #1 succeeded at 844 (offset 102 lines).
patching file frameworks/opt/telephony/src/Java/com/Android/internal/telephony/uicc/UiccCardApplication.Java
Hunk #1 FAILED at 44.
Hunk #2 succeeded at 437 (offset 100 lines).
Hunk #3 succeeded at 941 (offset 194 lines).
1 out of 3 hunks FAILED -- saving rejects to file frameworks/opt/telephony  /src/Java/com/Android/internal/telephony/uicc/UiccCardApplication.Java.rej
patching file frameworks/opt/telephony/tests/telephonytests/src/com/Android    /internal/telephony/gsm/UsimDataDownloadCommands.Java
Hunk #1 succeeded at 651 with fuzz 2 (offset 21 lines).
can't find file to patch at input line 404
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
 diff --git a/packages/apps/Phone/src/com/Android/phone  /PhoneInterfaceManager.Java b/packages/apps/Phone/src/com/Android/phone    /PhoneInterfaceManager.Java
|index 6600ae5..2ae6739 100644
|--- a/packages/apps/Phone/src/com/Android/phone/PhoneInterfaceManager.Java
|+++ b/packages/apps/Phone/src/com/Android/phone/PhoneInterfaceManager.Java
--------------------------
File to patch: 
2
user3326293

何らかの理由で、パッチファイルはリダイレクトによってパッチプログラムに供給される必要があります。

     patch file

動作しませんが

    patch < file

動作します

6
daniel kullmann

非常に簡単な解決策は、パッチを適用する前にファイルをバージョン管理下に置くことです。 jourのバージョン管理ツールはGitとMercurialです。私は個人的にMercurialを使用してお勧めします。

また、パッチが適用されるファイルを確認したい場合は、実行できます

diffstat patchname

Mercurialを使用したサンプル出力:

apt-get source hello
cd hello-2.9
hello-2.9$ hg init
hello-2.9$ hg add
hello-2.9$ hg ci     # brings up an editor - add a commit message
hello-2.9$ patch -p1 < debian/patches/99-config-guess-config-sub 
    patching file build-aux/config.guess
    patching file build-aux/config.sub
hello-2.9$ hg st
    M build-aux/config.guess
    M build-aux/config.sub
hello-2.9$ hg diff   # diff output
hello-2.9$ diffstat debian/patches/99-config-guess-config-sub
    config.guess |  149 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------
    config.sub   |   36 ++++++++++++++++++++----------------
    2 files changed, 106 insertions(+), 79 deletions(-)
6
Faheem Mitha

リダイレクトを完全に使用する代わりに、-iオプションを使用できます。

$ patch -i /path/to/file.patch
1
c0deous