ソースの差分行数


アニメ『TO BE HERO』
娘と二人暮らしの女癖の悪いイケメンパパは、トイレに吸い込まれてスーパーヒーローに。しかし、その容姿はメタボなおっさんに。自分の父親と認識していない娘から、家を追い出されます。そして、地球にエイリアンが! ギャグが基本なのだけど、エンディングの歌でぱぱぱぱI love youと言ってるので、父娘の愛情の感動もあるアニメかなあ、と勝手に想像しています。
メタボはダイエットしなければなりませんね。やはりヒーローはかっこ良くないと。プログラムにもダイエットが必要な時がありますが、ただ減らすのではなくて、質(可読性)も大事なので、一気に痩せることは難しいです。人と一緒ですね。
今回はソースの変更量を行数で計ってみます。今時ステップ数算出なんて意味のないものかもしれませんが、どれだけ減ったか、を確認して自己満足するすると、結構モチベーションアップになります。

変更箇所の行数の算出は、diffを使いますが、元のソースは、bread.shを使うことにします。

~$ git clone http://github.com/takkete/bread.git
~$ cd bread

最新コミットと一つ前を比較したいので、@^を指定してソースを落とします。

~$ git show @^:bread.sh > a

適当な名前でaとしました。

diffを取ります。
-yオプションを使えば左右に並べてdiff表示することができますが、-Wで幅も指定できます。

~$ diff -y -W80 a bread.sh 
a=`perl -e '				a=`perl -e '

use Math::Trig;				use Math::Trig;
@colors=("black","brown","red","orang	@colors=("black","brown","red","orang

$xx_offset=300;			      |	my ($bread_ww,$bread_hh) = get_board_
				      >	$bread_hh +=30;
				      >

(省略)

				      >			my $h = 18;
		$xx = $x * $w + 15 + 			$xx = $x * $w + 15 + 
		$y = 0 if($y >= 25);			$y = 0 if($y >= 25);
		$yy = $y * 20 + 35 +  |			$yy = $y * $h + 35 + 
	}elsif($x < 20){			}elsif($x < 20){
		my $w = 19;				my $w = 19;
				      >			my $h = 18;
		$xx = $x * $w + 10 + 			$xx = $x * $w + 10 + 
		$yy = $y * 20 + 30 +  |			$yy = $y * $h + 30 + 
	}else{					}else{
		my $w = 20;				my $w = 20;
		$xx = ($x-20) * $w +  |			$xx = ($x-20) * $w + 
		$yy = $y   * 20 + 60; |			$yy = $y   * 20 + 60 
	}					}
	return ($xx,$yy);			return ($xx,$yy);

(省略)

-Wで幅を1で指定すると、変更種別のみが残ります。

~$ diff -y -W1 a bread.sh | leafpad
(省略)
|
>
>
>
 
 
|
(省略)

これをカウントすることで各差分の行数がカウントできます。

~$ diff -y -W1 a bread.sh | sort | uniq -c
     26 
    155  
     27 <
     57 >
     31 |
~$ 

<は、削除された行数 >は、追加された行数
|は、変更された行数です。

Leave a Reply

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

CAPTCHA