[ Index ]
 

Code source de Symfony 1.0.0

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/lib/vendor/phing/tasks/system/ -> ExecTask.php (source)

   1  <?php
   2  
   3  /*
   4   *  $Id: ExecTask.php 3076 2006-12-18 08:52:12Z fabien $
   5   *
   6   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   7   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   8   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   9   * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  10   * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  11   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  12   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  13   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  14   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  15   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  16   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  17   *
  18   * This software consists of voluntary contributions made by many individuals
  19   * and is licensed under the LGPL. For more information please see
  20   * <http://phing.info>.
  21   */
  22  
  23  require_once 'phing/Task.php';
  24  
  25  /**
  26   * Executes a command on the shell.
  27   *
  28   * @author   Andreas Aderhold <andi@binarycloud.com>
  29   * @author   Hans Lellelid <hans@xmpl.org>
  30   * @version  $Revision: 1.17 $
  31   * @package  phing.tasks.system
  32   */
  33  class ExecTask extends Task {
  34  
  35      /**
  36       * Command to execute.
  37       * @var string
  38       */
  39      protected $command;
  40      
  41      /**
  42       * Working directory.
  43       * @var File
  44       */
  45      protected $dir;
  46      
  47      /**
  48       * Operating system.
  49       * @var string
  50       */
  51      protected $os;
  52      
  53      /**
  54       * Whether to escape shell command using escapeshellcmd().
  55       * @var boolean
  56       */
  57      protected $escape = false;
  58      
  59      /**
  60       * Where to direct output.
  61       * @var File
  62       */
  63      protected $output;
  64      
  65      /**
  66       * Whether to passthru the output
  67       * @var boolean
  68       */
  69      protected $passthru = false;
  70      
  71      /**
  72       * Where to direct error output.
  73       * @var File
  74       */
  75      protected $error;
  76      
  77      /**
  78       * If spawn is set then [unix] programs will redirect stdout and add '&'.
  79       * @var boolean
  80       */
  81      protected $spawn = false;
  82      
  83      /**
  84       * Whether to check the return code.
  85       * @var boolean
  86       */
  87      protected $checkreturn = false;
  88      
  89      /**
  90       * Main method: wraps execute() command.
  91       * @return void
  92       */
  93      public function main() {
  94          $this->execute();
  95      }
  96      
  97      /**
  98       * Executes a program and returns the return code.
  99       * Output from command is logged at INFO level.
 100       * @return int Return code from execution.
 101       */
 102      public function execute() {
 103      
 104           // test if os match
 105          $myos = Phing::getProperty("os.name");
 106          $this->log("Myos = " . $myos, PROJECT_MSG_VERBOSE);
 107          if (($this->os !== null) && (strpos($os, $myos) === false)) {
 108              // this command will be executed only on the specified OS
 109              $this->log("Not found in " . $os, PROJECT_MSG_VERBOSE);
 110              return 0;
 111          }
 112          
 113           if ($this->dir !== null) {
 114              if ($this->dir->isDirectory()) {
 115                  $currdir = getcwd();
 116                  @chdir($this->dir->getPath());
 117              } else {
 118                  throw new BuildException("Can't chdir to:" . $this->dir->__toString());
 119              }
 120          }
 121  
 122  
 123          if ($this->escape == true) {
 124              // FIXME - figure out whether this is correct behavior
 125              $this->command = escapeshellcmd($this->command);
 126          }
 127          
 128          if ($this->error !== null) {
 129              $this->command .= ' 2> ' . $this->error->getPath();
 130              $this->log("Writing error output to: " . $this->error->getPath());
 131          }
 132          
 133          if ($this->output !== null) {
 134              $this->command .= ' 1> ' . $this->output->getPath();
 135              $this->log("Writing standard output to: " . $this->output->getPath());
 136          } elseif ($this->spawn) {
 137              $this->command .= ' 1>/dev/null';
 138              $this->log("Sending ouptut to /dev/null");
 139          }
 140          
 141          // If neither output nor error are being written to file
 142          // then we'll redirect error to stdout so that we can dump
 143          // it to screen below.
 144  
 145          if ($this->output === null && $this->error === null) {
 146              $this->command .= ' 2>&1';
 147          }
 148                  
 149          // we ignore the spawn boolean for windows
 150          if ($this->spawn) {
 151              $this->command .= ' &';
 152          }
 153  
 154          $this->log("Executing command: " . $this->command);
 155                  
 156          $output = array();
 157          $return = null;
 158          exec($this->command, $output, $return);
 159  
 160          if ($this->dir !== null) {
 161              @chdir($currdir);
 162          }
 163  
 164          foreach($output as $line) {
 165              $this->log($line,  ($this->passthru ? PROJECT_MSG_INFO : PROJECT_MSG_VERBOSE));
 166          }
 167          
 168          if($return != 0 && $this->checkreturn)
 169          {
 170            throw new BuildException("Task exited with code $return");
 171          }
 172          
 173          return $return;
 174      }
 175  
 176      /**
 177       * The command to use.
 178       * @param mixed $command String or string-compatible (e.g. w/ __toString()).
 179       */
 180      function setCommand($command) {
 181          $this->command = "" . $command;
 182      }
 183      
 184      /**
 185       * Whether to use escapeshellcmd() to escape command.
 186       * @param boolean $escape
 187       */
 188      function setEscape($escape) {
 189          $this->escape = (bool) $escape;
 190      }
 191      
 192      /**
 193       * Specify the working directory for executing this command.
 194       * @param PhingFile $dir
 195       */
 196      function setDir(PhingFile $dir) {
 197          $this->dir = $dir;
 198      }
 199      
 200      /**
 201       * Specify OS (or muliple OS) that must match in order to execute this command.
 202       * @param string $os
 203       */
 204      function setOs($os) {
 205          $this->os = (string) $os;
 206      }
 207      
 208      /**
 209       * File to which output should be written.
 210       * @param PhingFile $output
 211       */
 212      function setOutput(PhingFile $f) {
 213          $this->output = $f;
 214      }
 215      
 216      /**
 217       * File to which error output should be written.
 218       * @param PhingFile $output
 219       */
 220      function setError(PhingFile $f) {
 221          $this->error = $f;
 222      }
 223      
 224      /**
 225       * Whether to use passthru the output.
 226       * @param boolean $passthru
 227       */
 228      function setPassthru($passthru) {
 229          $this->passthru = (bool) $passthru;
 230      }
 231      
 232      /**
 233       * Whether to suppress all output and run in the background.
 234       * @param boolean $spawn
 235       */
 236  	function setSpawn($spawn) {
 237          $this->spawn  = (bool) $spawn;
 238      }
 239  
 240      /**
 241       * Whether to check the return code.
 242       * @param boolean $checkreturn
 243       */
 244      function setCheckreturn($checkreturn) {
 245        $this->checkreturn = (bool) $checkreturn;
 246      }
 247  }
 248  


Généré le : Fri Mar 16 22:42:14 2007 par Balluche grâce à PHPXref 0.7