gitで管理してるリポジトリのコード行数とか色々集計したくなった。

コミットの追加行数とか修正行数は見ればわかるんだけど、

色々集計しようとしたりすると、gitのみだと割と使えない。

なのでclocっていうツールを使ってやる。

って話が割と見るんだけど、結構大変だったのと、clocってgitのリポジトリ集計するとき

だいぶイケてないように思うのでちょっと書いておく。

あ、Windowsでやります。

まず、インストール。現状の最新は1.82。

clocのgithubから

で、ググって出てくるサイトが最初はコッチ

古い方のサイトなので、注意。GitHubのreleaseから取る。

DLしてとりあえず動かそうとすると「unzipが無い」みたいなエラーが出る。

なので、unzipをDL。

unzipの公式

このunzipのインストールが必要ってclocの公式に書いて無いような気がするんだけども。。。

で、clocとunzipともpathを通しておかないとまずいっぽいので、path通す。

そしたら、対象のリポジトリのディレクトリに行って下の感じ。

git rev-list --max-parents=0 HEAD
>> ae5d586ed47385ded893d95c3ac66724e41259c4

cloc --diff ae5d586ed47385ded893d95c3ac66724e41259c4 HEAD

これで集計はされるんですが、割と↓のエラーが出るんでないかと。

fatal: pathspec ''Program.cs'' did not match any files
Failed to create tarfile of files from git. at script/cloc line 4584.

何でこれが出るのか全然分からなくて、ソース見てみたんですが、

gitのリポジトリからやる場合、下記の流れてやってるっぽい。

それぞれのハッシュから変更のあったファイル名を

git ls-tree --name-only

で持ってきて、

git archive

にファイルの一覧を渡してZIPなんかにして、

そのZIPファイルをclocで集計するみたいな動きになってる。

で、どうも比較するハッシュのどっちかに無いファイルがあると、

archiveが失敗してるって事みたい。

ダメじゃん。。。

cloc自体、スター結構ついてるし使ってる人いっぱいいると思うのですが、

どうみてもコレ出来ないんですよ。

どーなんだろ、みんな困ってないのかしら?

cloc自体、生のファイルかZIPとかのアーカイブからじゃないと集計できないって事なのね。

そしたら、自分でgit の zipアーカイブをいい感じに作るしかないですね。

とりあえず、ブランチ間の差分をとるなら下の感じでやれる。

git archive test --output=test.zip

git archive master --output=master.zip

cloc --diff test.zip master.zip

変更されたファイルのみやりたい場合は、なんかスクリプト組むか

プログラム作るしかなさそうですね。。。