7 * #repo/hooks/post-receive
8 * /usr/bin/php {PATH TO APPLICATION}/index.php Hook/git post >> /tmp/githooklog
13 * to run this on old commits:
16 git rev-list --since="last month" --pretty=format:"%H %P" refs/heads/master \
18 | awk -v q='"' '{ print "echo " q $NF " " $1 " refs/heads/master" q " | /usr/bin/php /home/gitlive/web.mtrack/roo.php Hook/git post " } ' \
28 /* For licensing and copyright terms, see the file named LICENSE */
31 // git-commit-hook what [mtrackconfig] > /tmp/gitlog
32 // the cwd is the repo path
33 // a list of "oldrev newrev refname" lines is presented to us on stdin
36 require_once 'MTrackWeb.php';
38 class MTrackWeb_Hook_git extends MTrackWeb
41 static $cli_desc = "Commit hook for git - see source for usage";
46 if (!HTML_FlexyFramework::get()->cli) {
55 function get($action='')
58 $repo = DB_DataObject::factory('mtrack_repos');
59 $repo->repopath = getcwd();
60 if (!$repo->find(true)) {
61 $this->addEvent("HOOKERROR", false, "invalid repo:". getcwd() );
62 die("INVALID REPO" . getcwd() );
66 require_once 'MTrack/SCM/Git/CommitHookBridge.php';
68 $bridge = new MTrack_SCM_Git_CommitHookBridge($repo);
70 // for POST commit, we can use bridge->commits[0] to determine who..
71 $revs = $repo->history('.',1,'rev', $bridge->commits[0]);
75 $who = $revs[0]->changebyToEmail();
77 $this->authUser = DB_DataObject::factory('core_person');
78 $this->authUser->get('email', $who);
80 $cfg = HTML_FlexyFramework::get()->MTrackWeb;
84 require_once 'MTrack/CommitChecker.php';
87 $checker = new MTrack_CommitChecker( array(
89 'checks' => $cfg['checks'],
90 'authUser' => $this->authUser,
96 $checker->preCommit($bridge);
100 $checker->postCommit($bridge);
102 // at this point we have
103 // checker->no_ticket (contains commits without tickets
104 // print_r($checker);exit;
106 //DB_DataObject::DebugLevel(1);
107 foreach($checker->no_ticket as $change_event) {
108 $cg = DB_DataObject::factory('mtrack_change');
109 $res= $cg->createFromCommit($change_event, $checker);
111 echo "Skip - commit already exists\n";
115 // in our system this happens when we merge normally.
116 foreach($checker->deferred as $ticket=> $info) {
117 foreach($info['changes'] as $ev) {
118 $cg = DB_DataObject::factory('mtrack_change');
119 $res= $cg->createFromCommit($ev, $checker, $info['ticket']);
121 echo "Skip - commit already exists\n";
136 } catch (Exception $e) {
138 fwrite(STDERR, "\n" . $e->getMessage() .
140 $e->getTraceAsString() .
141 "\n\n ** Commit failed [$action]\n");