> /tmp/githooklog * * * * * to run this on old commits: * git rev-list --since="last month" --pretty=format:"%H %P" refs/heads/master \ | grep -v commit \ | awk -v q='"' '{ print "echo " q $NF " " $1 " refs/heads/master" q " | /usr/bin/php /home/gitlive/web.mtrack/roo.php Hook/git post " } ' \ | sh * * */ /* For licensing and copyright terms, see the file named LICENSE */ // called as: // git-commit-hook what [mtrackconfig] > /tmp/gitlog // the cwd is the repo path // a list of "oldrev newrev refname" lines is presented to us on stdin require_once 'MTrackWeb.php'; class MTrackWeb_Hook_git extends MTrackWeb { static $cli_desc = "Commit hook for git - see source for usage"; function getAuth() { if (!HTML_FlexyFramework::get()->cli) { die("NOT CLI!"); } } function get($action) { try { $repo = DB_DataObject::factory('mtrack_repos'); $repo->repopath = getcwd(); if (!$repo->find(true)) { $this->addEvent("HOOKERROR", false, "invalid repo:". getcwd() ); die("INVALID REPO" . getcwd() ); } echo "running hook"; require_once 'MTrack/SCM/Git/CommitHookBridge.php'; $bridge = new MTrack_SCM_Git_CommitHookBridge($repo); // for POST commit, we can use bridge->commits[0] to determine who.. $revs = $repo->history('.',1,'rev', $bridge->commits[0]); //print_R($revs); $who = $revs[0]->changebyToEmail(); $this->authUser = DB_DataObject::factory('core_person'); $this->authUser->get('email', $who); $cfg = HTML_FlexyFramework::get()->MTrackWeb; //print_R($cfg); require_once 'MTrack/CommitChecker.php'; $checker = new MTrack_CommitChecker( array( 'repo' => $repo, 'checks' => $cfg['checks'], 'authUser' => $this->authUser, )); switch ($action) { case 'pre': $checker->preCommit($bridge); break; default: $checker->postCommit($bridge); // at this point we have // checker->no_ticket (contains commits without tickets // print_r($checker);exit; //DB_DataObject::DebugLevel(1); foreach($checker->no_ticket as $change_event) { $cg = DB_DataObject::factory('mtrack_change'); $res= $cg->createFromCommit($change_event, $checker); if (!$res) { echo "Skip - commit already exists\n"; } } foreach($checker->deferred as $ticket=> $info) { foreach($info['changes'] as $ev) { $cg = DB_DataObject::factory('mtrack_change'); $res= $cg->createFromCommit($ev, $checker, $info['ticket']); if (!$res) { echo "Skip - commit already exists\n"; } } } //print_r($checker); } //_log("SUCCESS"); exit(0); } catch (Exception $e) { fwrite(STDERR, "\n" . $e->getMessage() . "\n\n" . $e->getTraceAsString() . "\n\n ** Commit failed [$action]\n"); exit(1); } } }