php操作svn的工具类

<?php
	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等操作,加入了语句校验、冲突分析等判断,

原文链接如有侵权,联系删除!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值