概要
ソースコードはファイルやClassごとに編集頻度の濃淡があります。重要な処理はやはり頻度が多くソースコードも肥大化しがち。
一方で、プロジェクト参画時はそういった濃淡が把握できずどこからインプットしたら良いかというのも判然としないことがままあります。
そういうわけで「まあこのへんから見てみたら?」程度にソースコードの重要性を図れる手段を備忘しました。
やったこと
以下の仕様で動作するshellファイルを作成。
- 設置したディレクトリ配下のファイルの中で、gitのMR回数をカウント
- 直近半年カウント
- 上位20件を表示
ソースコード
#!/bin/bash
# 直近半年間のマージコミットIDを取得
merge_commits=$(git log --merges --since="6 months ago" --pretty=format:"%H")
# ファイルの変更回数をカウントする連想配列を宣言
declare -A file_count
# 各マージコミットに対して実行
for commit in $merge_commits
do
# マージコミットの親コミットIDを取得
parent_commit=$(git log --pretty=format:"%P" -n 1 $commit)
# マージコミットと親コミット間の差分を取得
diff_files=$(git diff --name-only $parent_commit $commit)
# 差分に含まれるファイルをカウント
for file in $diff_files
do
file_count[$file]=$((file_count[$file] + 1))
done
done
# カウント結果を表示
for file in "${!file_count[@]}"
do
echo "${file_count[$file]} $file"
done | sort -rn | head -20
おわり
担当者ごとのMR頻度とかを定期計測できるようにしたら生産性可視化までいけそうなのでどっかでやります。