亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

使用PHP編寫的SVN類

2020-03-22 18:02:21
字體:
來源:轉載
供稿:網友
復制代碼 代碼如下:
?php
/**
* SVN 外部命令 類
*
* @author rubekid
*
* @todo comment need addslashes for svn commit
*
*/
html' target='_blank'>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教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲图片欧洲图片av| 4438全国亚洲精品在线观看视频| 91在线免费网站| 国产精品视频地址| 欧美电影免费观看高清| 久久久噜噜噜久噜久久| 亚洲国产日韩精品在线| 伊人久久精品视频| 日韩欧美精品在线观看| 色多多国产成人永久免费网站| 欧美裸体男粗大视频在线观看| 欧美日韩国产精品一区二区不卡中文| 亚洲国产精品va| 欧美色道久久88综合亚洲精品| 亚洲国产精品嫩草影院久久| 国产精品专区第二| 久久天天躁狠狠躁老女人| 日韩久久午夜影院| 清纯唯美日韩制服另类| 亚洲精品wwwww| 久久久精品在线| 亚洲淫片在线视频| 最近中文字幕2019免费| 国产情人节一区| 黑人巨大精品欧美一区二区免费| 欧美亚州一区二区三区| 超碰精品一区二区三区乱码| 国产精品成人一区二区三区吃奶| 亚洲精品v天堂中文字幕| 久久久国产一区二区| 中文字幕日韩高清| 91久久久在线| 亚洲一级黄色av| 欧美日韩国产va另类| 亚洲aa在线观看| 久久乐国产精品| 久久久亚洲国产| 久久久999成人| 欧美日韩成人在线视频| 国产精品18久久久久久首页狼| 国产激情久久久久| 国产精品久久久久久久午夜| 久久在线精品视频| 亚洲黄色在线看| 日韩av在线网| 欧美日韩国产中字| 久久人人爽人人| 91精品国产自产在线| 亚洲国内精品视频| xvideos亚洲| 91精品国产高清自在线| 国模私拍视频一区| 精品久久久91| 精品一区二区三区三区| 国产精品视频午夜| 日韩精品免费电影| 在线视频免费一区二区| 国产精品福利在线| 久久精品视频99| 国产精品www色诱视频| 日本国产高清不卡| 日韩大片免费观看视频播放| 欧美丰满少妇xxxxx| 色婷婷av一区二区三区在线观看| 欧美国产日韩免费| 97视频免费在线看| 亚洲奶大毛多的老太婆| 国模精品视频一区二区三区| 97在线日本国产| 成人激情电影一区二区| 日韩成人小视频| 中文字幕国产精品| 亚洲精品ady| 久久艹在线视频| 亚洲级视频在线观看免费1级| 成人激情电影一区二区| 国产欧美在线看| 国产日韩精品在线| 91亚洲精品视频| 国产自产女人91一区在线观看| 欧美国产亚洲精品久久久8v| 91豆花精品一区| 亚洲码在线观看| 久久久国产一区二区| 色偷偷888欧美精品久久久| 日韩小视频在线观看| 亚洲成色777777在线观看影院| 国产不卡av在线免费观看| 成人午夜在线视频一区| 国产精品久久久久久久av大片| 日韩在线激情视频| 久久琪琪电影院| 国产91露脸中文字幕在线| 国产精品草莓在线免费观看| 全亚洲最色的网站在线观看| 精品香蕉在线观看视频一| 亚洲精选在线观看| 精品免费在线观看| 国产a级全部精品| 久久91超碰青草是什么| 久久成人精品一区二区三区| 992tv在线成人免费观看| 欧美肥婆姓交大片| 国产精品久久综合av爱欲tv| 亚洲国内精品视频| 日韩福利伦理影院免费| 欧美在线视频观看| 欧美性少妇18aaaa视频| 国产日韩在线亚洲字幕中文| 国内精品一区二区三区四区| 69国产精品成人在线播放| 伊人亚洲福利一区二区三区| 久久99国产精品自在自在app| 一区二区三区国产视频| 久久久亚洲欧洲日产国码aⅴ| 中文字幕久久久av一区| 俺也去精品视频在线观看| 国产精品专区h在线观看| 亚洲护士老师的毛茸茸最新章节| 美女精品久久久| 亚洲人成网站免费播放| 色悠悠国产精品| 亚洲国产成人91精品| 亚洲欧美日韩图片| 中文字幕一精品亚洲无线一区| 日韩av在线精品| 色诱女教师一区二区三区| 亚洲第一区中文99精品| 国产视频久久久久久久| 国产91精品久久久久久| 黑人巨大精品欧美一区二区三区| 亚洲精品国产欧美| 中文字幕欧美视频在线| 欧美日韩亚洲天堂| 久久亚洲精品视频| 亚洲精品国产精品乱码不99按摩| xxxxxxxxx欧美| 欧美小视频在线| 911国产网站尤物在线观看| 日韩亚洲一区二区| 国产脚交av在线一区二区| 久久九九全国免费精品观看| 亚洲午夜av久久乱码| 欧美日韩第一视频| 欧美国产亚洲视频| 91免费在线视频网站| 91福利视频网| 91成人精品网站| 亚洲人成绝费网站色www| 欧美日韩午夜视频在线观看| 国产精品96久久久久久又黄又硬| 91精品免费久久久久久久久| 欧美性猛交xxxx乱大交蜜桃| 两个人的视频www国产精品| 国产91ⅴ在线精品免费观看| 国产精品视频中文字幕91| 精品欧美激情精品一区| 欧美夫妻性生活视频| 在线观看国产成人av片| 最近中文字幕日韩精品| 国产精品一区二区久久精品| 欧美黑人国产人伦爽爽爽| 国产aⅴ夜夜欢一区二区三区| 中文字幕一区二区精品|