patchコマンド-pオプションの覚え書き
patchコマンドは、元ファイルと差分情報からファイルを更新してくれる素晴らしいコマンドだが、patchコマンドを実行するディレクトリと-pオプションの設定で悩むことが多い。そこで今後のために、自分用の覚え書き。
ファイルにパッチを当てる
- 様々なオプションが設定できるが、基本は以下の書式。
$ patch 元ファイルのパス < patchファイル(差分情報)のパス
$ cd ~/Downloads/synergy-1.3.1/lib/platform $ patch < ~/Downloads/OSX_BusError.patch
Index: COSXKeyState.cpp =================================================================== RCS file: /cvsroot/synergy2/synergy/lib/platform/COSXKeyState.cpp,v retrieving revision 1.11 diff -u -p -r1.11 COSXKeyState.cpp --- COSXKeyState.cpp 23 Mar 2006 06:03:20 -0000 1.11 +++ COSXKeyState.cpp 17 Aug 2006 05:02:39 -0000 @@ -790,6 +790,12 @@ COSXKeyState::CKeyResource::getKeyID(UIn str, GetScriptManagerVariable(smKeyScript), kCFAllocatorNull); + // sometimes CFStringCreate returns NULL, (e.g., Apple Korean encoding with char + // value 214 when start up.) if so, make it no key. otherwise, that NULL is given to + // CFStringCreateMutableCopy down Below, which makes a BUS ERROR. + if (cfString == 0x0) + return kKeyNone; + // convert to precomposed CFMutableStringRef mcfString = CFStringCreateMutableCopy(kCFAllocatorDefault, 0, cfString);
ディレクトリごとパッチを当てる
- 元ディレクトリ以下のすべてのファイルに対してパッチを当てることができる。その基本は以下のオプション指定。
- 元ディレクトリは、ダウンロードしたソースコードが保存されているプロジェクトフォルダと考えることができる。
$ patch -p0 -d 元ディレクトリのパス < patchファイル(差分情報)のパス
$ cd ~/Downloads/synergy-1.3.1 $ patch -p0 < ~/Downloads/synergy.patch
Index: cmd/synergyc/synergyc.cpp =================================================================== RCS file: /cvsroot/synergy2/synergy/cmd/synergyc/synergyc.cpp,v retrieving revision 1.20 diff -u -p -r1.20 synergyc.cpp --- cmd/synergyc/synergyc.cpp 23 Mar 2006 06:03:00 -0000 1.20 +++ cmd/synergyc/synergyc.cpp 28 Jan 2008 07:25:39 -0000 @@ -435,7 +435,7 @@ standardStartup(int argc, char** argv) // daemonize if requested if (ARG->m_daemon) { - return ARCH->daemonize(DAEMON_NAME, &daemonMainLoop); + return ARCH->daemonize(DAEMON_NAME, argc, argv, &daemonMainLoop); } else { return mainLoop(); ...(中略)...