pre-commitで`php -l`をする
commit前にlintを動かしたいと思ったので、その設定方法を調べた。php -l
とphp --syntax-check
は同じ。
git管理ディレクトリである.gitの中にあるhooksディレクトリにサンプルがあるので、それを参考にして以下のようなファイルを作成した。
#!/bin/sh # 変更/追加したファイルの一覧を取得する files=$(git diff --cached --name-only --diff-filter=AM) # 取得したファイル一覧をリストとしてphpのlintを実行する php_extension=php end_flag=0 for file in $files; do extension=${file##*.} # 拡張子(.を除く)を取り出すために前方最長一致で変数展開する if [ ${extension} = ${php_extension} ]; then # 拡張子がphpの時のみ構文チェックを行う php --syntax-check $file command_result=${?} # $?は別のコマンドを実行すると置き換わるので変数に格納して繰り返し参照できるようにする if [ ${command_result} != 0 ]; then if [ ${end_flag} = 0 ]; then end_flag=${command_result} fi fi fi done if [ ${end_flag} = 0 ]; then echo 'syntax ok' exit 0 else echo 'syntax error. commit abort' exit 1 fi
これを.git/hooks/pre-commit
として保存すれば、commit前にこのスクリプトが実行される。
注意として、このスクリプト自体をgitで管理することはできない。そのため、他の開発者にも使用してもらいたい場合は別のディレクトリで管理しておいてそちらを参照する設定にするか、開発環境をセットアップする際にhooksへコピーするようなスクリプトを別途用意しておかなければならない。
それとエラーが起きたファイルを修正したらgit add
を忘れないように。stagingされていないので、他のファイルだけcommitされてしまう。