首页 >php教程 >php手册 >php svn操作类

php svn操作类

WBOY
WBOY原创
2016-05-25 16:56:20959浏览
以前我们开发大型项目时都会用到svn来同步,因为开发产品的人过多,所以我们会利用软件来管理,今天发有一居然可以利用php来管理svn哦,好了看看吧。
 代码如下 复制代码

/**
*
* 该类用于执行svn的外部程序
*
* @auth七阳 http://www.phprm.com
*
*/
class SvnPeer
{
/**
* 列出存储库中的目录条目
*
* @param string 特定项目存储库路径
* @return bool true,如果验证成功,否则为 false
*/
静态公共函数 ls($存储库)
{
$command = "svn ls " . $repository;
$output = SvnPeer::runCmd($command);
$output = implode("
", $output);
if (strpos($output, 'non-存在于该修订版中')) {
返回 false;
}
返回 "
" 。 $命令。 “
” 。 $output;
}
/**
* 在工作副本或存储库中复制某些内容,记住历史
*
* @param $src
* @param $dst
* @param $comment 字符串指定日志消息
* @return bool true, 如果复制成功,否则返回错误信息
*
* @todo comment needaddslashes for svn commit
*/
静态公共函数复制($src, $dst, $comment)
{
$command = "svn cp $src $dst -m '$comment'";
$output = SvnPeer::runCmd($command);
$output = implode("
", $output);
if (strpos ($output, '提交修订')) {
返回 true;
}
返回 "
" 。 $命令。 “
” 。 $output;
}
/**
* 从版本控制中删除文件和目录
*
* @param $url
* @return bool true,如果删除成功,否则返回错误信息
*
* @ todo 注释需要为 svn commit 添加斜杠
*/
静态公共函数delete($url, $comment)
{
$command = "svn del $url -m ' $comment'";
$output = SvnPeer::runCmd($command);
$output = implode('
', $output);
if (strpos($output, '已提交修订')) {
返回 true;
}
返回“
” 。 $命令。 “
” 。 $output;
}
/**
* 移动和/或重命名工作副本或存储库中的内容
*
* @param $src 字符串主干路径
* @param $dst 字符串新分支路径
* @param $comment string 指定日志消息
* @return bool true,如果移动成功,否则返回错误消息
*
* @todo comment needaddslashes for svn commit
*/
静态公共函数 move($src, $dst, $comment)
{
$command = "svn mv $src $dst -m '$comment'";
$output = SvnPeer::runCmd($command);
$output = implode('
', $output);
if (strpos ($output, '提交修订')) {
返回 true;
}
返回 "
" 。 $命令。 “
” 。 $output;
}
/**
* 在版本控制下创建一个新目录
*
* @param $url string
* @param $comment string svn 消息
* @return bool true,如果创建成功,否则返回错误消息
*
* @todo 注释需要为 svn commit 添加斜杠
*/
静态公共函数 mkdir($url, $comment)
{
$command = "svn mkdir $url -m ' $comment'";
$output = SvnPeer::runCmd($command);
$output = implode('
', $output);
if (strpos($output, '已提交修订')) {
返回 true;
}
返回 "
" 。 $命令。 “
” 。 $output;
}
静态公共函数 diff($pathA, $pathB)
{
$output = SvnPeer::runCmd("svn diff $pathA $pathB");
return implode('
', $output);
}
静态公共函数 checkout($url, $dir)
{
$command = "cd $dir && svn co $url ";
$output = SvnPeer::runCmd($command);
$output = implode('
', $output);
if (strstr($output, '签出修订版本')) {
返回 true;
}
返回 "
" 。 $命令。 “
” 。 $output;
}
静态公共函数更新($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 $ret[0][0];
}
静态公共函数 merge($revision, $url, $dir)
{
$command = "cd $dir && svn merge -r1:$revision $url";
$output = implode('
', SvnPeer::runCmd($command));
if (strstr($output, '文本冲突' )) {
返回 '命令:' . $命令.'
'。 $output;
}
return true;
}
静态公共函数 commit($dir, $comment)
{
$command = "cd $dir && svn commit -m '$comment'";
$output = implode('
', SvnPeer::runCmd($command));
if (strpos($output, '提交的修订版') || empty( $output)) {
return true;
}
return $output;
}
静态公共函数 getStatus($dir)
{
$command = "cd $ dir && svn st";
return SvnPeer::runCmd($command);
}
静态公共函数 hasConflict($dir)
{
$output = SvnPeer::getStatus($ dir);
foreach ($output as $line){
if ('C' == substr(trim($line), 0, 1) || ('!' == substr(trim($ line), 0, 1))){
返回 true;
}
}
返回 false;
}
/**
* 使用 XML 显示一组路径的日志消息
*
* @param 路径字符串
* @return 日志消息字符串
*/
static public function getLog($path)
{
$command = "svn log $path --xml";
$output = SvnPeer::runCmd($command);
return implode('', $output);
}
静态公共函数 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('< ;br>', $output);
preg_match_all("/[0-9] /", $output, $ret);
if (!$ret[0][0]){
返回“
” 。 $命令。 “
” 。 $output;
}
返回 $ret[0][0];
}
/**
* 运行 cmd 并返回结果
*
* @param string 命令行
* @param boolen true 需要添加 svn 身份验证
* @return array svn 输出的内容执行
*/
静态受保护函数 runCmd($command)
{
$authCommand = '--用户名' 。 SVN_用户名。 ' - 密码 ' 。 SVN_密码。 ' --no-auth-cache --non-interactive --config-dir '.SVN_CONFIG_DIR.'.subversion';
exec($command . $authCommand . " 2>&1", $output);
返回$输出;
}
}



文章地址:

转载手工^^请带上论文地址!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn