7 * #repo/hooks/post-receive
8 * /usr/bin/php {PATH TO APPLICATION}/index.php Hook/git post >> /tmp/githooklog
16 /* For licensing and copyright terms, see the file named LICENSE */
19 // git-commit-hook what [mtrackconfig] > /tmp/gitlog
20 // the cwd is the repo path
21 // a list of "oldrev newrev refname" lines is presented to us on stdin
24 require_once 'MTrackWeb.php';
26 class MTrackWeb_Hook_git extends MTrackWeb
29 static $cli_desc = "Commit hook for git - see source for usage";
33 if (!HTML_FlexyFramework::get()->cli) {
45 $repo = DB_DataObject::factory('mtrack_repos');
46 $repo->repopath = getcwd();
47 if (!$repo->find(true)) {
48 $this->addEvent("HOOKERROR", false, "invalid repo:". getcwd() );
49 die("INVALID REPO" . getcwd() );
53 require_once 'MTrack/SCM/Git/CommitHookBridge.php';
55 $bridge = new MTrack_SCM_Git_CommitHookBridge($repo);
57 // for POST commit, we can use bridge->commits[0] to determine who..
58 $revs = $repo->history('.',1,'rev', $bridge->commits[0]);
62 $who = $revs[0]->changebyToEmail();
64 $this->authUser = DB_DataObject::factory('Person');
65 $this->authUser->get('email', $who);
67 $cfg = HTML_FlexyFramework::get()->MTrackWeb;
71 require_once 'MTrack/CommitChecker.php';
74 $checker = new MTrack_CommitChecker( array(
76 'checks' => $cfg['checks'],
77 'authUser' => $this->authUser,
84 $checker->preCommit($bridge);
88 $checker->postCommit($bridge);
90 // at this point we have
91 // checker->no_ticket (contains commits without tickets
93 foreach($checker->no_ticket as $change_event) {
94 $cg = DB_DataObject::factory('mtrack_change');
95 $cg->createFromCommit($change_event, $checker);
107 } catch (Exception $e) {
109 fwrite(STDERR, "\n" . $e->getMessage() .
111 $e->getTraceAsString() .
112 "\n\n ** Commit failed [$action]\n");