class shortlog {
private $project;
private $graph_data;
+ private $first_commit;
+ private $have_more = false;
public function generate_shortlog($project, $head, $max, $skip, $file = null, $pages = true, $next_page = 0) {
$this->project = $project;
$content = new ContentProvider('shortlog', 'shortlog');
- $commits = GitCommand::get_commits($project['path'], $head, $max+$skip+1, 0, $file);
- $this->graph_data = new graph_data_generator();
- if($head == null) {
- //add all refs to the graph
- foreach($this->project['refs'] as $ref => $rhash) {
- if(preg_match('#^refs/heads/#i', $ref) && preg_match('/^[a-f0-9]*$/i', $rhash)) {
- $this->graph_data->add_branch($rhash, $ref);
+ if(GitConfig::GITGRAPH_ENABLE) {
+ if($max+$skip >= 2000) { //only load the last 2k commits
+ $real_skip = ($max+$skip) - 2000;
+ $skip -= $real_skip;
+ } else
+ $real_skip = 0;
+ } else {
+ $real_skip = $skip;
+ $skip = 0;
+ }
+
+ $commits = GitCommand::get_commits($project['path'], $head, $max+$skip+1, $real_skip, $file);
+
+ if(GitConfig::GITGRAPH_ENABLE) {
+ $this->graph_data = new graph_data_generator();
+ if($head == null) {
+ //add all refs to the graph
+ foreach($this->project['refs'] as $ref => $rhash) {
+ if(preg_match('#^refs/heads/#i', $ref) && preg_match('/^[a-f0-9]*$/i', $rhash)) {
+ $this->graph_data->add_branch($rhash, $ref);
+ }
}
- }
- foreach($this->project['refs'] as $ref => $rhash) {
- if(preg_match('#^refs/remotes/#i', $ref) && preg_match('/^[a-f0-9]*$/i', $rhash)) {
- $this->graph_data->add_branch($rhash, $ref);
+ foreach($this->project['refs'] as $ref => $rhash) {
+ if(preg_match('#^refs/remotes/#i', $ref) && preg_match('/^[a-f0-9]*$/i', $rhash)) {
+ $this->graph_data->add_branch($rhash, $ref);
+ }
}
}
+ $this->graph_data->parse($commits);
+ $content->set('graph_data', $this->graph_data->get_header_graph());
}
- $this->graph_data->parse($commits);
$commit_counter = 0;
+ $this->first_commit = $commits[0];
foreach($commits as $commit) {
$commit_counter++;
if($commit_counter < $skip)
continue;
if($commit_counter > $max+$skip) {
+ $this->have_more = true;
if($pages) {
$content->append('entries', new ContentProvider('shortlog', 'shortlog_page', array("page" => $next_page)));
} else
return $content;
}
+ public function get_first_commit() {
+ return $this->first_commit;
+ }
+
+ public function get_have_more() {
+ return $this->have_more;
+ }
+
private function shortlog_entry($class, $commit) {
$entry = new ContentProvider('shortlog', 'shortlog_entry');
$entry->set('class', $class);
$entry->set('date', $date_str);
$entry->set('age', $age_str);
}
- $entry->set('graph_data', $this->graph_data->get_graph($commit['id']));
+ if(GitConfig::GITGRAPH_ENABLE)
+ $entry->set('graph_data', $this->graph_data->get_graph($commit['id']));
- $entry->set('refs', $this->shortlog_commit_refs($commit['id']));
+ $entry->set('refs', $this->shortlog_commit_refs($this->project, $commit['id']));
return $entry;
}
- private function shortlog_commit_refs($hash) {
- if(!is_array($this->project['refs']))
+ public function shortlog_commit_refs($project, $hash) {
+ if(!is_array($project['refs']))
return "";
$refs = new ContentProvider('shortlog', 'shortlog_refs');
$found = false;
- foreach($this->project['refs'] as $ref => $rhash) {
+ foreach($project['refs'] as $ref => $rhash) {
if(strtolower($rhash) == strtolower($hash)) {
$refexp = explode('/', $ref, 3);
$reftype = $refexp[1];
$this->phpgitweb = $phpgitweb;
$this->project = $project;
if(!$this->project)
- return;
+ return new ContentProvider('main', 'err400');
$project['refs'] = $phpgitweb->get_project_loader()->getProjectRefs($project);
+ $phpgitweb->append_header_nav("shortlog", null, true);
+ $phpgitweb->append_title("shortlog");
+
$this->page = new ContentProvider('shortlog', 'main');
//pages
if(array_key_exists('pg', $_GET)) {
+ $pg = $_GET['pg'];
+ if($pg < 0)
+ $pg = 0;
$skip = $_GET['pg'] * 100;
$next_page = $_GET['pg'] + 1;
} else {
+ $pg = 0;
$skip = 0;
$next_page = 1;
}
+ $subnav = new ContentProvider('shortlog', 'shortlog_subnav');
+ $phpgitweb->append_sub_nav($subnav);
+
+ if($pg) {
+ $subnav->set('first', new ContentProvider('shortlog', 'shortlog_subnav_first_link'));
+ $subnav->set('prev', new ContentProvider('shortlog', 'shortlog_subnav_prev_link', array('page' => ($pg - 1))));
+ } else {
+ $subnav->set('first', new ContentProvider('shortlog', 'shortlog_subnav_first'));
+ $subnav->set('prev', new ContentProvider('shortlog', 'shortlog_subnav_prev'));
+ }
+
$shortlog = new shortlog();
$this->page->set('shortlog', $shortlog->generate_shortlog($project, null, 100, $skip, null, true, $next_page));
+ if($shortlog->get_have_more())
+ $subnav->set('next', new ContentProvider('shortlog', 'shortlog_subnav_next_link', array('page' => ($pg + 1))));
+ else
+ $subnav->set('next', new ContentProvider('shortlog', 'shortlog_subnav_next'));
+
return $this->page;
}