ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

インデントされただけの修正を、どうソースレビューするのか(良い解決策求む)→解決

元のソース

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

修正後のソース

public class test {
	public static void main(String[] args) {
		for(int i=0; i<5; i++) {
			System.out.println("Hello, World!");
		}
	}
}

svn diffを取ってみると

>svn diff test.java
Index: test.java
===================================================================
--- test.java   (revision 1)
+++ test.java   (working copy)
@@ -1,5 +1,7 @@
 public class test {
        public static void main(String[] args) {
-               System.out.println("Hello, World!");
+               for(int i=0; i<5; i++) {
+                       System.out.println("Hello, World!");
+               }
        }
 }
\ No newline at end of file

>

Tortoise SVNでdiffを取ったところ


何が言いたいかというと

System.out.println("Hello, World!");
の行は、インデントされただけなのですが、
diffは、行の追加&削除で出てきます。


上のケースは一行だけだから、
目で見れば、インデントされただけで、余計な修正が入っていない
というのは分かるのですが、これが数十行に渡った場合、
目で見ただけでは、インデントされただけなのか、
あるいは、なにか余計な修正が入ってしまっているのか、
すぐには判断できません。


こういう場合、みなさんどうやってレビュー(というか比較)するのでしょうね。

一応の解決策

手間はかかりますが、
それぞれの部分をコピペして、インデントを調整した上で、
それぞれ新しいファイルに保存し、
そのファイル同士を比較するという方法がありますが、
非常にめんどくさいです。
(でも、あんまり信用できないプログラマのソースを見るときは、そうしてました)


他に何か良い方法ないですかね。

空白を無視して比較

@sakuroさん

@senzogawaさん

>svn diff -x -b test.java
Index: test.java
===================================================================
--- test.java   (リビジョン 5)
+++ test.java   (作業コピー)
@@ -1,6 +1,8 @@

 public class test {
        public static void main(String[] args) {
+               for(int i=0; i<5; i++) {
                System.out.println("Hello, World!");
        }
+       }
 }

>

for文のところだけ差分として検出されてますね。
ただ、本来空白の差分として検出すべきもの(あるかどうかはさておき)も、
除外されてしまうというデメリットはあります。

Eclipseで比較

@bluerabbit777jpさん


追加したfor文と、文字列の最後に追加した!がグレー表示になっていて、
System.out.println("Hello, Worldは白のままです。
この差分ツールは優秀ですね!