php操作SVN版本服务器类代码

SvnPeer.PHP
<div class="codetitle"><a style="CURSOR: pointer" data="5253" class="copybut" id="copybut5253" onclick="doCopy('code5253')"> 代码如下:

<div class="codebody" id="code5253">
<?PHP
/

This class for execute the external program of svn

@auth Seven Yang qineer@gmail.com

/
class SvnPeer
{
/

List directory entries in the repository

@param string a specific project repository path
@return bool true,if validated successfully,otherwise false
*/
static public function ls($repository)
{
$command = "svn ls " . $repository;
$output = SvnPeer::runcmd($command);
$output = implode("
",$output);
if (strpos($output,'non-existent in that revision')) {
return false;
}
return "
" . $command . "
" . $output;
}
/
Duplicate something in working copy or repository,remembering history

@param $src
@param $dst
@param $comment string specify log message
@return bool true,if copy successfully,otherwise return the error message

@todo comment need addslashes for svn commit
*/
static public function copy($src,$dst,$comment)
{
$command = "svn cp $src $dst -m '$comment'";
$output = SvnPeer::runcmd($command);
$output = implode("
",'Committed revision')) {
return true;
}
return "
" . $command . "
" . $output;
}
/*
Remove files and directories from version control

@param $url
@return bool true,if delete successfully,otherwise return the error message

@todo comment need addslashes for svn commit
/
static public function delete($url,$comment)
{
$command = "svn del $url -m '$comment'";
$output = SvnPeer::runcmd($command);
$output = implode('
','Committed revision')) {
return true;
}
return "
" . $command . "
" . $output;
}
/

Move and/or rename something in working copy or repository

@param $src string trunk path
@param $dst string new branch path
@param $comment string specify log message
@return bool true,if move successfully,otherwise return the error message

@todo comment need addslashes for svn commit
*/
static public function move($src,$comment)
{
$command = "svn mv $src $dst -m '$comment'";
$output = SvnPeer::runcmd($command);
$output = implode('
','Committed revision')) {
return true;
}
return "
" . $command . "
" . $output;
}
/
Create a new directory under version control

@param $url string
@param $comment string the svn message
@return bool true,if create successfully,otherwise return the error message

@todo comment need addslashes for svn commit
/
static public function mkdir($url,$comment)
{
$command = "svn mkdir $url -m '$comment'";
$output = SvnPeer::runcmd($command);
$output = implode('
','Committed revision')) {
return true;
}
return "
" . $command . "
" . $output;
}
static public function diff($pathA,$pathB)
{
$output = SvnPeer::runcmd("svn diff $pathA $pathB");
return implode('
',$output);
}
static public function checkout($url,$dir)
{
$command = "cd $dir && svn co $url";
$output = SvnPeer::runcmd($command);
$output = implode('
',$output);
if (strstr($output,'Checked out revision')) {
return true;
}
return "
" . $command . "
" . $output;
}
static public function update($path)
{
$command = "cd $path && svn up";
$output = SvnPeer::runcmd($command);
$output = implode('
',$output);
preg_match_all("/[0-9]+/",$output,$ret);
if (!$ret[0][0]){
return "
" . $command . "
" . $output;
}
return $ret[0][0];
}
static public function merge($revision,$url,$dir)
{
$command = "cd $dir && svn merge -r1:$revision $url";
$output = implode('
',SvnPeer::runcmd($command));
if (strstr($output,'Text conflicts')) {
return 'Command: ' . $command .'
'. $output;
}
return true;
}
static public function commit($dir,$comment)
{
$command = "cd $dir && svn commit -m'$comment'";
$output = implode('
',SvnPeer::runcmd($command));
if (strpos($output,'Committed revision') || empty($output)) {
return true;
}
return $output;
}
static public function getStatus($dir)
{
$command = "cd $dir && svn st";
return SvnPeer::runcmd($command);
}
static public function hasConflict($dir)
{
$output = SvnPeer::getStatus($dir);
foreach ($output as $line){
if ('C' == substr(trim($line),1) || ('!' == substr(trim($line),1))){
return true;
}
}
return false;
}
/

Show the log messages for a set of path with XML

@param path string
@return log message string
*/
static public function getLog($path)
{
$command = "svn log $path --xml";
$output = SvnPeer::runcmd($command);
return implode('',$output);
}
static public function getPathRevision($path)
{
$command = "svn info $path --xml";
$output = SvnPeer::runcmd($command);
$string = implode('',$output);
$xml = new SimpleXMLElement($string);
foreach ($xml->entry[0]->attributes() as $key=>$value){
if ('revision' == $key) {
return $value;
}
}
}
static public function getHeadRevision($path)
{
$command = "cd $path && svn up";
$output = SvnPeer::runcmd($command);
$output = implode('
',$ret);
if (!$ret[0][0]){
return "
" . $command . "
" . $output;
}
return $ret[0][0];
}
/*
Run a cmd and return result

@param string command line
@param boolen true need add the svn authentication
@return array the contents of the output that svn execute
*/
static protected function runcmd($command)
{
$authCommand = ' --username ' . SVN_USERNAME . ' --password ' . SVN_PASSWORD . ' --no-auth-cache --non-interactive --config-dir '.SVN_CONfig_DIR.'.subversion';
exec($command . $authCommand . " 2>&1",$output);
return $output;
}
}

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...