2009年10月20日 星期二

git 的 hooks

由於公司內部一些東西改用 git 做版本控制, 所以現在用 git 的頻率還頗高的,

大家共用一個 codebase 最大的缺點, 就是有人可能搞爛東西, 然後大家還不知道,

為了預防這種事情發生, 大部分的 scm 都會有所謂的 hook, 可以在一些事情被執行前後, 做點檢查之類的事情.

我是直接拿 git pre-commit 這個 hook, 檢查更新過的 php 的 syntax, 如果有問題直接就不給 commit,

至於 bug, 當然是沒辦法檢查出來的.

下面是 code, 存成 .git/hooks/pre-install, chmod u+x 一下就可以用了,

不過比較好奇的是一般自己架設的 git server, 是可以自己處理 server side hooks, 但是 github 看起來並沒有這種機制.


#!/usr/bin/env php
exec( "git diff --numstat", $output );
$fa = array();
foreach( $output as $o ) {
$f = explode( "\t", $o );
$p = pathinfo( $f[2] );
if( $p['extension'] == 'php' )
$fa[] = $f[2];
}

foreach( $fa as $f ) {
system( "php -l $f", $result );
if( $result != 0 ) {
$flag = true;
break;
}
}
if ($flag) exit( 1 );
?>


沒有留言: