X-Git-Url: http://git.pk910.de/?p=phpgitweb.git;a=blobdiff_plain;f=htdocs%2Fpages%2Fshortlog.class.php;h=091e1d1140c2829766f7c2c85c4fa3044a9e2b8e;hp=a7293c80c5c2444197beb3c4648b125f0c14c417;hb=a2a32a9c8fe1f0f5f378ed53090dc5f957c092af;hpb=0a6d29345b57ef71b076003e18d13efd3478764c diff --git a/htdocs/pages/shortlog.class.php b/htdocs/pages/shortlog.class.php index a7293c8..091e1d1 100644 --- a/htdocs/pages/shortlog.class.php +++ b/htdocs/pages/shortlog.class.php @@ -21,34 +21,59 @@ require_once('lib/graph.class.php'); 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; + if($head && strtolower($head) == 'all') + $head = null; $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 + $rhash = GitCommand::get_hash($project['path'], "HEAD"); + if($rhash) + $this->graph_data->add_branch($rhash, null); + + 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) + 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 @@ -60,6 +85,14 @@ class shortlog { 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); @@ -77,19 +110,20 @@ class shortlog { $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]; @@ -116,21 +150,49 @@ class page_shortlog { $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"); + CommitLoader::parse(true); + $this->page = new ContentProvider('shortlog', 'main'); + if(strtolower(CommitLoader::$commit_base_id) != 'all') { + $this->page->set('refname', ' - '.CommitLoader::$commit_base_id); + } else + $this->page->set('refname', ''); //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)); + $this->page->set('shortlog', $shortlog->generate_shortlog($project, CommitLoader::$commit_base_id, 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; }