From 1c503bcf58e9ffb7e57a5cabc0516a2ddd19dd3f Mon Sep 17 00:00:00 2001 From: zenggang Date: Mon, 21 Feb 2022 08:33:58 +0000 Subject: [PATCH] * Finish task#49221 --- lib/scm/gitlab.class.php | 8 +++++--- lib/scm/gitrepo.class.php | 7 ++++--- lib/scm/scm.class.php | 10 +++++++--- module/repo/control.php | 5 +++-- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/lib/scm/gitlab.class.php b/lib/scm/gitlab.class.php index 6f0e5c2db4..e77660a88b 100644 --- a/lib/scm/gitlab.class.php +++ b/lib/scm/gitlab.class.php @@ -282,13 +282,15 @@ class gitlab * @param string $path * @param string $fromRevision * @param string $toRevision + * @param string $fromProject + * @param string $extra * @access public * @return array */ - public function diff($path, $fromRevision, $toRevision, $fromProject = '') + public function diff($path, $fromRevision, $toRevision, $fromProject = '', $extra = '') { - if(!scm::checkRevision($fromRevision)) return array(); - if(!scm::checkRevision($toRevision)) return array(); + if(!scm::checkRevision($fromRevision) and $extra != 'isBranchOrTag') return array(); + if(!scm::checkRevision($toRevision) and $extra != 'isBranchOrTag') return array(); $api = "compare"; $params = array('from' => $fromRevision, 'to' => $toRevision); diff --git a/lib/scm/gitrepo.class.php b/lib/scm/gitrepo.class.php index e04e46b58f..72ef3668a3 100644 --- a/lib/scm/gitrepo.class.php +++ b/lib/scm/gitrepo.class.php @@ -261,13 +261,14 @@ class GitRepo * @param string $path * @param string $fromRevision * @param string $toRevision + * @param string $extra * @access public * @return array */ - public function diff($path, $fromRevision, $toRevision) + public function diff($path, $fromRevision, $toRevision, $extra = '') { - if(!scm::checkRevision($fromRevision)) return array(); - if(!scm::checkRevision($toRevision)) return array(); + if(!scm::checkRevision($fromRevision) and $extra != 'isBranchOrTag') return array(); + if(!scm::checkRevision($toRevision) and $extra != 'isBranchOrTag') return array(); $path = ltrim($path, DIRECTORY_SEPARATOR); chdir($this->root); diff --git a/lib/scm/scm.class.php b/lib/scm/scm.class.php index 99cc11e015..c16cc4e942 100644 --- a/lib/scm/scm.class.php +++ b/lib/scm/scm.class.php @@ -115,11 +115,15 @@ class scm */ public function diff($path, $fromRevision = 0, $toRevision = 'HEAD', $parse = 'yes', $extra = '') { - if(!scm::checkRevision($fromRevision)) return array(); - if(!scm::checkRevision($toRevision)) return array(); + if(!scm::checkRevision($fromRevision) and $extra != 'isBranchOrTag') return array(); + if(!scm::checkRevision($toRevision) and $extra != 'isBranchOrTag') return array(); if(!$extra) $diffs = $this->engine->diff($path, $fromRevision, $toRevision); - if($extra) $diffs = $this->engine->diff($path, $fromRevision, $toRevision, $extra); + if($extra) + { + if(get_class($this->engine) == 'gitlab') $diffs = $this->engine->diff($path, $fromRevision, $toRevision, '', $extra); + if(get_class($this->engine) != 'gitlab') $diffs = $this->engine->diff($path, $fromRevision, $toRevision, $extra); + } if($parse != 'yes') return implode("\n", $diffs); return $this->engine->parseDiff($diffs); diff --git a/module/repo/control.php b/module/repo/control.php index 09d2d5b55b..79faaa27f5 100644 --- a/module/repo/control.php +++ b/module/repo/control.php @@ -709,10 +709,11 @@ class repo extends control * @param string $newRevision * @param string $showBug * @param string $encoding + * @param bool $isBranchOrTag * @access public * @return void */ - public function diff($repoID, $objectID = 0, $entry = '', $oldRevision = '0', $newRevision = 'HEAD', $showBug = 'false', $encoding = '') + public function diff($repoID, $objectID = 0, $entry = '', $oldRevision = '0', $newRevision = 'HEAD', $showBug = 'false', $encoding = '', $isBranchOrTag = false) { $this->commonAction($repoID, $objectID); @@ -745,7 +746,7 @@ class repo extends control $encoding = empty($encoding) ? $repo->encoding : $encoding; $encoding = strtolower(str_replace('_', '-', $encoding)); $info = $this->scm->info($entry, $newRevision); - $diffs = $this->scm->diff($entry, $oldRevision, $newRevision); + $diffs = $this->scm->diff($entry, $oldRevision, $newRevision, 'yes', $isBranchOrTag ? 'isBranchOrTag': ''); foreach($diffs as $diff) { if($encoding != 'utf-8')