diff --git a/lib/scm/gitlab.class.php b/lib/scm/gitlab.class.php index a8f5b9d454..61f120734c 100644 --- a/lib/scm/gitlab.class.php +++ b/lib/scm/gitlab.class.php @@ -260,7 +260,6 @@ class gitlab if(empty($results) or isset($results->message)) return array(); $blames = array(); - $revLine = 0; $revision = ''; $lineNumber = 1; @@ -306,7 +305,7 @@ class gitlab if(!scm::checkRevision($toRevision) and $extra != 'isBranchOrTag') return array(); $api = "compare"; - $params = array('from' => $fromRevision, 'to' => $toRevision); + $params = array('from' => $fromRevision, 'to' => $toRevision, 'straight' => true); if($fromProject) $params['from_project_id'] = $fromProject; if($toRevision == 'HEAD' and $this->branch) $params['to'] = $this->branch; @@ -867,7 +866,6 @@ class gitlab public function parseLog($logs) { $parsedLogs = array(); - $i = 0; foreach($logs as $commit) { if(!isset($commit->id)) continue; diff --git a/module/repo/control.php b/module/repo/control.php index 67464a2ab7..a467274699 100644 --- a/module/repo/control.php +++ b/module/repo/control.php @@ -295,7 +295,7 @@ class repo extends control $this->view->suffix = 'c'; $this->view->blames = array(); $this->view->showEditor = true; - $this->display('repo', 'ajaxGetEditorContent'); + $this->display('repo', 'ajaxgeteditorcontent'); } /** @@ -725,20 +725,13 @@ class repo extends control * @access public * @return void */ - public function revision($repoID, $objectID = 0, $revision = '', $root = '', $type = 'dir') + public function revision($repoID, $objectID = 0, $revision = '') { - $this->repo->setBackSession(); if($repoID == 0) $repoID = $this->session->repoID; $repo = $this->repo->getRepoByID($repoID); - /* Save session. */ - $this->session->set('revisionList', $this->app->getURI(true), 'repo'); - - $this->commonAction($repoID, $objectID); $this->scm->setEngine($repo); $log = $this->scm->log('', $revision, $revision); - $log[0]->comment = $this->repo->replaceCommentLink($log[0]->comment); - $log[0]->commit = ''; $history = $this->dao->select('*')->from(TABLE_REPOHISTORY)->where('revision')->eq($log[0]->revision)->andWhere('repo')->eq($repoID)->fetch(); if($history) @@ -754,8 +747,6 @@ class repo extends control { $oldRevision = $this->dao->select('*')->from(TABLE_REPOHISTORY)->where('revision')->lt($history->revision)->andWhere('repo')->eq($repoID)->orderBy('revision_desc')->limit(1)->fetch('revision'); } - - $log[0]->commit = $history->commit; } if(empty($oldRevision)) @@ -764,53 +755,7 @@ class repo extends control if($history and in_array($repo->SCM, $this->config->repo->gitTypeList)) $oldRevision = "{$history->revision}^"; } - $changes = array(); - $viewPriv = common::hasPriv('repo', 'view'); - $diffPriv = common::hasPriv('repo', 'diff'); - foreach($log[0]->change as $path => $change) - { - if($repo->prefix) $path = str_replace($repo->prefix, '', $path); - $encodePath = $this->repo->encodePath($path); - if($change['kind'] == '' or $change['kind'] == 'file') - { - $change['view'] = $viewPriv ? html::a($this->repo->createLink('view', "repoID=$repoID&objectID=$objectID&entry=$encodePath&revision=$revision"), $this->lang->repo->viewA, '', "data-app='{$this->app->tab}'") : ''; - if($change['action'] == 'M') $change['diff'] = $diffPriv ? html::a($this->repo->createLink('diff', "repoID=$repoID&objectID=$objectID&entry=$encodePath&oldRevision=$oldRevision&newRevision=$revision"), $this->lang->repo->diffAB, '', "data-app='{$this->app->tab}'") : ''; - } - else - { - $change['view'] = $viewPriv ? html::a($this->repo->createLink('browse', "repoID=$repoID&branchID=&objectID=$objectID&path=$encodePath&revision=$revision"), $this->lang->repo->browse, '', "data-app='{$this->app->tab}'") : ''; - if($change['action'] == 'M') $change['diff'] = $diffPriv ? html::a($this->repo->createLink('diff', "repoID=$repoID&objectID=$objectID&entry=$encodePath&oldRevision=$oldRevision&newRevision=$revision"), $this->lang->repo->diffAB, '', "data-app='{$this->app->tab}'") : ''; - } - $changes[$path] = $change; - } - - $root = $this->repo->decodePath($root); - $parent = ''; - if($type == 'file') - { - $parent = $this->dao->select('parent')->from(TABLE_REPOFILES) - ->where('revision')->eq($history->id) - ->andWhere('path')->eq('/' . $root) - ->fetch('parent'); - } - - $this->view->title = $this->lang->repo->common; - $this->view->log = $log[0]; - $this->view->repo = $repo; - $this->view->path = $root; - $this->view->type = $type; - $this->view->changes = $changes; - $this->view->repoID = $repoID; - $this->view->branchID = $this->cookie->repoBranch; - $this->view->objectID = $objectID; - $this->view->revision = $log[0]->revision; - $this->view->parentDir = $parent; - $this->view->oldRevision = $oldRevision; - $this->view->preAndNext = $this->repo->getPreAndNext($repo, $root, $revision, $type, 'revision'); - - $this->view->title = $this->lang->repo->common . $this->lang->colon . $this->lang->repo->viewRevision; - - $this->display(); + $this->locate($this->repo->createLink('diff', "repoID=$repoID&objectID=$objectID&entry=&oldrevision=$oldRevision&newRevision={$log[0]->revision}")); } /** diff --git a/module/repo/ui/ajaxgeteditorcontent.html.php b/module/repo/ui/ajaxgeteditorcontent.html.php index 312e0a15b8..faf54b1717 100644 --- a/module/repo/ui/ajaxgeteditorcontent.html.php +++ b/module/repo/ui/ajaxgeteditorcontent.html.php @@ -1,7 +1,7 @@ lang->repo->unlink); jsVar('canUnlinkObject', $canUnlinkObject); jsVar('fileExt', $this->config->repo->fileExt); jsVar('file', $pathInfo); +jsVar('filePath', $entry); jsVar('blameTmpl', $lang->repo->blameTmpl); jsVar('repoID', $repoID); jsVar('showEditor', $showEditor); @@ -66,18 +67,30 @@ elseif($suffix == 'binary') } else { + $options = array( + 'value' => $content, + 'language' => $lang, + 'readOnly' => true, + 'autoIndent' => true, + 'contextmenu' => true, + 'automaticLayout' => true, + 'EditorMinimapOptions' => array('enabled' => false), + ); + if($type == 'diff') $options = array( + 'language' => $lang, + 'readOnly' => true, + 'autoIndent' => true, + 'contextmenu' => true, + 'automaticLayout' => true, + 'renderSideBySide' => false, + 'EditorMinimapOptions' => array('enabled' => false), + ); $wg = monaco ( set::id('codeContainer'), - set::options(array( - 'value' => $content, - 'language' => $lang, - 'readOnly' => true, - 'autoIndent' => true, - 'contextmenu' => true, - 'automaticLayout' => true, - 'EditorMinimapOptions' => array('enabled' => false), - )), + set::options($options), + set::action($type == 'diff' ? 'diff' : 'create'), + $type == 'diff' ? set::diffContent(jsRaw('parent.getDiffs(filePath)')) : null, set::onMouseDown('window.onMouseDown') ); } diff --git a/module/repo/ui/diffeditor.html.php b/module/repo/ui/diffeditor.html.php new file mode 100644 index 0000000000..b103b8976b --- /dev/null +++ b/module/repo/ui/diffeditor.html.php @@ -0,0 +1,91 @@ + + * @package repo + * @link http://www.zentao.net + */ + +namespace zin; + +$entry = count($diffs) ? $diffs[0]->fileName : ''; +$currentEntry = $this->repo->encodePath($entry); +$fileInfo = $entry ? pathinfo($entry) : array(); +$showBug = isset($showBug) ? $showBug : true; +$objectID = isset($objectID) ? $objectID : 0; +$tree = $this->repo->getFileTree($repo, '', $diffs); +$diffLink = $this->repo->createLink('diff', "repoID=$repoID&objectID=$objectID&entry=" . $file . "&oldrevision={oldRevision}&newRevision={newRevision}"); + +jsVar('diffs', $diffs); +jsVar('tree', $tree); +jsVar('file', $currentEntry); +jsVar('entry', $entry); +jsVar('diffLink', $diffLink); +jsVar('urlParams', "repoID=$repoID&objectID=$objectID&entry=%s&oldRevision=$oldRevision&newRevision=$newRevision&showBug=$showBug&encoding=$encoding"); + +featureBar(); + +$dropMenus = array(); +if(common::hasPriv('repo', 'download')) $dropMenus[] = array('text' => $this->lang->repo->downloadDiff, 'icon' => 'download', 'url' => $this->repo->createLink('download', "repoID=$repoID&path=$currentEntry&fromRevision=$oldRevision&toRevision=$newRevision&type=path"), 'target' => '_blank'); + +$dropMenus[] = array('text' => $this->lang->repo->viewDiffList['inline'], 'icon' => 'inline', 'id' => 'inline', 'class' => 'inline-appose'); +$dropMenus[] = array('text' => $this->lang->repo->viewDiffList['appose'], 'icon' => 'appose', 'id' => 'appose', 'class' => 'inline-appose'); +div( + set::id('fileTabs'), + tabs + ( + set::id('monacoTabs'), + set::class('relative'), + tabPane + ( + set::title($fileInfo['basename']), + set::active(true), + set::key('tab-' . str_replace('=', '-', $currentEntry)), + to::suffix + ( + icon + ( + 'close', + set::class('monaco-close'), + ) + ), + div(set::id('tab-' . $currentEntry)), + ), + dropdown + ( + set::arrow(false), + set::staticMenu(true), + set::class('absolute top-0 right-0 z-10 monaco-dropmenu'), + btn + ( + setClass('ghost text-black pull-right'), + set::icon('ellipsis-v rotate-90'), + ), + set::items + ( + $dropMenus + ), + ), + ) +); + +sidebar +( + set::side('left'), + tree + ( + set::id('monacoTree'), + set::items($tree), + set::collapsedIcon('folder'), + set::expandedIcon('folder-open'), + set::normalIcon('file-text-alt'), + set::activeKey($entry), + set::onClickItem(jsRaw('window.treeClick')), + ) +); + +a(set::class('iframe'), setData('width', '90%'), setData('toggle', 'modal'), set::id('linkObject'));