【Ant】Ant で、差分ファイルを適用する ~ Patch ~

はじめに

 * 差分ファイル(パッチファイル)を使って、ソースをマージできる

注意

 * Windowsだとできない?
 (Windows上のEclipseで使用した際にはエラーになったがLinux上のEclipseでは問題なかった)

構文

 <patch patchfile="【差分ファイル】" originalfile="【パッチを当てる対象ファイル】" />

サンプル

build.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="sample.patch" name="SampleCodes">
    <property name="original.file" value="./etc/HelloWorld.java.orig" />
    <property name="patch.file" value="./etc/HelloWorld.java.patch" />
    <property name="output.file" value="./src/com/sample/HelloWorld.java" />
    <target name="sample.patch">
    	<copy file="${original.file}" tofile="${output.file}" overwrite="true" />
    	<patch patchfile="${patch.file}" originalfile="${output.file}" />
    </target>
</project>


補足 : 差分ファイルについて

差分ファイルとは

 * 差分ファイル(パッチファイル)とは、修正ファイルの変更点(差分情報)のみを抜き出したファイル

差分ファイル作成方法

Linux

diff -u [元ファイル] [変更後ファイル] > [パッチファイル]

[例]
diff -u HelloWorld.java.orig HelloWorld.java > HelloWorld.java.patch

Windows

 * 調べたけど、フリーソフト使ったり、Cygwinでってあったけど、SVNを入れている場合、
   右クリックのメニューから[Unified形式で変更を表示]で出せる

サンプル

元ファイル : HelloWorld.java.orig

package com.sample;

public class HelloWorld {
	public static void main(String[] args) {
		System.out.println("Hello World! Mike!!");
	}
}

変更後ファイル : HelloWorld.java

package com.sample;

public class HelloWorld {
	public static void main(String[] args) {
		System.out.println("Hello World! Tom!!");
	}
}

パッチファイル : HelloWorld.java.patch

--- HelloWorld.java.orig	2015-02-27 00:22:21.207981409 +0900
+++ HelloWorld.java	2015-02-27 00:22:28.991981657 +0900
@@ -2,6 +2,6 @@
 
 public class HelloWorld {
 	public static void main(String[] args) {
-		System.out.println("Hello World! Mike!!");
+		System.out.println("Hello World! Tom!!");
 	}
 }

参考文献

http://qiita.com/tukiyo3/items/86df4992510d2e287ba5