SvnPeer.php
复制代码 代码如下:
<?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("<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 = SvnPeer::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 = SvnPeer::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 = SvnPeer::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 = SvnPeer::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 = SvnPeer::runCmd("svn diff $pathA $pathB");
return implode('<br>', $output);
}
static public function checkout($url, $dir)
{
$command = "cd $dir && svn co $url";
$output = SvnPeer::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 = SvnPeer::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>', SvnPeer::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>', 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), 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 = 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('<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;
}
}
相关推荐:
jquery中的$(document).ready()与window.onload的区别
asp.net Forms身份验证和基于角色的权限访问
DOM 脚本编程中的兄弟节点
ExtJS Grid使用SimpleStore、多选框的方法
FCKEditor网页编辑器 几点使用心得
php UTF8 文件的签名问题
Mootools 1.2教程 输入过滤第一部分(数字)
PHP 日常开发小技巧
VBScript 算一算你从出生到现在共计多少天
js 冒泡事件与事件监听使用分析
牛奶包装带上的秘密—让你知道牛奶真正生产日期
JS OOP包机制,类创建的方法定义
vbs 搜索代理地址实现代码[小偷程序]
读大数据量的XML文件的读取问题
JavaScript 炫彩的文字
CSS Filter背景透明提示
JavaScript 自动完成脚本整理(33个)
php self,$this,const,static,-&gt;的使用
Javascript 日期处理之时区问题
用document.documentElement取代document.body的原因分析
js url传值中文乱码之解决之道
彻底解决页面文字编码乱码问题
VBS操作Excel常见方法
javascript 指定区域内图片等比例缩放实现代码 脚本之家整合版 <font color=red>原创</font>
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
asp.net TextBox回车触发事件 图片在img显示
asp 获取url函数小结
SQL 随机查询 包括(sqlserver,mysql,access等)
prototype 中文参数乱码解决方案
正则表达式高级技巧及实例详解 笨活儿
jquery checkbox全选反选效果代码
测试控制台使用方法
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
JavaScript Array扩展实现代码
Dojo 学习笔记入门篇 First Dojo Example
javascript获得CheckBoxList选中的数量
js文件中调用js的实现方法小结
让链接必须按先后顺序点击的JS代码
javascript 面向对象编程 function也是类
Js 打字效果 逐一出现的文字
jQuery与javascript对照学习 获取父子前后元素 实现代码
javascript currying返回函数的函数
php面向对象全攻略 (十六) 对象的串行化
asp.net 页面转向 Response.Redirect, Server.Transfer, Server.Execute的区别
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
php 生成饼图 三维饼图
php 服务器调试 Zend Debugger 的安装教程
JavaScript 平滑文字闪烁
理解 JavaScript 预解析
php 攻击方法之谈php+mysql注射语句构造