オープンソースでは、ソースコードに適用するパッチファイルが公開されていることがあります。
このパッチファイルの適用方法について説明します。
Windowsでパッチファイルを適用するには、専用のツールが必要になります。
(Linux系OSの場合、patchコマンドが用意されています。このコマンドのWindows版を利用する必要があります。)
このツールは、以下の場所からダウンロードできます。
サイト名:ソフトウェア工房α
プログラミング・ツール(移植ソフト)にある「GNU patch 2.5.4 (Win32 版) ファイル名:patc254w.zip」をダウンロードして下さい。
※上記のツール以外にも、Patchコマンドの移植ツールは存在するので、使いやすいものを選択して下さい。
このパッチファイルの適用方法について説明します。
Windowsでパッチファイルを適用するには、専用のツールが必要になります。
(Linux系OSの場合、patchコマンドが用意されています。このコマンドのWindows版を利用する必要があります。)
このツールは、以下の場所からダウンロードできます。
サイト名:ソフトウェア工房α
プログラミング・ツール(移植ソフト)にある「GNU patch 2.5.4 (Win32 版) ファイル名:patc254w.zip」をダウンロードして下さい。
※上記のツール以外にも、Patchコマンドの移植ツールは存在するので、使いやすいものを選択して下さい。
【事前準備】
1.上記のサイトから「patc254w.zip」をダウンロードする。
2.ダウンロードしたファイルを解凍する。
→このファイルを解凍すると、「patch.exe」というファイルがあります。
この実行ファイルを利用することでパッチを当てることが可能になります。
3.必要があれば、「patch.exe」を適当なフォルダに移動する。
4.環境変数のPathに「patch.exe」を保管したフォルダを登録する。
→あらかじめ、Pathに設定されているフォルダに保管すれば、登録する必要はありません。
1)[コントロールパネル]-[システム]を選択する。
2)[詳細設定]タブを選択し、[環境変数]を指定する。
3)システム環境変数の一覧からPathを選択し、[編集]ボタンを押す。
→ 一覧にPathがない場合には、[新規]ボタンを押す。
4)以下の通りに指定する。
変数名:Path
変数値:Patch.exeを保管したフォルダの絶対パス
※他のパスが指定されている場合には、「;(セミコロン)」で区切ること!
C:\PatchにPatch.exeを保存した場合の例
例)C:Windows;C:\patch
※4の作業は、コマンドプロンプトで「patch.exe」のパスを気にせずに利用するための対応です。
以降の説明は、環境変数への登録を行っているものとします。
【パッチを適用するための環境構築】
※パッチを適用すると、ソースファイルが書き換わります。
ソースファイルのバックアップを行った上で、パッチを適用して下さい。
1.以下のファイルを用意し、同じフォルダに保存します。
・適用するパッチファイル
・パッチファイルを適用するソースファイル
2.コマンドプロンプトで以下のコマンドを実行する。
C:\> patch < パッチファイル名
コマンドが完了すると、以下のメッセージが表示される。
patching file ソースファイル名
※パッチファイルを適用したソースファイル名が表示される。
このメッセージが表示されると、パッチの適用が完了する。
3.パッチファイルを適用するソースファイルにパッチが適用される。
4.パッチファイルを適用したソースファイルを使ってビルドする。
【パッチの適用手順】
以降は、例として「C:\work」で作業するものとして、説明します。
1.以下のファイルを適当なフォルダ(同じフォルダ)にコピーする。
・パッチファイル
・パッチファイルを適用するファイル
2.コマンドプロンプトを起動する。
3.カレントディレクトリを1のフォルダに変更する。
C:\> cd "1で保存したフォルダのパス"
C:\> cd work
4.以下のコマンドを実行する。
C:\> patch < EventLogAppender.patch
パッチの適用が正常終了すると以下のメッセージが表示されます。
patching file EventLogAppender.cs
5.ソースコードを確認し、パッチが適用されていることを確認する。
【パッチファイルの内容】
以前の記事「【開発】パッチファイルを作成する」のパッチファイルを例に説明します。
--- test.vb.bk Tue Feb 26 13:00:33 2008
+++ test.vb Tue Feb 26 13:00:23 2008
@@ -1,5 +1,7 @@
Public Class Sample
Public Shared Sub Main()
- Debug.WriteLine("Hello")
+ For idx As Integer = 0 To 9
+ Debug.WriteLine("Hello")
+ Next idx
End Sub
End Class
---の行は、修正前のファイル。
+++の行は、修正後のファイル。
(この2行は、diffコマンド実行時に指定するファイルが表示されている)
@@から開始されている行は、1行目から記載しているという意味です。
パッチの動作としては、以下の通りです。
・行頭に"-"のある行を"+"の行に置き換える(変更する)。
・"-"の対になる"+"がない場合には、行を削除する。
・"+"の対になる"-"がない場合には、行を追加する。
パッチの適用前後のソースコードを見比べてみると、どの行が追加・削除・変更されたのかが分かります。
パッチ適用後には、ソースコードを見比べて、正しく反映されているかどうか確認しましょう。
【補足事項】
・Windows Vistaで上記のコマンドを実行する場合、コマンドプロンプトを「管理者として実行」する必要があります。
→ 一般ユーザ権限で起動するとpatchコマンドが正常に動作しません。
・適用したパッチを外す場合には、以下のコマンドを入力します。
C:\> patch -R < パッチファイル名
→ -Rオプションを付けることにより、パッチ適用前の状態に戻すことができます。
1.上記のサイトから「patc254w.zip」をダウンロードする。
2.ダウンロードしたファイルを解凍する。
→このファイルを解凍すると、「patch.exe」というファイルがあります。
この実行ファイルを利用することでパッチを当てることが可能になります。
3.必要があれば、「patch.exe」を適当なフォルダに移動する。
4.環境変数のPathに「patch.exe」を保管したフォルダを登録する。
→あらかじめ、Pathに設定されているフォルダに保管すれば、登録する必要はありません。
1)[コントロールパネル]-[システム]を選択する。
2)[詳細設定]タブを選択し、[環境変数]を指定する。
3)システム環境変数の一覧からPathを選択し、[編集]ボタンを押す。
→ 一覧にPathがない場合には、[新規]ボタンを押す。
4)以下の通りに指定する。
変数名:Path
変数値:Patch.exeを保管したフォルダの絶対パス
※他のパスが指定されている場合には、「;(セミコロン)」で区切ること!
C:\PatchにPatch.exeを保存した場合の例
例)C:Windows;C:\patch
※4の作業は、コマンドプロンプトで「patch.exe」のパスを気にせずに利用するための対応です。
以降の説明は、環境変数への登録を行っているものとします。
【パッチを適用するための環境構築】
※パッチを適用すると、ソースファイルが書き換わります。
ソースファイルのバックアップを行った上で、パッチを適用して下さい。
1.以下のファイルを用意し、同じフォルダに保存します。
・適用するパッチファイル
・パッチファイルを適用するソースファイル
2.コマンドプロンプトで以下のコマンドを実行する。
C:\> patch < パッチファイル名
コマンドが完了すると、以下のメッセージが表示される。
patching file ソースファイル名
※パッチファイルを適用したソースファイル名が表示される。
このメッセージが表示されると、パッチの適用が完了する。
3.パッチファイルを適用するソースファイルにパッチが適用される。
4.パッチファイルを適用したソースファイルを使ってビルドする。
【パッチの適用手順】
以降は、例として「C:\work」で作業するものとして、説明します。
1.以下のファイルを適当なフォルダ(同じフォルダ)にコピーする。
・パッチファイル
・パッチファイルを適用するファイル
2.コマンドプロンプトを起動する。
3.カレントディレクトリを1のフォルダに変更する。
C:\> cd "1で保存したフォルダのパス"
C:\> cd work
4.以下のコマンドを実行する。
C:\> patch < EventLogAppender.patch
パッチの適用が正常終了すると以下のメッセージが表示されます。
patching file EventLogAppender.cs
5.ソースコードを確認し、パッチが適用されていることを確認する。
【パッチファイルの内容】
以前の記事「【開発】パッチファイルを作成する」のパッチファイルを例に説明します。
--- test.vb.bk Tue Feb 26 13:00:33 2008
+++ test.vb Tue Feb 26 13:00:23 2008
@@ -1,5 +1,7 @@
Public Class Sample
Public Shared Sub Main()
- Debug.WriteLine("Hello")
+ For idx As Integer = 0 To 9
+ Debug.WriteLine("Hello")
+ Next idx
End Sub
End Class
---の行は、修正前のファイル。
+++の行は、修正後のファイル。
(この2行は、diffコマンド実行時に指定するファイルが表示されている)
@@から開始されている行は、1行目から記載しているという意味です。
パッチの動作としては、以下の通りです。
・行頭に"-"のある行を"+"の行に置き換える(変更する)。
・"-"の対になる"+"がない場合には、行を削除する。
・"+"の対になる"-"がない場合には、行を追加する。
パッチの適用前後のソースコードを見比べてみると、どの行が追加・削除・変更されたのかが分かります。
パッチ適用後には、ソースコードを見比べて、正しく反映されているかどうか確認しましょう。
【補足事項】
・Windows Vistaで上記のコマンドを実行する場合、コマンドプロンプトを「管理者として実行」する必要があります。
→ 一般ユーザ権限で起動するとpatchコマンドが正常に動作しません。
・適用したパッチを外す場合には、以下のコマンドを入力します。
C:\> patch -R < パッチファイル名
→ -Rオプションを付けることにより、パッチ適用前の状態に戻すことができます。
- カテゴリ:
- コマンドプロンプト
- 統合開発環境(IDE)