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 이 정상처리되지않는다.