代码如下 | 复制代码 |
/** * * 该类用于执行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); 返回$输出; } } |
文章地址:
转载手工^^请带上论文地址!