GitHubのPull Requestで各コミットメッセージの文字数や変更行数を取得する方法を調べたのでまとめておく。
GraphQL APIで取得できたので、雑にcsv形式にして出力した。
stat-commit-messages.sh
set -eu
OWNER=${1:-rails}
NAME=${2:-rails}
NUMBER=${3:-20000}
echo 'author,subject,body,additions,deletions,changes'
gh api graphql -F owner="$OWNER" -F name="$NAME" -F number=$NUMBER -f query='
query($name: String!, $owner: String!, $number: Int!) {
repository(owner: $owner, name: $name) {
pullRequest(number: $number) {
commits(first: 100) {
nodes {
commit {
author { name },
messageHeadline,
messageBody,
additions,
deletions
}
}
}
}
}
}
' --jq '.data.repository.pullRequest.commits.nodes[] | map("\"\(.author.name)\",\(.messageHeadline|length),\(.messageBody|length),\(.additions),\(.deletions),\(.additions + .deletions)") | join("\n")'
実行結果
$ ./stat-commit-messages.sh
author,subject,body,additions,deletions,changes
"Ryuta Kamizono",43,1714,4,4,8
$ ./stat-commit-messages.sh rails rails 46762
author,subject,body,additions,deletions,changes
"David Heinemeier Hansson",24,78,63,0,63
"David Heinemeier Hansson",47,465,105,22,127
"David Heinemeier Hansson",27,0,3,0,3
"David Heinemeier Hansson",35,0,18,4,22
"David Heinemeier Hansson",40,0,7,0,7
"David Heinemeier Hansson",41,0,2,2,4
"David Heinemeier Hansson",3,0,2,0,2
"David Heinemeier Hansson",36,0,9,4,13
"David Heinemeier Hansson",28,0,7,2,9
"David Heinemeier Hansson",9,0,0,2,2
"David Heinemeier Hansson",54,0,1,0,1
"David Heinemeier Hansson",35,0,5,0,5
"David Heinemeier Hansson",31,0,2,1,3
"David Heinemeier Hansson",9,0,18,0,18
"David Heinemeier Hansson",47,0,4,0,4
"David Heinemeier Hansson",13,0,3,0,3
"David Heinemeier Hansson",57,0,7,3,10
"David Heinemeier Hansson",29,0,2,1,3
"David Heinemeier Hansson",40,14,1,4,5
"David Heinemeier Hansson",45,0,2,1,3
"David Heinemeier Hansson",19,0,2,0,2
"David Heinemeier Hansson",13,0,28,0,28
"David Heinemeier Hansson",14,0,5,5,10
実際のGitHubのPull Requestは以下の2つで、取得した値もあってそう。
参考ページ
GraphQLのドキュメント
docs.github.com