This commit is contained in:
wangyidong
2020-12-01 11:05:58 +08:00
parent c8817eda62
commit 43804684d7
3 changed files with 67 additions and 0 deletions
+20
View File
@@ -37,6 +37,8 @@ class GitRepo
*/
public function ls($path, $revision = 'HEAD')
{
if(!scm::checkRevision($revision)) return array();
$path = ltrim($path, DIRECTORY_SEPARATOR);
$sub = '';
chdir($this->root);
@@ -99,6 +101,8 @@ class GitRepo
*/
public function tags($path, $revision = 'HEAD')
{
if(!scm::checkRevision($revision)) return array();
chdir($this->root);
$cmd = escapeCmd("$this->client tag --sort=taggerdate");
$list = execCmd($cmd . ' 2>&1', 'array', $result);
@@ -166,6 +170,9 @@ class GitRepo
*/
public function log($path, $fromRevision = 0, $toRevision = 'HEAD', $count = 0)
{
if(!scm::checkRevision($fromRevision)) return array();
if(!scm::checkRevision($toRevision)) return array();
$path = ltrim($path, DIRECTORY_SEPARATOR);
$count = $count == 0 ? '' : "-n $count";
/* compatible with svn. */
@@ -206,6 +213,8 @@ class GitRepo
*/
public function blame($path, $revision)
{
if(!scm::checkRevision($revision)) return array();
$path = ltrim($path, DIRECTORY_SEPARATOR);
chdir($this->root);
$list = execCmd(escapeCmd("$this->client blame -l $revision -- $path"), 'array');
@@ -257,6 +266,9 @@ class GitRepo
*/
public function diff($path, $fromRevision, $toRevision)
{
if(!scm::checkRevision($fromRevision)) return array();
if(!scm::checkRevision($toRevision)) return array();
$path = ltrim($path, DIRECTORY_SEPARATOR);
chdir($this->root);
if($toRevision == 'HEAD' and $this->branch) $toRevision = $this->branch;
@@ -280,6 +292,8 @@ class GitRepo
*/
public function cat($entry, $revision = 'HEAD')
{
if(!scm::checkRevision($revision)) return false;
chdir($this->root);
if($revision == 'HEAD' and $this->branch) $revision = $this->branch;
$cmd = escapeCmd("$this->client show $revision:$entry");
@@ -298,6 +312,8 @@ class GitRepo
*/
public function info($entry, $revision = 'HEAD')
{
if(!scm::checkRevision($revision)) return false;
chdir($this->root);
if($revision == 'HEAD' and $this->branch) $revision = $this->branch;
$path = ltrim($entry, DIRECTORY_SEPARATOR);
@@ -446,6 +462,8 @@ class GitRepo
*/
public function getCommitCount($commits = 0, $lastVersion = '')
{
if(!scm::checkRevision($lastVersion)) return false;
chdir($this->root);
$revision = $this->branch ? $this->branch : 'HEAD';
return execCmd(escapeCmd("$this->client rev-list --count $revision -- ./"), 'string');
@@ -489,6 +507,8 @@ class GitRepo
*/
public function getCommits($version = '', $count = 0, $branch = '')
{
if(!scm::checkRevision($version)) return array();
if($version == 'HEAD' and $branch) $version = $branch;
$revision = empty($version) ? $revision : $version;
$revision = is_numeric($revision) ? "--skip=$revision $branch" : $revision;
+27
View File
@@ -28,6 +28,7 @@ class scm
*/
public function ls($path, $revision = 'HEAD')
{
if(!scm::checkRevision($revision)) return array();
return $this->engine->ls($path, $revision);
}
@@ -42,6 +43,7 @@ class scm
*/
public function tags($path, $revision = 'HEAD', $onlyDir = true)
{
if(!scm::checkRevision($revision)) return array();
return $this->engine->tags($path, $revision, $onlyDir);
}
@@ -68,6 +70,9 @@ class scm
*/
public function log($path, $fromRevision = 0, $toRevision = 'HEAD', $count = 0)
{
if(!scm::checkRevision($fromRevision)) return array();
if(!scm::checkRevision($toRevision)) return array();
return $this->engine->log($path, $fromRevision, $toRevision);
}
@@ -81,6 +86,7 @@ class scm
*/
public function blame($path, $revision)
{
if(!scm::checkRevision($revision)) return array();
return $this->engine->blame($path, $revision);
}
@@ -109,6 +115,9 @@ class scm
*/
public function diff($path, $fromRevision = 0, $toRevision = 'HEAD', $parse = 'yes')
{
if(!scm::checkRevision($fromRevision)) return array();
if(!scm::checkRevision($toRevision)) return array();
$diffs = $this->engine->diff($path, $fromRevision, $toRevision);
if($parse != 'yes') return implode("\n", $diffs);
@@ -125,6 +134,7 @@ class scm
*/
public function cat($entry, $revision = 'HEAD')
{
if(!scm::checkRevision($revision)) return false;
return $this->engine->cat($entry, $revision);
}
@@ -138,6 +148,7 @@ class scm
*/
public function info($entry, $revision = 'HEAD')
{
if(!scm::checkRevision($revision)) return false;
return $this->engine->info($entry, $revision);
}
@@ -163,6 +174,7 @@ class scm
*/
public function getCommitCount($commits = 0, $lastVersion = 0)
{
if(!scm::checkRevision($lastVersion)) return false;
return $this->engine->getCommitCount($commits, $lastVersion);
}
@@ -199,8 +211,23 @@ class scm
*/
public function getCommits($version = '', $count = 0, $branch = '')
{
if(!scm::checkRevision($version)) return array();
return $this->engine->getCommits($version, $count, $branch);
}
/**
* Check revision
*
* @param int|string $revision
* @static
* @access public
* @return bool
*/
public static function checkRevision($revision)
{
if(preg_match('/[^a-z0-9\^]/i', $revision)) return false;
return true;
}
}
/**
+20
View File
@@ -46,6 +46,8 @@ class Subversion
*/
public function ls($path, $revision = 'HEAD')
{
if(!scm::checkRevision($revision)) return array();
$resourcePath = $path;
$path = '"' . $this->root . '/' . str_replace(array('%2F', '+'), array('/', ' '), urlencode($path)) . '"';
$cmd = $this->replaceAuth(escapeCmd($this->buildCMD($path, 'ls', "-r $revision --xml")));
@@ -98,6 +100,8 @@ class Subversion
*/
public function tags($path, $revision = 'HEAD', $onlyDir = true)
{
if(!scm::checkRevision($revision)) return array();
$infos = $this->ls($path, $revision);
$dirs = array();
foreach($infos as $info)
@@ -195,6 +199,9 @@ class Subversion
*/
public function log($path, $fromRevision = 0, $toRevision = 'HEAD', $count = 0, $quiet = false)
{
if(!scm::checkRevision($fromRevision)) return array();
if(!scm::checkRevision($toRevision)) return array();
$resourcePath = $path;
$count = $count == 0 ? '' : "--limit $count";
$param = $quiet ? '-q' : '-v';
@@ -258,6 +265,8 @@ class Subversion
*/
public function blame($path, $revision)
{
if(!scm::checkRevision($revision)) return array();
$resourcePath = $path;
$path = '"' . $this->root . '/' . str_replace(array('%2F', '+'), array('/', ' '), urlencode($path)) . '"';
$file = $this->replaceAuth(escapeCmd($this->buildCMD($path, 'cat', "-r $revision")));
@@ -327,6 +336,9 @@ class Subversion
*/
public function diff($path, $fromRevision, $toRevision)
{
if(!scm::checkRevision($fromRevision)) return array();
if(!scm::checkRevision($toRevision)) return array();
$resourcePath = $path;
if($fromRevision == '^') $fromRevision = $toRevision - 1;
$path = '"' . $this->root . '/' . str_replace(array('%2F', '+'), array('/', ' '), urlencode($path)) . '"';
@@ -351,6 +363,8 @@ class Subversion
*/
public function cat($entry, $revision = 'HEAD')
{
if(!scm::checkRevision($revision)) return false;
$resourcePath = $entry;
$entry = '"' . $this->root . '/' . str_replace(array('%2F', '+'), array('/', ' '), urlencode($entry)) . '"';
$cmd = $this->replaceAuth(escapeCmd($this->buildCMD($entry, 'cat', "-r $revision")));
@@ -374,6 +388,8 @@ class Subversion
*/
public function info($entry, $revision = 'HEAD')
{
if(!scm::checkRevision($revision)) return false;
$resourcePath = $entry;
$entry = '"' . $this->root . '/' . str_replace(array('%2F', '+'), array('/', ' '), urlencode($entry)) . '"';
$svnInfo = $this->replaceAuth(escapeCmd($this->buildCMD($entry, 'info', "-r $revision --xml")));
@@ -506,6 +522,8 @@ class Subversion
*/
public function getCommitCount($commits = 0, $lastVersion = 0)
{
if(!scm::checkRevision($lastVersion)) return false;
if(empty($commits)) $commits = 0;
if(empty($lastVersion)) $lastVersion = 0;
$lastRevision = $this->getLatestRevision();
@@ -563,6 +581,8 @@ class Subversion
*/
public function getCommits($version = '', $count = 0)
{
if(!scm::checkRevision($version)) return array();
$count = $count == 0 ? '' : "--limit $count";
$path = '"' . $this->root . '"';
if(stripos($this->root, 'https') === 0 or stripos($this->root, 'svn') === 0)