public function assertCommitMessageIsValid(Project $project, $commit_message) { if ($project->isSVNMandatoryRef()) { // Marvelous, extractCrossRef depends on globals group_id to find the group // when it's not explicit... yeah! $GLOBALS['group_id'] = $project->getID(); if (!$this->reference_manager->stringContainsReferences($commit_message, $project)) { throw new Exception('Commit message must contains a reference'); } } }
<?php /** * PHP file called by the pre-commit hook */ try { include_once "pre.php"; include_once "common/reference/ReferenceManager.class.php"; $repository = $argv[1]; // retrieve the group name from repository $unix_group_name = substr($repository, strlen($GLOBALS['svn_prefix']) + 1); $group_id = group_getid_by_name($unix_group_name); $project = new Project($group_id); if ($project->isSVNMandatoryRef()) { $ref_manager = ReferenceManager::instance(); // open the standard error output $stderr = fopen('php://stderr', 'w'); $txn = $argv[2]; $logmsg = array(); exec("/usr/bin/svnlook log -t '{$txn}' '{$repository}'", $logmsg); $logmsg = implode("\n", $logmsg); $references_array = array(); $references_array = $ref_manager->extractReferences($logmsg, $project->getId()); if (sizeof($references_array) < 1) { // No reference has been found: commit is rejected fwrite($stderr, "\nYou must make at least one reference in the commit message.\n" . $unix_group_name); fclose($stderr); exit(1); } fclose($stderr); }
public function svn_mandatory_ref() { return $this->project->isSVNMandatoryRef(); }