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 require_once("pages/commit.class.php");
21 class page_commitdiff {
22 private $page, $phpgitweb;
24 public function main($phpgitweb, $project) {
25 $this->phpgitweb = $phpgitweb;
27 return new ContentProvider('main', 'err400');
28 $project['refs'] = $phpgitweb->get_project_loader()->getProjectRefs($project);
29 $phpgitweb->append_header_nav("commit", null, true);
30 $phpgitweb->append_title("commit");
31 CommitLoader::parse();
33 $commit_loader = new CommitLoader($project);
34 $commit = $commit_loader->load();
36 return new ContentProvider('main', 'err404_object');
38 ContentProvider::overall_set('project_head', $commit['id']);
41 $this->page = new ContentProvider('commitdiff', 'main');
42 $this->page->set('hash', $commit['id']);
43 $this->page->set('author', htmlentities($commit['author']));
44 $this->page->set('author_mail', htmlentities($commit['author_mail']));
45 $this->page->set('author_date', gmdate('r', $commit['author_time']));
46 $author_local_time = $commit['author_time'] + Tools::parseTimeZone($commit['author_timezone']);
47 if(gmdate('H', $author_local_time) < 6)
48 $this->page->set('author_local_date', '<span class="atnight">'.gmdate('H:i', $author_local_time).'</span>');
50 $this->page->set('author_local_date', gmdate('H:i', $author_local_time));
51 $this->page->set('author_timezone', $commit['author_timezone']);
52 $this->page->set('committer', htmlentities($commit['committer']));
53 $this->page->set('committer_mail', htmlentities($commit['committer_mail']));
54 $this->page->set('committer_date', gmdate('r', $commit['committer_time']));
55 $committer_local_time = $commit['committer_time'] + Tools::parseTimeZone($commit['committer_timezone']);
56 if(gmdate('H', $committer_local_time) < 6)
57 $this->page->set('committer_local_date', '<span class="atnight">'.gmdate('H:i', $committer_local_time).'</span>');
59 $this->page->set('committer_local_date', gmdate('H:i', $committer_local_time));
60 $this->page->set('committer_timezone', $commit['committer_timezone']);
61 $this->page->set('message', htmlentities(Tools::chop_text($commit['text'], 80, 5)));
64 $refs = new ContentProvider('commit', 'commit_refs');
66 foreach($project['refs'] as $ref => $rhash) {
67 if(strtolower($rhash) == strtolower($commit['id'])) {
68 $refexp = explode('/', $ref, 3);
69 $reftype = $refexp[1];
70 if($reftype == 'heads')
72 else if($reftype == 'remotes')
74 else if($reftype == 'tags')
76 $refs->append('refs', new ContentProvider('commit', 'commit_ref_'.$reftype, array("name" => $refexp[2], "ref_link" => $ref)));
80 $this->page->set('refs', ($found ? $refs : ""));
82 $difftree = new difftree();
83 $diff_data = GitCommand::get_commit_diff($project['path'], $commit['id'], $commit['parent']);
84 $difftree->push_difftree_data($diff_data['tree']);
85 $this->page->set('difftree', $difftree->generate_difftree($project, $commit, true));