お世話になっております。
しゃまとんです。
gitでプロジェクトやコードを管理する場合、commit時にhookをいれて変なcommitが混ざらないようにすることができます。pre-commit-hookという機能なのですが、phpに関しての設定記事はよく見るのですが、goでもやりたいなーということで考えてみました。
やはりやりたいのはコードのビルドが通るかなので、、コンパイルチェック的なものをしたいのですが、そういうのはスクリプト言語のチェック機構なので普通にビルドして確認することにしてみます。(phpならphp -l、perlならperl -cでしょうか)
下記がチェックスクリプトです。
通常のビルドをしているのですが、問題なく成功したときに実行ファイルができてしまうので、削除処理をしてから最後の手続きをしています。
{リポジトリトップ}/.git/hooks/pre-commitあたりに記載するとcommit時に実行してくれます。(今回はtouch pre-commitで作成しました)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#!/bin/sh HAS_ERROR=0 TMP="___build_check" # go file num NUM=`git diff --cached --name-status | cut -f2 | grep '.go$' | wc -l` # build check if [ ${NUM} -ne 0 ]; then echo "build checking..." for f in `git diff --cached --name-status | cut -f2 | grep '.go$'`; do if ! go build -o ${TMP} ${f}; then HAS_ERROR=1 fi done fi # delete test build file if [ -e ${TMP} ]; then rm ${TMP} fi # has error? if [ ${HAS_ERROR} -ne 0 ]; then echo "build error found!!" exit 1 fi # 正常終了 exit 0 |
実行するとこんな感じ。(わかりづらいですが…)
1 2 3 4 5 |
$ git commit build checking... # abortしました Aborting commit due to empty commit message. |
今回の場合はコミット対象のものを単一ファイルでビルドチェックをしていくのですが、記載をかえれば大きなアプリケーションにもチェックを入れられると思います。
以上です。
■参考
gitのpre-commit hookを使って、綺麗なPHPファイルしかコミットできないようにする
かゆいところに手が届くgitフックスクリプト(クライアントサイド編)