パッチをあてる(その2:パッチを作る)
パッチをあてる(その1:適用方法)の続きで(随分間があきましたが)、今回はパッチを作る方法をご紹介します。
パッチとはプログラムを修正するための差分、あるいは差分が記述されたファイルを指します。パッチを作るためには変更前のファイルと変更後のファイルを比較して、その差分を抽出します。比較するためには diff コマンドを利用します。
ここではその1の3.1項と同じ、下記のパッチを作ってみることにします。
--- Util.pm.bak Fri Jan 06 14:19:44 2006
+++ Util.pm Fri Jan 06 14:20:48 2006
@@ -401,7 +401,7 @@
$str ||= '';
my @paras = split /\r?\n\r?\n/, $str;
for my $p (@paras) {
- if ($p !~ m@^</?(?:h1|h2|h3|h4|h5|h6|table|ol|dl|ul|menu|dir|p|pre|center|form|fieldset|select|blockquote|address|div|hr)@) {
+ if ($p !~ m@^</?(?:h1|h2|h3|h4|h5|h6|menu|dir|p|pre|center|form|fieldset|select|address|div|hr)@) {
$p =~ s!\r?\n!<br />\n!g;
$p = "<p>$p</p>";
}
作業ディレクトリは前回と同様、C:¥work とします。その1で作ったファイル類は全て削除しておいてください。
1.diff コマンドの準備
パッチの作成にあたっては diff コマンドを使用します。Linux ではデフォルトで用意されているようですが、Windows では用意されていません。
ということで、diff コマンドをソフトウェア工房αから入手します。
プログラミング・ツール(移植ソフト)に表示されている、
- diff272w.zip
- diff.exe
をPCの任意のディレクトリに配置します(他にファイルが色々入ってますが今回は使いません)。C:¥WINDOWS 配下または C:¥WINDOWS¥system32 配下に配置できれば、後述するMS-DOSコマンドプロンプトからの起動でパスを指定せずに実行することができます。
配置できない場合はとりあえず C:¥ 配下においてください。
2.ファイルのバックアップ
修正するファイルとなる、lib/MT/Util.pm をコピーして Util.pm.bak というファイル名で保存してください。なお修正前のファイル名が Util.pm.bak、修正後のファイル名が Util.pm となります。これは修正後のファイルを正規のファイルとして使用するためです。いずれも C:¥work 配下に配置してください。
3.ファイルの修正
任意のエディタで work 配下に配置した Util.pm を開き、404 行目の
if ($p !~ m@^</?(?:h1|h2|h3|h4|h5|h6|table|ol|dl|ul|menu|dir|p|pre|center|form|fieldset|select|blockquote|address|div|hr)@) {
を
if ($p !~ m@^>/?(?:h1|h2|h3|h4|h5|h6|menu|dir|p|pre|center|form|fieldset|select|address|div|hr)@) {
に修正します。
4.diff 実行
次に MS-DOS コマンドプロンプトを開き、
C:¥>cd work
で、work ディレクトリへ移動し、diffコマンド
C:¥work>diff -u Util.pm.bak Util.pm
を実行します。Cドライブ直下に diff.exe を置いている場合は、
C:¥work>C:¥diff -u Util.pm.bak Util.pm
とします。
2つのファイルには、先程修正した差分がありますので、画面に
--- Util.pm.bak Fri Jan 06 14:19:44 2006
+++ Util.pm Fri Jan 06 14:20:48 2006
@@ -401,7 +401,7 @@
$str ||= '';
my @paras = split /\r?\n\r?\n/, $str;
for my $p (@paras) {
- if ($p !~ m@^</?(?:h1|h2|h3|h4|h5|h6|table|ol|dl|ul|menu|dir|p|pre|center|form|fieldset|select|blockquote|address|div|hr)@) {
+ if ($p !~ m@^</?(?:h1|h2|h3|h4|h5|h6|menu|dir|p|pre|center|form|fieldset|select|address|div|hr)@) {
$p =~ s!\r?\n!<br />\n!g;
$p = "<p>$p</p>";
}
が表示されます。これがパッチとなります。diff コマンドの後の "-u" を省略すると差分の行だけが表示されます。
これをマウスコピーして任意のエディタで新しいファイルを開き、ペースト&保存しても良いのですが、
C:¥work>diff -u Util.pm.bak Util.pm > patch.txt
を実行すれば work 配下に patch.txt というファイル名で直接保存することができます。これがパッチファイルとなり、その1の3.1項で作ったパッチファイルと同じものになります。
他のファイルでも同様に差分を表示することができますので、色々とお試しください。
その1:適用方法 |
その2:パッチを作る |
その3:patchコマンドの-pオプションについて |
- Windowsのバッチ起動でコマンドプロンプトを自動的に閉じない方法
- パッチをあてる(その3:patchコマンドの-pオプションについて)
- パッチをあてる(その1:適用方法)