本ハンズオンにおける差分情報

本ハンズオンでは差分情報として「Side-by-side diffs」と「Unified diffs」を用意しています。

   ・Side-by-side diffs    変更前後のファイルを左右に並べて比較しているものです。表示には GoogleCode を利用しています。
   ・Unified diffs    変更箇所を示すdiff ファイルです。diff ファイルの作成には WinMerge を使用しており、出力形式は「コンテキスト3行のユニファイド形式」です。

以下に例を示します。また、diff - Wikipedia にも説明がありますのでそちらもご確認いただければと思います。

PtBrush.java というソースファイルにコードの「修正」(コードの一部を削除し、代わりのものに書き換えること)を施し、PtEraser.java というソースファイルにコードの「追加」(既存のコードはそのままで、新たにコードを追加すること)を施した場合を例に挙げて説明します。

Side-by-side diffs (変更前後の比較)

「Side-by-side diffs」は、変更前後のファイルを左右に並べて変更箇所を視覚的に表示するものです。
左側に変更前、右側に変更後のファイルの内容が表示されます。また、削除行が赤色追加行が緑色で表示されます(GoogleCode 上の Side-by-side diffs の場合)。


PtBrush.java の Side-by-side diffs の一部抜粋 (クリックで拡大表示)


PtEraser.java の Side-by-side diffs の一部抜粋 (クリックで拡大表示)

Unified diffs (パッチファイル)

上記のようなファイルの変更は、「diff」と呼ばれるファイル(削除行と挿入行と、それら前後の非変更行が記述されているファイル)にまとめることができます。diff は、patch プログラムの入力としても利用されることから、「パッチ(patch)ファイル」とも呼ばれます。diff にはコンテキスト形式やユニファイド形式などのフォーマットがありますが、本ハンズオンではユニファイド形式を使用しています。

上記の Side-by-side diffs に対応する diff を以下に示します。

--- PtBrush.java	Mon Jun 01 05:12:13 2009
+++ PtBrush.java	Sun Jun 14 09:15:32 2009
@@ -103,7 +103,7 @@
 	// --------------------------------------------------
 	public void Paint(Point2D.Double p1, Point2D.Double p2, Graphics2D g2d, BufferedImage img) {
 		// ペン色を設定
-		g2d.setPaint(penColor);
+		g2d.setPaint(mainPenColor);
 
 		// 丸ブラシの場合は、ペンサイズと領域を設定後、押印と補完により、円を描写する
 		if (brushState == OPTION_00 || brushState == OPTION_01) {
--- PtEraser.java	Mon Jun 01 05:12:12 2009
+++ PtEraser.java	Sun Jun 14 11:03:30 2009
@@ -8,10 +8,12 @@
 import java.awt.Color;
 import java.awt.Dimension;
 import java.awt.Graphics2D;
+import java.awt.geom.Line2D;
 import java.awt.geom.Point2D;
 import java.awt.geom.Rectangle2D;
 import java.awt.image.BufferedImage;
 import javax.swing.BorderFactory;
+import javax.swing.JCheckBox;
 import javax.swing.JPanel;
 import javax.swing.JButton;
 import javax.swing.ImageIcon;
@@ -23,6 +25,9 @@
 	// 矩形
 	Rectangle2D.Double rect = new Rectangle2D.Double();
 
+	// 直線
+	Line2D.Double line = new Line2D.Double();
+
 	// オプション状態番号
 
 	private static final int OPTION_1 = 0;

Unified diffsの表記に関する説明を以下に示します。

表記 説明
--- o_filePath o_updateTime という行 元ファイルに関するファイルパス(o_filePath)と更新日時(o_updateTime)です。
+++ n_filePath n_updateTime という行 新ファイルに関するファイルパス(n_filePath)と更新日時(n_updateTime)です。
@@ -o_l,o_s +n_l,n_s @@ という行 元ファイルの変更範囲は「o_l」行目から「o_s」行分であり、それに対する新ファイルの対応箇所は「n_l」行目から「n_s」行分であるという意味です。この変更範囲にはコンテキスト部分(非変更行)も含まれます。
- から始まる行 削除された行を示します。
+ から始まる行 挿入された行を示します。
  から始まる行(半角スペースから始まる行) 非変更行を示します。変更箇所の周辺のコードでもあるためコンテキスト行とも呼ばれます。