/**
  * Copies a file using filter chains.
  * 
  * @param PhingFile $sourceFile
  * @param PhingFile $destFile
  * @param boolean $overwrite
  * @param boolean $preserveLastModified
  * @param array $filterChains 
  * @param Project $project
  * @return void
  */
 function copyFile(PhingFile $sourceFile, PhingFile $destFile, $overwrite = false, $preserveLastModified = true, &$filterChains = null, Project $project)
 {
     if ($overwrite || !$destFile->exists() || $destFile->lastModified() < $sourceFile->lastModified()) {
         if ($destFile->exists() && $destFile->isFile()) {
             $destFile->delete();
         }
         // ensure that parent dir of dest file exists!
         $parent = $destFile->getParentFile();
         if ($parent !== null && !$parent->exists()) {
             $parent->mkdirs();
         }
         if (is_array($filterChains) && !empty($filterChains)) {
             $in = self::getChainedReader(new BufferedReader(new FileReader($sourceFile)), $filterChains, $project);
             $out = new BufferedWriter(new FileWriter($destFile));
             // New read() methods returns a big buffer.
             while (-1 !== ($buffer = $in->read())) {
                 // -1 indicates EOF
                 $out->write($buffer);
             }
             if ($in !== null) {
                 $in->close();
             }
             if ($out !== null) {
                 $out->close();
             }
         } else {
             // simple copy (no filtering)
             $sourceFile->copyTo($destFile);
         }
         if ($preserveLastModified) {
             $destFile->setLastModified($sourceFile->lastModified());
         }
     }
 }
Example #2
0
 /**
  * create the directory and all parents
  *
  * @throws BuildException if dir is somehow invalid, or creation failed.
  */
 public function main()
 {
     if ($this->dir === null) {
         throw new BuildException("dir attribute is required", $this->location);
     }
     if ($this->dir->isFile()) {
         throw new BuildException("Unable to create directory as a file already exists with that name: " . $this->dir->getAbsolutePath());
     }
     if (!$this->dir->exists()) {
         $result = $this->dir->mkdirs($this->mode);
         if (!$result) {
             if ($this->dir->exists()) {
                 $this->log("A different process or task has already created " . $this->dir->getAbsolutePath());
                 return;
             }
             $msg = "Directory " . $this->dir->getAbsolutePath() . " creation was not successful for an unknown reason";
             throw new BuildException($msg, $this->location);
         }
         $this->log("Created dir: " . $this->dir->getAbsolutePath());
     }
 }
 /**
  * Copies a file using filter chains.
  *
  * @param  PhingFile $sourceFile
  * @param  PhingFile $destFile
  * @param  boolean   $overwrite
  * @param  boolean   $preserveLastModified
  * @param  array     $filterChains
  * @param  Project   $project
  * @param  integer   $mode
  * @param bool       $preservePermissions
  *
  * @throws Exception
  * @throws IOException
  * @return void
  */
 public function copyFile(PhingFile $sourceFile, PhingFile $destFile, $overwrite = false, $preserveLastModified = true, &$filterChains = null, Project $project, $mode = 0755, $preservePermissions = true)
 {
     if ($overwrite || !$destFile->exists() || $destFile->lastModified() < $sourceFile->lastModified()) {
         if ($destFile->exists() && $destFile->isFile()) {
             $destFile->delete();
         }
         // ensure that parent dir of dest file exists!
         $parent = $destFile->getParentFile();
         if ($parent !== null && !$parent->exists()) {
             // Setting source directory permissions to target
             // (On permissions preservation, the target directory permissions
             // will be inherited from the source directory, otherwise the 'mode'
             // will be used)
             $dirMode = $preservePermissions ? $sourceFile->getParentFile()->getMode() : $mode;
             $parent->mkdirs($dirMode);
         }
         if (is_array($filterChains) && !empty($filterChains)) {
             $in = self::getChainedReader(new BufferedReader(new FileReader($sourceFile)), $filterChains, $project);
             $out = new BufferedWriter(new FileWriter($destFile));
             // New read() methods returns a big buffer.
             while (-1 !== ($buffer = $in->read())) {
                 // -1 indicates EOF
                 $out->write($buffer);
             }
             if ($in !== null) {
                 $in->close();
             }
             if ($out !== null) {
                 $out->close();
             }
             // Set/Copy the permissions on the target
             if ($preservePermissions === true) {
                 $destFile->setMode($sourceFile->getMode());
             }
         } else {
             // simple copy (no filtering)
             $sourceFile->copyTo($destFile);
             // By default, PHP::Copy also copies the file permissions. Therefore,
             // re-setting the mode with the "user file-creation mask" information.
             if ($preservePermissions === false) {
                 $destFile->setMode(FileUtils::getDefaultFileCreationMask(false, true));
             }
         }
         if ($preserveLastModified && !$destFile->isLink()) {
             $destFile->setLastModified($sourceFile->lastModified());
         }
     }
 }
