php svn类,php 操作SVN类示例用法

/**

* 操作SVN类

*

* @param

* @author 编程之家 jb51.cc jb51.cc

* This class for execute the external program of svn

*

*

*/

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;

}

}

/*** 来自编程之家 jb51.cc(jb51.cc) ***/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值