#!/usr/local/apache2/php/bin/php
<?php

// klasa przetwarzajca opcje z wiersza polece
require_once('includes/classes/Cli/Options.php');

// cieka do lokalnego pliku wykonywalnego svnlook
define('SVNLOOK', '/usr/local/bin/svnlook');

// cieka do lokalnego skryptu-zaczepu PHP_CodeSniffer
define('PHPCSPC', '/usr/local/apache2/php/bin/scripts/phpcs-svn-pre-commit');

// pobiera referencj obiektu i przetwarza biece polecenie z wiersza polece
$options = Cli_Options::getInstance();

// sprawdza, czy podano dwa wymagane argumenty
if (count($options->getArguments()) < 2) {
    fwrite(STDERR, "Bd: " . $options->getScriptName() . " wymaga dwch parametrw.");
    exit(1);
}

// pobiera repozytorium i transakcj przesan
// z Subversion jako argumenty w wierszu polece
list($repos, $txn) = $options->getArguments();

// pobiera ostatni komunikat z dziennika
exec(SVNLOOK . " log -t '$txn' '$repos'", $svnlookOutput);

if (is_array($svnlookOutput)) {
    $svnlookOutput = trim(implode("\n", $svnlookOutput));
}

// sprawdza, czy komunikat nie jest pusty
if (empty($svnlookOutput)) {
    fwrite(STDERR, "Bd: wymagany jest komunikat.");
    exit(1);
}

// sprawdza, czy PHP_CodeSniffer zatwierdza nasz kod
exec(PHPCSPC . " --standard=Zend --tab-width=4 '$repos' -t '$txn'", $phpcsOutput, $phpcsReturnValue);

if (is_array($phpcsOutput)) {
    $phpcsOutput = trim(implode("\n", $phpcsOutput));
}

// czy PHP_CodeSniffer zwrci bd?
if ($phpcsReturnValue == 1) {
    fwrite(STDERR, "phpcsOutput: $phpcsOutput");
    exit(1);
}

// wszystko poszo dobrze
exit(0);

?>