2 /* commitdiff.class.php - phpgitweb
3 * Copyright (C) 2011-2012 Philipp Kreil (pk910)
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 class page_commitdiff {
20 private $page, $phpgitweb;
22 public function main($phpgitweb, $project) {
23 $this->phpgitweb = $phpgitweb;
25 return new ContentProvider('main', 'err400');
26 $project['refs'] = $phpgitweb->get_project_loader()->getProjectRefs($project);
27 $phpgitweb->append_header_nav("commit", null, true);
28 $phpgitweb->append_title("commit");
29 CommitLoader::parse();
31 $commit_loader = new CommitLoader($project);
32 $commit = $commit_loader->load();
34 return new ContentProvider('main', 'err404_object');
36 ContentProvider::overall_set('project_head', $commit['id']);
39 $this->page = new ContentProvider('commitdiff', 'main');
40 $this->page->set('hash', $commit['id']);
41 $this->page->set('author', htmlentities($commit['author']));
42 $this->page->set('author_mail', htmlentities($commit['author_mail']));
43 $this->page->set('author_date', gmdate('r', $commit['author_time']));
44 $author_local_time = $commit['author_time'] + Tools::parseTimeZone($commit['author_timezone']);
45 if(gmdate('H', $author_local_time) < 6)
46 $this->page->set('author_local_date', '<span class="atnight">'.gmdate('H:i', $author_local_time).'</span>');
48 $this->page->set('author_local_date', gmdate('H:i', $author_local_time));
49 $this->page->set('author_timezone', $commit['author_timezone']);
50 $this->page->set('committer', htmlentities($commit['committer']));
51 $this->page->set('committer_mail', htmlentities($commit['committer_mail']));
52 $this->page->set('committer_date', gmdate('r', $commit['committer_time']));
53 $committer_local_time = $commit['committer_time'] + Tools::parseTimeZone($commit['committer_timezone']);
54 if(gmdate('H', $committer_local_time) < 6)
55 $this->page->set('committer_local_date', '<span class="atnight">'.gmdate('H:i', $committer_local_time).'</span>');
57 $this->page->set('committer_local_date', gmdate('H:i', $committer_local_time));
58 $this->page->set('committer_timezone', $commit['committer_timezone']);
59 $this->page->set('message', htmlentities(Tools::chop_text($commit['text'], 80, 5)));
62 $refs = new ContentProvider('commit', 'commit_refs');
64 foreach($project['refs'] as $ref => $rhash) {
65 if(strtolower($rhash) == strtolower($commit['id'])) {
66 $refexp = explode('/', $ref, 3);
67 $reftype = $refexp[1];
68 if($reftype == 'heads')
70 else if($reftype == 'remotes')
72 else if($reftype == 'tags')
74 $refs->append('refs', new ContentProvider('commit', 'commit_ref_'.$reftype, array("name" => $refexp[2], "ref_link" => $ref)));
78 $this->page->set('refs', ($found ? $refs : ""));
80 $difftree = new difftree();
81 $diff_data = GitCommand::get_commit_diff($project['path'], $commit['id'], $commit['parent']);
82 $difftree->push_difftree_data($diff_data['tree']);
83 $this->page->set('difftree', $difftree->generate_difftree($project, $commit, true));