Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php/** $Id: SvnBaseTask.php 329 2007-12-22 17:12:59Z mrook $** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.** This software consists of voluntary contributions made by many individuals* and is licensed under the LGPL. For more information please see* <http://phing.info>.*/include_once 'phing/Task.php';/*** Base class for Subversion tasks** @author Michiel Rook <michiel.rook@gmail.com>* @author Andrew Eddie <andrew.eddie@jamboworks.com>* @version $Id: SvnBaseTask.php 329 2007-12-22 17:12:59Z mrook $* @package phing.tasks.ext.svn* @see VersionControl_SVN* @since 2.2.0*/abstract class SvnBaseTask extends Task{private $workingCopy = "";private $repositoryUrl = "";private $svnPath = "/usr/bin/svn";private $svn = NULL;private $mode = "";private $svnArgs = array();private $svnSwitches = array();private $toDir = "";/*** Initialize Task.* This method includes any necessary SVN libraries and triggers* appropriate error if they cannot be found. This is not done in header* because we may want this class to be loaded w/o triggering an error.*/function init() {include_once 'VersionControl/SVN.php';if (!class_exists('VersionControl_SVN')) {throw new Exception("SvnLastRevisionTask depends on PEAR VersionControl_SVN package being installed.");}}/*** Sets the path to the workingcopy*/function setWorkingCopy($workingCopy){$this->workingCopy = $workingCopy;}/*** Returns the path to the workingcopy*/function getWorkingCopy(){return $this->workingCopy;}/*** Sets the path/URI to the repository*/function setRepositoryUrl($repositoryUrl){$this->repositoryUrl = $repositoryUrl;}/*** Returns the path/URI to the repository*/function getRepositoryUrl(){return $this->repositoryUrl;}/*** Sets the path to the SVN executable*/function setSvnPath($svnPath){$this->svnPath = $svnPath;}/*** Returns the path to the SVN executable*/function getSvnPath(){return $this->svnPath;}//// Args///*** Sets the path to export/checkout to*/function setToDir($toDir){$this->toDir = $toDir;}/*** Returns the path to export/checkout to*/function getToDir(){return $this->toDir;}//// Switches///*** Sets the force switch*/function setForce($value){$this->svnSwitches['force'] = $value;}/*** Returns the force switch*/function getForce(){return isset( $this->svnSwitches['force'] ) ? $this->svnSwitches['force'] : '';}/*** Sets the username of the user to export*/function setUsername($value){$this->svnSwitches['username'] = $value;}/*** Returns the username*/function getUsername(){return isset( $this->svnSwitches['username'] ) ? $this->svnSwitches['username'] : '';}/*** Sets the password of the user to export*/function setPassword($value){$this->svnSwitches['password'] = $value;}/*** Returns the password*/function getPassword(){return isset( $this->svnSwitches['password'] ) ? $this->svnSwitches['password'] : '';}/*** Sets the no-auth-cache switch*/function setNoCache($value){$this->svnSwitches['no-auth-cache'] = $value;}/*** Returns the no-auth-cache switch*/function getNoCache(){return isset( $this->svnSwitches['no-auth-cache'] ) ? $this->svnSwitches['no-auth-cache'] : '';}/*** Sets the non-recursive switch*/function setRecursive($value){$this->svnSwitches['non-recursive'] = is_bool($value) ? !$value : TRUE;}/*** Returns the non-recursive switch*/function getRecursive(){return isset( $this->svnSwitches['non-recursive'] ) ? $this->svnSwitches['non-recursive'] : '';}/*** Sets the ignore-externals switch*/function setIgnoreExternals($value){$this->svnSwitches['ignore-externals'] = $value;}/*** Returns the ignore-externals switch*/function getIgnoreExternals(){return isset( $this->svnSwitches['ignore-externals'] ) ? $this->svnSwitches['ignore-externals'] : '';}/*** Creates a VersionControl_SVN class based on $mode** @param string The SVN mode to use (info, export, checkout, ...)* @throws BuildException*/protected function setup($mode){$this->mode = $mode;// Set up runtime options. Will be passed to all// subclasses.$options = array('fetchmode' => VERSIONCONTROL_SVN_FETCHMODE_ASSOC, 'svn_path' => $this->getSvnPath());// Pass array of subcommands we need to factory$this->svn = VersionControl_SVN::factory($mode, $options);if (!empty($this->repositoryUrl)){$this->svnArgs = array($this->repositoryUrl);}elseif (!empty($this->workingCopy)){if (is_dir($this->workingCopy)){if (in_array(".svn", scandir($this->workingCopy))){$this->svnArgs = array($this->workingCopy);}else{throw new BuildException("'".$this->workingCopy."' doesn't seem to be a working copy");}}elseif ($mode=='info' ){if (is_file($this->workingCopy)){$this->svnArgs = array($this->workingCopy);}else{throw new BuildException("'".$this->workingCopy."' is not a directory nor a file");}}else{throw new BuildException("'".$this->workingCopy."' is not a directory");}}}/*** Executes the constructed VersionControl_SVN instance** @param array Additional arguments to pass to SVN.* @param array Switches to pass to SVN.* @return string Output generated by SVN.*/protected function run($args = array(), $switches = array()){$svnstack = PEAR_ErrorStack::singleton('VersionControl_SVN');$tempArgs = $this->svnArgs;$tempArgs = array_merge($tempArgs, $args);$tempSwitches = $this->svnSwitches;$tempSwitches = array_merge($tempSwitches, $switches);if ($output = $this->svn->run($tempArgs, $tempSwitches)){return $output;}else{if (count($errs = $svnstack->getErrors())){$err = current($errs);throw new BuildException("Failed to run the 'svn " . $this->mode . "' command: " . $err['message']);}}}}