diff --git a/module/common/lang/menuOrder.php b/module/common/lang/menuOrder.php index 0f4795e6a6..f70998035e 100644 --- a/module/common/lang/menuOrder.php +++ b/module/common/lang/menuOrder.php @@ -77,8 +77,8 @@ $lang->testsuite->menuOrder = $lang->testcase->menuOrder; $lang->caselib->menuOrder = $lang->testcase->menuOrder; $lang->testreport->menuOrder = $lang->testcase->menuOrder; -$lang->ci->menuOrder[5] = 'browse'; -$lang->ci->menuOrder[10] = 'job'; +$lang->ci->menuOrder[5] = 'code'; +$lang->ci->menuOrder[10] = 'build'; $lang->ci->menuOrder[20] = 'jenkins'; $lang->ci->menuOrder[15] = 'maintain'; $lang->ci->menuOrder[25] = 'match'; diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index 2595345871..b6e2068d86 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -334,11 +334,11 @@ $lang->caselib->menu->caselib = array('link' => '用例库|caselib|browse|libI $lang->ci = new stdclass(); $lang->ci->menu = new stdclass(); -$lang->ci->menu->browse = array('link' =>'代码|repo|browse|repoID=%s', 'alias' => 'diff,view,revision,log,blame,showsynccomment'); -$lang->ci->menu->job = array('link' =>'构建|integration|browse', 'subModule' => 'compile,integration'); -$lang->ci->menu->jenkins = array('link' =>'Jenkins|jenkins|browse', 'alias' => 'create,edit'); -$lang->ci->menu->maintain = array('link' =>'版本库|repo|maintain', 'alias' => 'create,edit'); -$lang->ci->menu->match = array('link' =>'匹配设置|repo|setmatchcomment'); +$lang->ci->menu->code = array('link' => '代码|repo|browse|repoID=%s', 'alias' => 'diff,view,revision,log,blame,showsynccomment'); +$lang->ci->menu->build = array('link' => '构建|integration|browse', 'subModule' => 'compile,integration'); +$lang->ci->menu->jenkins = array('link' => 'Jenkins|jenkins|browse', 'alias' => 'create,edit'); +$lang->ci->menu->maintain = array('link' => '版本库|repo|maintain', 'alias' => 'create,edit'); +$lang->ci->menu->match = array('link' => '指令|repo|setmatchcomment'); $lang->repo = new stdclass(); $lang->jenkins = new stdclass(); diff --git a/module/repo/control.php b/module/repo/control.php index d5ae319317..bc9da02aa3 100644 --- a/module/repo/control.php +++ b/module/repo/control.php @@ -263,7 +263,76 @@ class repo extends control public function browse($repoID = 0, $path = '', $revision = 'HEAD', $refresh = 0) { if($this->get->path) $path = $this->get->path; - $this->locate($this->repo->createLink('log', "repoID=$repoID&entry=&revision=$revision", empty($path) ? '' : "entry=$path")); + if(empty($refresh) and $this->cookie->repoRefresh) $refresh = $this->cookie->repoRefresh; + $this->repo->setMenu($this->repos, $repoID); + $this->repo->setBackSession('list', $withOtherModule = true); + if($repoID == 0) $repoID = $this->session->repoID; + + $repo = $this->repo->getRepoByID($repoID); + if(!$repo->synced) $this->locate($this->repo->createLink('showSyncComment', "repoID=$repoID")); + + $path = $this->repo->decodePath($path); + $cacheFile = $this->repo->getCacheFile($repoID, $path, $revision); + $this->scm->setEngine($repo); + + $this->app->loadClass('pager', $static = true); + $pager = new pager(0, 8, 1); + + /* Cache infos. */ + if($refresh or !$cacheFile or !file_exists($cacheFile) or (time() - filemtime($cacheFile)) / 60 > $this->config->repo->cacheTime) + { + $infos = $this->scm->ls($path, $revision); + + if($infos and $repo->SCM == 'Subversion') + { + $revisionList = array(); + foreach($infos as $info) $revisionList[$info->revision] = $info->revision; + $comments = $this->repo->getHistory($repoID, $revisionList); + foreach($infos as $info) + { + if(isset($comments[$info->revision])) + { + $comment = $comments[$info->revision]; + $info->comment = $comment->comment; + } + } + } + + if($cacheFile) + { + if(!file_exists($cacheFile . '.lock')) + { + touch($cacheFile . '.lock'); + file_put_contents($cacheFile, serialize($infos)); + unlink($cacheFile . '.lock'); + } + } + } + else + { + $infos = unserialize(file_get_contents($cacheFile)); + } + if($refresh) $this->repo->updateLatestCommit($repo); + if($this->cookie->repoRefresh) setcookie('repoRefresh', 0, 0, $this->config->webRoot); + + $logType = 'dir'; + $revisions = $this->repo->getLogs($repo, $path, $revision, $logType, $pager); + $commiters = $this->loadModel('user')->getCommiters(); + foreach($infos as $info) $info->committer = zget($commiters, $info->account, $info->account); + foreach($revisions as $log) $log->committer = zget($commiters, $log->committer, $log->committer); + + $this->view->title = $this->lang->repo->common; + $this->view->repo = $repo; + $this->view->revisions = $revisions; + $this->view->revision = $revision; + $this->view->infos = $infos; + $this->view->repoID = $repoID; + $this->view->pager = $pager; + $this->view->path = urldecode($path); + $this->view->logType = $logType; + $this->view->cacheTime = date('m-d H:i', filemtime($cacheFile)); + + $this->display(); } /** diff --git a/module/repo/css/blame.css b/module/repo/css/blame.css new file mode 100644 index 0000000000..57c589e9de --- /dev/null +++ b/module/repo/css/blame.css @@ -0,0 +1,11 @@ +.panel.code > .content{border: 1px solid #ccc;} +.blame{font-size:13px;} +.blame thead{font-weight:bold; background:#ddd;} +.blame td{border-left:1px solid #ccc;} +.blame tr.topLine > td:first-child{border-left:none;} +.blame .info{ background-color:#f7f7f7; vertical-align:top; padding:0px 4px} +.topLine{border-top: 1px solid #ccc;} +.topLine td.info{padding:8px 4px;} +pre {margin-bottom:0px;display:block; white-space: pre-wrap; padding:0px 3px; border:0px; background:none;} +.line{ font-weight: bold; border: 1px solid #E4E4E4; background-color: #ECECEC; text-align: right;} +.panel-actions.pull-right{margin-top:-5px; } diff --git a/module/repo/css/browse.css b/module/repo/css/browse.css new file mode 100644 index 0000000000..9b6db01afb --- /dev/null +++ b/module/repo/css/browse.css @@ -0,0 +1,2 @@ +#mainMenu > .btn-toolbar{height: 35px; line-height: 35px;} +.btn-toolbar > .last-sync-time{display:inline-block; float:left; margin-right: 10px;} diff --git a/module/repo/css/log.css b/module/repo/css/log.css index 6ebb508f44..e69de29bb2 100644 --- a/module/repo/css/log.css +++ b/module/repo/css/log.css @@ -1 +0,0 @@ -#contentNav{display:none;} diff --git a/module/repo/model.php b/module/repo/model.php index 36f15ce624..4c3a0b373d 100644 --- a/module/repo/model.php +++ b/module/repo/model.php @@ -455,6 +455,24 @@ class repoModel extends model return $revisions; } + /** + * Get history. + * + * @param int $repoID + * @param array $revisions + * @access public + * @return array + */ + public function getHistory($repoID, $revisions) + { + return $this->dao->select('DISTINCT t1.*')->from(TABLE_REPOHISTORY)->alias('t1') + ->leftJoin(TABLE_REPOBRANCH)->alias('t2')->on('t1.id=t2.revision') + ->where('t1.repo')->eq($repoID) + ->andWhere('t1.revision')->in($revisions) + ->beginIF($this->cookie->repoBranch)->andWhere('t2.branch')->eq($this->cookie->repoBranch)->fi() + ->fetchAll('revision'); + } + /** * Get git revisionName. * diff --git a/module/repo/view/log.html.php b/module/repo/view/log.html.php index c0b3ff37d3..ff75246c2b 100644 --- a/module/repo/view/log.html.php +++ b/module/repo/view/log.html.php @@ -12,6 +12,10 @@