您当前的位置: 首页 > 网站编程 > PHP教程 > 使用PHP编写的SVN类

使用PHP编写的SVN类

作者:不详 来源:网络 发布时间: 2014-08-17 23:22 点击:
以下是使用PHP编写的一个SVN类。需要的朋友可以参考下 复制代码 代码如下: ?php /** * SVN 外部命令 类 * * @author rubekid * * @todo comment need addslashes for svn commit * */ class SvnUtils { /** * * svn 账号 */ const SVN_USERNAME = robot; /** * svn 密

使用PHP编写的SVN类

  以下是使用PHP编写的一个SVN类。需要的朋友可以参考下

  复制代码 代码如下:

  <?php

  /**

  * SVN 外部命令 类

  *

  * @author rubekid

  *

  * @todo comment need addslashes for svn commit

  *

  */

  class SvnUtils {

     /**

      *

      * svn 账号

      */

     const SVN_USERNAME = "robot";

     /**

      * svn 密码

      */

     const SVN_PASSWORD = "robot2013";

     /**

      * 配置文件目录  (任意指定一个临时目录,解决svn: warning: Can't open file '/root/.subversion/servers': Permission denied)

      */

     const SVN_CONFIG_DIR = "/var/tmp/";

     /**

      * svn list

      *

      * @param $repository string

      * @return boolean

      *

      */

     public static function ls($repository) {

         $command = "sudo svn ls " . $repository;

         $output = self::runCmd ( $command );

         $output = implode ( "<br />", $output );

         if (strpos ( $output, 'non-existent in that revision' )) {

             return false;

         }

         return "<br />" . $command . "<br />" . $output;

     }

     /**

      * svn copy

      *

      * @param $src string

      * @param $dst string

      * @param $comment string

      * @return boolean

      *

      */

     public static function copy($src, $dst, $comment) {

         $command = "sudo svn cp $src $dst -m '$comment'";

         $output = self::runCmd ( $command );

         $output = implode ( "<br />", $output );

         if (strpos ( $output, 'Committed revision' )) {

             return true;

         }

         return "<br />" . $command . "<br />" . $output;

     }

     /**

      * svn delete

      *

      * @param $url string

      * @param $comment string

      * @return boolean

      *

      */

     public static function delete($url, $comment) {

         $command = "sudo svn del $url -m '$comment'";

         $output = self::runCmd ( $command );

         $output = implode ( '<br />', $output );

         if (strpos ( $output, 'Committed revision' )) {

             return true;

         }

         return "<br />" . $command . "<br />" . $output;

     }

     /**

      * svn move

      *

      * @param $src string

      * @param $dst string

      * @param $comment string

      * @return boolean

      */

     public static function move($src, $dst, $comment) {

         $command = "sudo svn mv $src $dst -m '$comment'";

         $output = self::runCmd ( $command );

         $output = implode ( '<br />', $output );

         if (strpos ( $output, 'Committed revision' )) {

             return true;

         }

         return "<br />" . $command . "<br />" . $output;

     }

     /**

      * svn mkdir

      *

      * @param $url string

      * @param $comment string

      * @return boolean

      */

     public static function mkdir($url, $comment) {

         $command = "sudo svn mkdir $url -m '$comment'";

         $output = self::runCmd ( $command );

         $output = implode ( '<br />', $output );

         if (strpos ( $output, 'Committed revision' )) {

             return true;

         }

         return "<br />" . $command . "<br />" . $output;

     }

     /**

      * svn diff

      * @param $pathA string

      * @param $pathB string

      * @return string

      */

     public static function diff($pathA, $pathB) {

         $output = self::runCmd ( "sudo svn diff $pathA $pathB" );

         return implode ( '<br />', $output );

     }

     /**

      * svn checkout

      * @param $url string

      * @param $dir string

      * @return boolean

      */

     public static function checkout($url, $dir) {

         $command = "cd $dir && sudo svn co $url";

         $output = self::runCmd ( $command );

         $output = implode ( '<br />', $output );

         if (strstr ( $output, 'Checked out revision' )) {

             return true;

         }

         return "<br />" . $command . "<br />" . $output;

     }

     /**

      * svn update

      * @param $path string

      */

     public static function update($path) {

         $command = "cd $path && sudo svn up";

         $output = self::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];

     }

     /**

      * svn merge

      *

      * @param $revision string

      * @param $url string

      * @param $dir string

      *

      * @return boolean

      */

     public static function merge($revision, $url, $dir) {

         $command = "cd $dir && sudo svn merge -r1:$revision $url";

         $output = implode ( '<br />', self::runCmd ( $command ) );

         if (strstr ( $output, 'Text conflicts' )) {

             return 'Command: ' . $command . '<br />' . $output;

         }

         return true;

     }

     /**

      * svn commit

      *

      * @param $dir string

      * @param $comment string

      *

      * @return boolean

      */

     public static function commit($dir, $comment) {

         $command = "cd $dir && sudo svn commit -m'$comment'";

         $output = implode ( '<br />', self::runCmd ( $command ) );

         if (strpos ( $output, 'Committed revision' ) || empty ( $output )) {

             return true;

         }

         return $output;

     }

     /**

      * svn status (输出WC中文件和目录的状态)

      *

      * @param $dir string

      */

     public static function getStatus($dir) {

         $command = "cd $dir && sudo svn st";

         return self::runCmd ( $command );

     }

     /**

      * svn 冲突

      *

      * @param $dir string

      * @return boolean

      */

     public static function hasConflict($dir) {

         $output = self::getStatus ( $dir );

         foreach ( $output as $line ) {

             if ( substr ( trim ( $line ), 0, 1 ) == 'C' || (substr ( trim ( $line ), 0, 1 ) == '!')) {

                 return true;

             }

         }

         return false;

     }

     /**

      * svn log

      *

      * @param $path string

      * @return string

      *

      */

     public static function getLog($path) {

         $command = "sudo svn log $path --xml";

         $output = self::runCmd ( $command );

         return implode ( '', $output );

     }

     /**

      * svn info

      * @param $path string

      */

     public static function getPathRevision($path) {

         $command = "sudo svn info $path --xml";

         $output = self::runCmd ( $command );

         $string = implode ( '', $output );

         $xml = new SimpleXMLElement ( $string );

         foreach ( $xml->entry [0]->attributes () as $key => $value ) {

             if ( $key == 'revision' ) {

                 return $value;

             }

         }

     }

     /**

      * 获取最新版本号

      * @param $path string

      */

     public static function getHeadRevision($path) {

         $command = "cd $path && sudo svn up";

         $output = self::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];

     }

     /**

      * 获取某文件最早版本号

      *

      * @param $filePath string

      *

      */

     public static function getFileFirstVersion($filePath){

         $command = "sudo svn log {$filePath}";

         $output = self::runCmd ( $command , "|grep -i ^r[0-9]* |awk '{print $1}'");

         if(empty($output)){

             return false;

         }

         return str_replace("r", '', $output[count($output)-1]);

     }

     /**

      * 获取两个版本间修改的文件信息列表

      *

      * @param $fromVersion int

      * @param $headRevision int

      * @param $$path string

      *

      * @return array

      */

     public static function getChangedFiles($path, $fromVersion, $headRevision ){

         $files = array();

         $pipe = "|grep -i ^Index:|awk -F : '{print $2}'";

         $command = "svn diff -r {$fromVersion}:{$headRevision} $path";

         $output = self::runCmd ( $command ,$pipe);

         $files = array_merge($files, $output);

         $command = "svn diff -r {$headRevision}:{$fromVersion} $path"; //文件删除可用逆向对比

         $output = self::runCmd ( $command ,$pipe);

         $files = array_merge($files, $output);

         return array_unique($files);

     }

     /**

      * 获取两个版本间某文件修改 的内容

      *

      * @param $filePath string

      * @param $fromVersion int

      * @param $headRevision int

      *

      * @return array

      */

     public static function getChangedInfo( $filePath, $fromVersion, $headRevision ){

         $command = "sudo svn diff -r {$fromVersion}:{$headRevision} $filePath";

         $output = self::runCmd ( $command );

         return $output;

     }

     /**

      * 查看文件内容

      *

      * @param $filePath string

      * @param $version int

      *

      * @return array

      */

     public static function getFileContent($filePath, $version){

         $command = "sudo svn cat -r {$version} $filePath";

         $output = self::runCmd ( $command );

         return $output;

     }

     /**

      * Run a cmd and return result

      * @param $command string

      * @param $pipe string (可以增加管道对返回数据进行预筛选)

      * @return array

      */

     protected static function runCmd($command , $pipe ="") {

         $authCommand = ' --username ' . self::SVN_USERNAME . ' --password ' . self::SVN_PASSWORD . ' --no-auth-cache --non-interactive --config-dir ' . self::SVN_CONFIG_DIR . '.subversion';

         exec ( $command . $authCommand . " 2>&1" . $pipe, $output );

         return $output;

     }

  }
分享到:
本文"使用PHP编写的SVN类"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4