[ 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/ -> UpToDateTask.php (source)

   1  <?php
   2  /*
   3   * $Id: UpToDateTask.php 3076 2006-12-18 08:52:12Z fabien $
   4   *
   5   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   6   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   7   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   8   * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
   9   * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  10   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  11   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  12   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  13   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  14   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  15   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  16   *
  17   * This software consists of voluntary contributions made by many individuals
  18   * and is licensed under the LGPL. For more information please see
  19   * <http://phing.info>.
  20   */
  21  
  22  require_once 'phing/Task.php';
  23  include_once 'phing/tasks/system/condition/Condition.php';
  24  include_once 'phing/util/DirectoryScanner.php';
  25  include_once 'phing/util/SourceFileScanner.php';
  26  include_once 'phing/mappers/MergeMapper.php';
  27  
  28  /**
  29   * Sets the given property if the specified target has a timestamp
  30   * greater than all of the source files.
  31   *
  32   * @author    Hans Lellelid <hans@xmpl.org> (Phing)
  33   * @author    William Ferguson <williamf@mincom.com> (Ant)
  34   * @author    Hiroaki Nakamura <hnakamur@mc.neweb.ne.jp> (Ant)
  35   * @author    Stefan Bodewig <stefan.bodewig@epost.de> (Ant)
  36   * @version   $Revision: 1.6 $
  37   * @package   phing.tasks.system
  38   */
  39  class UpToDateTask extends Task implements Condition {
  40  
  41      private $_property;
  42      private $_value;
  43      private $_sourceFile;
  44      private $_targetFile;
  45      private $sourceFileSets = array();
  46  
  47      protected $mapperElement = null;
  48  
  49      /**
  50       * The property to set if the target file is more up-to-date than
  51       * (each of) the source file(s).
  52       *
  53       * @param property the name of the property to set if Target is up-to-date.
  54       */
  55      public function setProperty($property) {
  56          $this->_property = $property;
  57      }
  58  
  59      /**
  60       * The value to set the named property to if the target file is more
  61       * up-to-date than (each of) the source file(s). Defaults to 'true'.
  62       *
  63       * @param value the value to set the property to if Target is up-to-date
  64       */
  65      public function setValue($value) {
  66          $this->_value = $value;
  67      }
  68  
  69      /**
  70       * Returns the value, or "true" if a specific value wasn't provided.
  71       */
  72      private function getValue() {
  73          return ($this->_value !== null) ? $this->_value : "true";
  74      } 
  75  
  76      /**
  77       * The file which must be more up-to-date than (each of) the source file(s)
  78       * if the property is to be set.
  79       *
  80       * @param file the file we are checking against.
  81       */
  82      public function setTargetFile($file) {
  83          if (is_string($file)) {
  84              $file = new PhingFile($file);
  85          }
  86          $this->_targetFile = $file;
  87      }
  88  
  89      /**
  90       * The file that must be older than the target file
  91       * if the property is to be set.
  92       *
  93       * @param file the file we are checking against the target file.
  94       */
  95      public function setSrcfile($file) {
  96          if (is_string($file)) {
  97              $file = new PhingFile($file);
  98          }
  99          $this->_sourceFile = $file;
 100      }
 101  
 102      /**
 103       * Nested <srcfiles> element.
 104       */
 105      public function createSrcfiles() {
 106          $fs = new FileSet();
 107          $this->sourceFileSets[] = $fs;
 108          return $fs;
 109      }
 110  
 111      /**
 112       * Defines the FileNameMapper to use (nested mapper element).
 113       */
 114      public function createMapper() {
 115          if ($this->mapperElement !== null) {
 116              throw new BuildException("Cannot define more than one mapper",
 117                                       $this->location);
 118          }
 119          $this->mapperElement = new Mapper($this->getProject());
 120          return $this->mapperElement;
 121      }
 122  
 123      /**
 124       * Evaluate (all) target and source file(s) to
 125       * see if the target(s) is/are up-to-date.
 126       * @return boolean
 127       */
 128      public function evaluate() {
 129          if (count($this->sourceFileSets) === 0 && $this->_sourceFile === null) {
 130              throw new BuildException("At least one srcfile or a nested "
 131                                       . "<srcfiles> element must be set.");
 132          }
 133  
 134          if (count($this->sourceFileSets) > 0 && $this->_sourceFile !== null) {
 135              throw new BuildException("Cannot specify both the srcfile "
 136                                       . "attribute and a nested <srcfiles> "
 137                                       . "element.");
 138          }
 139  
 140          if ($this->_targetFile === null && $this->mapperElement === null) {
 141              throw new BuildException("The targetfile attribute or a nested "
 142                                       . "mapper element must be set.");
 143          }
 144  
 145          // if the target file is not there, then it can't be up-to-date
 146          if ($this->_targetFile !== null && !$this->_targetFile->exists()) {
 147              return false;
 148          } 
 149  
 150          // if the source file isn't there, throw an exception
 151          if ($this->_sourceFile !== null && !$this->_sourceFile->exists()) {
 152              throw new BuildException($this->_sourceFile->getAbsolutePath() 
 153                                       . " not found.");
 154          }
 155  
 156          $upToDate = true;
 157          for($i=0,$size=count($this->sourceFileSets); $i < $size && $upToDate; $i++) {
 158              $fs = $this->sourceFileSets[$i];
 159              $ds = $fs->getDirectoryScanner($this->project);
 160              $upToDate = $upToDate && $this->scanDir($fs->getDir($this->project),
 161                                             $ds->getIncludedFiles());
 162          }
 163  
 164          if ($this->_sourceFile !== null) {
 165              if ($this->mapperElement === null) {
 166                  $upToDate = $upToDate &&
 167                      ($this->_targetFile->lastModified() >= $this->_sourceFile->lastModified());
 168              } else {
 169                  $sfs = new SourceFileScanner($this);
 170                  $upToDate = $upToDate &&
 171                      count($sfs->restrict($this->_sourceFile->getAbsolutePath(),
 172                                    null, null, 
 173                                    $this->mapperElement->getImplementation())) === 0;                   
 174              }
 175          }
 176          return $upToDate;
 177      }
 178  
 179  
 180      /**
 181       * Sets property to true if target file(s) have a more recent timestamp
 182       * than (each of) the corresponding source file(s).
 183       * @throws BuildException 
 184       */
 185      public function main() {
 186          if ($this->_property === null) {
 187              throw new BuildException("property attribute is required.", 
 188                                       $this->location);
 189          }
 190          $upToDate = $this->evaluate();
 191          if ($upToDate) {
 192              $this->project->setNewProperty($this->_property, $this->getValue());
 193              if ($this->mapperElement === null) {
 194                  $this->log("File \"" . $this->_targetFile->getAbsolutePath() 
 195                      . "\" is up-to-date.", PROJECT_MSG_VERBOSE);
 196              } else {
 197                  $this->log("All target files are up-to-date.",
 198                      PROJECT_MSG_VERBOSE);
 199              }
 200          }
 201      }
 202  
 203      protected function scanDir(PhingFile $srcDir, $files) {
 204          $sfs = new SourceFileScanner($this);
 205          $mapper = null;
 206          $dir = $srcDir;
 207          if ($this->mapperElement === null) {
 208              $mm = new MergeMapper();
 209              $mm->setTo($this->_targetFile->getAbsolutePath());
 210              $mapper = $mm;
 211              $dir = null;
 212          } else {
 213              $mapper = $this->mapperElement->getImplementation();
 214          }
 215          return (count($sfs->restrict($files, $srcDir, $dir, $mapper)) === 0);
 216      }
 217  }


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