SvnPeer.php <div class="codetitle"><a style="CURSOR: pointer" data="5253" class="copybut" id="copybut5253" onclick="doCopy('code5253')"> 代码如下:<div class="codebody" id="code5253"> <?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(" ",$output); if (strpos($output,'non-existent in that revision')) { return false; } return " " . $command . " " . $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(" ",'Committed revision')) { return true; } return " " . $command . " " . $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(' ','Committed revision')) { return true; } return " " . $command . " " . $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,$comment) { $command = "svn mv $src $dst -m '$comment'"; $output = SvnPeer::runCmd($command); $output = implode(' ','Committed revision')) { return true; } return " " . $command . " " . $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(' ','Committed revision')) { return true; } return " " . $command . " " . $output; } static public function diff($pathA,$pathB) { $output = SvnPeer::runCmd("svn diff $pathA $pathB"); return implode(' ',$output); } static public function checkout($url,$dir) { $command = "cd $dir && svn co $url"; $output = SvnPeer::runCmd($command); $output = implode(' ',$output); if (strstr($output,'Checked out revision')) { return true; } return " " . $command . " " . $output; } static public function update($path) { $command = "cd $path && svn up"; $output = SvnPeer::runCmd($command); $output = implode(' ',$output); preg_match_all("/[0-9]+/",$output,$ret); if (!$ret[0][0]){ return " " . $command . " " . $output; } return $ret[0][0]; } static public function merge($revision,$url,$dir) { $command = "cd $dir && svn merge -r1:$revision $url"; $output = implode(' ',SvnPeer::runCmd($command)); if (strstr($output,'Text conflicts')) { return 'Command: ' . $command .' '. $output; } return true; } static public function commit($dir,$comment) { $command = "cd $dir && svn commit -m'$comment'"; $output = implode(' ',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),1) || ('!' == substr(trim($line),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(' ',$ret); if (!$ret[0][0]){ return " " . $command . " " . $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; } }
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|