一个关于php操作svn的功能类
来源:互联网 发布:3dsmax2012 激活软件 编辑:程序博客网 时间:2024/05/20 13:37
最近项目有需求需要定期svn更新项目,并打包成下载包供下载,参考了网上的一些相关代码后写了如下一个用来进行svn操作的小组件
关于php进行zip打包的组件:http://blog.csdn.net/meeeen7/article/details/78297467
关于php进行download下载的组件:http://blog.csdn.net/meeeen7/article/details/78297528
define('SVN_USERNAME','');define('SVN_PASSWORD','');class svnUtil { /** * 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 = svnUtil::runCmd($command); $output = implode("<br>", $output); if (strpos($output, 'non-existent in that revision')) { return false; } return "<br>" . $command . "<br>" . $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 = svnUtil::runCmd($command); $output = implode("<br>", $output); if (strpos($output, 'Committed revision')) { return true; } return "<br>" . $command . "<br>" . $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 = svnUtil::runCmd($command); $output = implode('<br>', $output); if (strpos($output, 'Committed revision')) { return true; } return "<br>" . $command . "<br>" . $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, $dst, $comment) { $command = "svn mv $src $dst -m '$comment'"; $output = svnUtil::runCmd($command); $output = implode('<br>', $output); if (strpos($output, 'Committed revision')) { return true; } return "<br>" . $command . "<br>" . $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 = svnUtil::runCmd($command); $output = implode('<br>', $output); if (strpos($output, 'Committed revision')) { return true; } return "<br>" . $command . "<br>" . $output; } static public function diff($pathA, $pathB) { $output = svnUtil::runCmd("svn diff $pathA $pathB"); return implode('<br>', $output); } static public function checkout($url, $dir) { $command = "cd $dir && svn co $url"; $output = svnUtil::runCmd($command); $output = implode('<br>', $output); if (strstr($output, 'Checked out revision')) { return true; } return "<br>" . $command . "<br>" . $output; } static public function update($path) { $command = "cd $path && svn up"; $output = svnUtil::runCmd($command); $output = implode('<br>', $output); preg_match_all("/[0-9]+/", $output, $ret); if (!$ret[0][0]){ return "<br>" . $command . "<br>" . $output; } return $ret[0][0]; } static public function merge($revision, $url, $dir) { $command = "cd $dir && svn merge -r1:$revision $url"; $output = implode('<br>', svnUtil::runCmd($command)); if (strstr($output, 'Text conflicts')) { return 'Command: ' . $command .'<br>'. $output; } return true; } static public function commit($dir, $comment) { $command = "cd $dir && svn commit -m'$comment'"; $output = implode('<br>', svnUtil::runCmd($command)); if (strpos($output, 'Committed revision') || empty($output)) { return true; } return $output; } static public function getStatus($dir) { $command = "cd $dir && svn st"; return svnUtil::runCmd($command); } static public function hasConflict($dir) { $output = svnUtil::getStatus($dir); foreach ($output as $line){ if ('C' == substr(trim($line), 0, 1) || ('!' == substr(trim($line), 0, 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 = svnUtil::runCmd($command); return implode('', $output); } static public function getPathRevision($path) { $command = "svn info $path --xml"; $output = svnUtil::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 = svnUtil::runCmd($command); $output = implode('<br>', $output); preg_match_all("/[0-9]+/", $output, $ret); if (!$ret[0][0]){ return "<br>" . $command . "<br>" . $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; }}
其中核心功能是调用php的exec函数来执行shell命令,其他封装的部分功能函数主要是方便快速进行checkout、svnup等操作,加入了语句校验、冲突分析等判断,
思路类似数据库pdo连接类等,使用前需要事先define SVN_USERNAME和SVN_PASSWORD两个静态变量
阅读全文
0 0
- 一个关于php操作svn的功能类
- 一个关于php操作进行zip打包的压缩类
- 关于FTP操作的功能类
- 一个关于php将资源提供进行下载的操作类
- 一个PHP文件操作的类
- 打包一个PHP操作MYSQL的类
- 操作MYSQL的一个PHP类
- 封装一个自己的php操作类
- 一个简洁的PHP操作Access类
- php写一个操作mysql的类
- 一个关于操作局域网的类
- PHP XML Library:一个不错的PHP XML操作类
- 关于SVN配置文件的一个小例子
- PHP并发操作时的加锁功能
- 关于软件中的插件类功能的一个实现
- 一个关于复合型枚举标志位的功能类
- 关于事务的操作功能描述
- 实现一个简单的php操作SQLite的类
- 软考错题合集之15-5-AM
- apache kafka系列之在zookeeper中存储结构
- JavaBean规范
- 二维数组按字段去重
- Spring事务管理
- 一个关于php操作svn的功能类
- Hibernate关联关系总结
- 每天一道LeetCode-----平面木桶最大容量,以较小的纵坐标为高,横坐标差为底
- Oracle中sequence的使用方法
- Android填坑之旅(第二十篇)如何在Activity/Fragment结束时处理异步回调?
- git使用
- Angular Js队列顺序执行函数
- 图像识别实验过程(二)图像数据集的扩展
- 【更新】条形码组件Aspose.BarCode 10月新版V17.10发布 | 附下载