Written by
hoyeonUm
on October 31, 2018
hg before commit
hg before commit hook 을 걸기위해 방법을 찾아보자
.hg/hgrc
[ hooks ]
pretxncommit . psrcheck = php / workspace / psrcheck . php
위와 같이 설정을 해두면 commit을 하기전에 check 를 해줄수있다.
근데 만약 파일이 10000개가 넘으면 개인 커밋인데도 check 하기에 너무 오래걸린다.
그래서 psrcheck.php 에 sleep(1000)
문구를 걸어서 커밋하기전 저장되는장소를 찾아보았다.
.hg/store/journal
해당파일에 commit 될 목록이 표시되고있었다.
vim /workspace/psrcheck.php
$journalPath = 'path/.hg/store/journal' ;
$phpcsPath = 'path/phpcs' ;
$readLine = file_get_contents ( $journalPath );
preg_match_all ( '/\/test.*php/' , $readLine , $target );
if ( empty ( $target [ 0 ])) {
exit ();
}
$target = $target [ 0 ];
array_walk ( $target , function ( & $v ) use ( $workingDir ) {
$v = $workingDir . $v ;
});
$concatTarget = implode ( ' ' , $target );
$command = $phpcsPath . ' -v --standard=PSR2' . $concatTarget ;
exec ( $command , $output );
$buffer = [];
foreach ( $output as $key => $value ) {
preg_match ( "/FILE:.*php$/" , $value , $regex );
if ( count ( $regex ) > 0 ) {
foreach ( $output as $k => $v ) {
if ( $key > $k ) {
continue ;
}
echo $v ;
echo PHP_EOL ;
}
exit ( 1 );
};
}
exit(1) 을 만나면 commit 이 정상처리되지않는다.