Example #4
0
 private function _checkFile1(PhingFile $file)
 {
     // Resolve symbolic links
     if ($this->followSymlinks && $file->isLink()) {
         $file = new PhingFile($file->getLinkTarget());
     }
     if ($this->type !== null) {
         if ($this->type === "dir") {
             return $file->isDirectory();
         } else {
             if ($this->type === "file") {
                 return $file->isFile();
             }
         }
     }
     return $file->exists();
 }
    /**
     * @return void
     */
    protected function _verifyManifest()
    {
        if (!$this->_file->isFile() || !$this->_file->canRead()) {
            throw new BuildException(
                'Failed reading from manifest file',
                $this->location
            );
        }

        $manifest = array ();
        $fp = fopen($this->_file, 'r');
        while (true == ($line = trim(fgets($fp)))) {
            list ($path, $hash) = explode("\t", $line);
            $manifest[$path] = $hash;
        }
        fclose($fp);

        $verified = true;

        // Check for files present which are not in the manifest
        $filesNotInManifest = array_keys(array_diff_key($manifest, $this->_hashes));
        if (!empty ($filesNotInManifest)) {
            $verified = false;
            $this->log(
                'There are ' . count($filesNotInManifest) . ' files present which are not listed in the manifest',
                PROJECT::MSG_WARN
            );
            foreach ($filesNotInManifest as $path) {
                $this->log(
                    'Extra file: ' . $path,
                    PROJECT::MSG_WARN
                );
            }
            unset ($path);
        }
        unset ($filesNotInManifest);

        // Check for files listed in the manifest which are not present
        $filesNotPresent = array_keys(array_diff_key($this->_hashes, $manifest));
        if (!empty ($filesNotPresent)) {
            $verified = false;
            $this->log(
                'There are ' . count($filesNotPresent) . ' files listed in the manifest which are not present',
                PROJECT::MSG_WARN
            );
            foreach ($filesNotPresent as $path) {
                $this->log(
                    'Missing file: ' . $path,
                    PROJECT::MSG_WARN
                );
            }
            unset ($path);
        }
        unset ($filesNotPresent);

        // Compare manifest hashes with the computed hashes
        $filesPresent = array_keys(array_intersect_key($manifest, $this->_hashes));
        foreach ($filesPresent as $path) {
            if ($manifest[$path] != $this->_hashes[$path]) {
                $verified = false;
                $this->log(
                    'Hashes do not match: ' . $path,
                    PROJECT::MSG_WARN
                );
            }
        }
        unset ($filesPresent);

        if (!$verified) {
            throw new BuildException(
                'Manifest verification failed'
            );
        }

        $this->log('Manifest verification successful');
    }
 private function _checkFile1(PhingFile $file)
 {
     if ($this->type !== null) {
         if ($this->type === "dir") {
             return $file->isDirectory();
         } else {
             if ($this->type === "file") {
                 return $file->isFile();
             }
         }
     }
     return $file->exists();
 }
Example #7
0
 /**
  * @param PhingFile $file
  * @return bool
  * @throws IOException
  */
 private function _checkFile1(PhingFile $file)
 {
     // Resolve symbolic links
     if ($this->followSymlinks && $file->isLink()) {
         $linkTarget = new PhingFile($file->getLinkTarget());
         if ($linkTarget->isAbsolute()) {
             $file = $linkTarget;
         } else {
             $fs = FileSystem::getFileSystem();
             $file = new PhingFile($fs->resolve($fs->normalize($file->getParent()), $fs->normalize($file->getLinkTarget())));
         }
     }
     if ($this->type !== null) {
         if ($this->type === "dir") {
             return $file->isDirectory();
         } else {
             if ($this->type === "file") {
                 return $file->isFile();
             }
         }
     }
     return $file->exists();
 }
 /**
  * Do the work
  *
  * @throws BuildException
  */
 public function main()
 {
     $this->verifyConfiguration();
     $this->prepareEncoderCommand();
     try {
         if (empty($this->filesets)) {
             throw new BuildException("You must supply nested fileset.", $this->getLocation());
         }
         $encodedFilesCounter = 0;
         foreach ($this->filesets as $fs) {
             /* @var $fs FileSet */
             /* @var $fsBasedir PhingFile */
             $fsBasedir = $fs->getDir($this->project)->getAbsolutePath();
             $files = $fs->getFiles($this->project, false);
             foreach ($files as $file) {
                 $f = new PhingFile($fsBasedir, $file);
                 if ($f->isFile()) {
                     $path = $f->getAbsolutePath();
                     $this->log("Encoding " . $path, Project::MSG_VERBOSE);
                     $this->encodeFile($path);
                     $encodedFilesCounter++;
                 }
             }
         }
         $this->log("Encoded files: " . $encodedFilesCounter);
     } catch (IOException $ioe) {
         $msg = "Problem encoding files: " . $ioe->getMessage();
         throw new BuildException($msg, $ioe, $this->getLocation());
     }
 }
 function _checkFile()
 {
     if ($this->filepath === null) {
         return $this->_checkFile1($this->file);
     } else {
         $paths = $this->filepath->listDir();
         for ($i = 0, $pcnt = count($paths); $i < $pcnt; $i++) {
             $this->log("Searching " . $paths[$i], PROJECT_MSG_VERBOSE);
             $tmp = new PhingFile($paths[$i], $this->file->getName());
             if ($tmp->isFile()) {
                 return true;
             }
         }
     }
     return false;
 }