caseも表示したい(svn)

関数が長い時は、svn diffしても、変更箇所周辺の表示が、関数名がわかる関数の始まりまで届きません。

takk@deb8:~/a/work$ svn diff -rPREV
Index: func_01.c
===================================================================
--- func_01.c	(リビジョン 12)
+++ func_01.c	(作業コピー)
@@ -18,7 +18,7 @@
   comment
   comment
 */
-    func_014();
+    func_015();
     break;
   default:
   }
@@ -56,13 +56,13 @@
   comment
   comment
 */
-    func_017();
+    func_018();
     break;
   case 1:
     break;
-  case 1:
+  case 2:
     break;
-  case 1:
+  case 3:
     break;
   }
 }

そんな時は、-x -pオプションを使います。 これで差分のある関数名がわかります。

takk@deb8:~/a/work$ svn diff -x -p -rPREV
Index: func_01.c
===================================================================
--- func_01.c	(リビジョン 12)
+++ func_01.c	(作業コピー)
@@ -18,7 +18,7 @@ void func_011(void)
   comment
   comment
 */
-    func_014();
+    func_015();
     break;
   default:
   }
@@ -56,13 +56,13 @@ void func_016(void)
   comment
   comment
 */
-    func_017();
+    func_018();
     break;
   case 1:
     break;
-  case 1:
+  case 2:
     break;
-  case 1:
+  case 3:
     break;
   }
 }

では、switch〜case文のどのcaseが変更になったかも、知りたいときはどうしましょう。
関数名と、caseの両方を行うには、やはり外部diffでしょうか。

takk@deb8:~/a/work$ svn diff -rPREV --diff-cmd /usr/bin/diff -x "-y -W80" | tac | perl -ne 'if(/      [\|><]/){print;$f=1} if($f==1){ print if/case/;if(/^\w/){print;$f=0}}' | tac
void func_011(void)			void func_011(void)
  case 0:				  case 0:
  case 1:				  case 1:
  case 2:				  case 2:
    func_014();			      |	    func_015();
void func_016(void)			void func_016(void)
  case 0:				  case 0:
    func_017();			      |	    func_018();
  case 1:				  case 1:
  case 1:			      |	  case 2:
  case 1:			      |	  case 2:
  case 1:			      |	  case 3:
  case 1:			      |	  case 3:
takk@deb8:~/a/work$ 

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA