From eef945755ffe8dfcdefa9ffb2b1d52bdd16ab753 Mon Sep 17 00:00:00 2001 From: Guan Xiying Date: Wed, 25 Aug 2021 10:36:18 +0800 Subject: [PATCH] * Add diff page. --- module/mr/model.php | 36 ++++---- module/mr/view/browse.html.php | 3 +- module/mr/view/diff.html.php | 147 +++++++++++++++++++++++++++++++++ 3 files changed, 168 insertions(+), 18 deletions(-) create mode 100644 module/mr/view/diff.html.php diff --git a/module/mr/model.php b/module/mr/model.php index f2202e0c22..6b89bf1df1 100644 --- a/module/mr/model.php +++ b/module/mr/model.php @@ -348,24 +348,26 @@ class mrModel extends model * @access public * @return object */ - public function apiGetDiffVersions($MR) + public function getDiffs($MR) { - $url = sprintf($this->gitlab->getApiRoot($MR->gitlabID), "/projects/{$MR->sourceProject}/merge_requests/$MR->mriid/versions"); - return json_decode(commonModel::http($url)); - } + $gitlab = $this->gitlab->getByID($MR->gitlabID); + $fromProject = $MR->sourceProject; + $toProject = $MR->targetProject; - /** - * Get single diff version by API. - * - * @docs https://docs.gitlab.com/ee/api/merge_requests.html#get-a-single-mr-diff-version - * @param object $MR - * @param int $versionID - * @access public - * @return object - */ - public function apiGetSingleDiffVersion($MR, $versionID) - { - $url = sprintf($this->gitlab->getApiRoot($MR->gitlabID), "/projects/{$MR->sourceProject}/merge_requests/{$MR->mriid}/versions/$versionID"); - return json_decode(commonModel::http($url)); + $this->loadModel('repo'); + $repo = new stdclass; + $repo->SCM = 'GitLab'; + $repo->gitlab = $gitlab->id; + $repo->project = $toProject; + $repo->path = sprintf($this->config->repo->gitlab->apiPath, $gitlab->url, $toProject); + $repo->client = $gitlab->url; + $repo->password = $gitlab->token; + + $scm = $this->app->loadClass('scm'); + $scm->setEngine($repo); + + $encoding = empty($encoding) ? $repo->encoding : $encoding; + $encoding = strtolower(str_replace('_', '-', $encoding)); + return $scm->diff('', $fromProject, $toProject, $parse = true, $fromProject); } } diff --git a/module/mr/view/browse.html.php b/module/mr/view/browse.html.php index 7fb8423902..4d1fe12c67 100644 --- a/module/mr/view/browse.html.php +++ b/module/mr/view/browse.html.php @@ -44,8 +44,9 @@ mr->mergeStatusList, $mr->mergeStatus);?> id}", '', '', "title='{$lang->mr->list}' class='btn btn-info'"); + common::printLink('mr', 'view', "mr={$mr->id}", '', '', "title='{$lang->mr->view}' class='btn btn-info'"); common::printLink('mr', 'edit', "mrID=$mr->id", '', '', "title='{$lang->mr->edit}' class='btn btn-info'"); + common::printLink('mr', 'diff', "mr={$mr->id}", '', '', "title='{$lang->mr->diff}' class='btn btn-info'"); if(common::hasPriv('mr', 'delete')) echo html::a($this->createLink('mr', 'delete', "id=$mr->id"), '', 'hiddenwin', "title='{$lang->mr->delete}' class='btn'"); ?> diff --git a/module/mr/view/diff.html.php b/module/mr/view/diff.html.php new file mode 100644 index 0000000000..0c2d5e88bd --- /dev/null +++ b/module/mr/view/diff.html.php @@ -0,0 +1,147 @@ + + + + + + +
+
+
+
+ repo->viewDiffList['inline'], "id='inline'", $arrange == 'inline' ? 'active btn btn-sm' : 'btn btn-sm')?> + repo->viewDiffList['appose'], "id='appose'", $arrange == 'appose' ? 'active btn btn-sm' : 'btn btn-sm')?> +
+
+
+
+ repo->encodingList, $encoding, $lang->repo->encoding) . "", "data-toggle='dropdown'", 'btn dropdown-toggle btn-sm')?> + +
+
+
+ +
+
+ +
+ + + contents)) continue;?> + contents as $content):?> + oldStartLine; + $newCurrentLine = $content->newStartLine; + ?> + + + + + + + + + + + + lines as $line):?> + + + + + + + + lines as $line):?> + + type == 'old') + { + $oldlc = $line->oldlc; + $newlc = ''; + if(isset($content->new[$oldlc])) + { + $newlc = $line->oldlc; + $line->type = 'custom'; + } + } + else + { + $oldlc = $line->oldlc; + $newlc = $line->newlc; + if(!isset($content->new[$newlc])) continue; + } + ?> + + + + + old[$oldlc])) unset($content->old[$oldlc]); + if(isset($content->new[$newlc])) unset($content->new[$newlc]); + ?> + + + + +
fileName;?>
......
type != 'new') echo $line->oldlc?>type != 'old') echo $line->newlc?>line = $repo->SCM == 'Subversion' ? htmlspecialchars($line->line) : $line->line; + echo $line->type == 'old' ? preg_replace('/^\-/', '–', $line->line) : ($line->type == 'new' ? $line->line : ' ' . $line->line); + ?>
type?> type == 'custom') echo "line-old"?> code'>old[$oldlc])) $content->old[$oldlc] = ''; + $content->old[$oldlc] = $repo->SCM == 'Subversion' ? htmlspecialchars($content->old[$oldlc]) : $content->old[$oldlc]; + if(!empty($oldlc)) echo $line->type != 'all' ? preg_replace('/^\-/', '–', $content->old[$oldlc]) : ' ' . $content->old[$oldlc]; + ?>type?> type == 'custom') echo "line-new"?> code'>new[$newlc])) $content->new[$newlc] = ''; + $content->new[$newlc] = $repo->SCM == 'Subversion' ? htmlspecialchars($content->new[$newlc]) : $content->new[$newlc]; + if(!empty($newlc)) echo $line->type != 'all' ? $content->new[$newlc] : ' ' . $content->new[$newlc]; + ?>
+
+ +
+ + +