gitで管理してるリポジトリのコード行数とか色々集計したくなった。
コミットの追加行数とか修正行数は見ればわかるんだけど、
色々集計しようとしたりすると、gitのみだと割と使えない。
なのでclocっていうツールを使ってやる。
って話が割と見るんだけど、結構大変だったのと、clocってgitのリポジトリ集計するとき
だいぶイケてないように思うのでちょっと書いておく。
あ、Windowsでやります。
まず、インストール。現状の最新は1.82。
で、ググって出てくるサイトが最初はコッチの
古い方のサイトなので、注意。GitHubのreleaseから取る。
DLしてとりあえず動かそうとすると「unzipが無い」みたいなエラーが出る。
なので、unzipをDL。
この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
変更されたファイルのみやりたい場合は、なんかスクリプト組むか
プログラム作るしかなさそうですね。。。