/** * 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()); } } }
function copyFile(PhingFile $sourceFile, PhingFile $destFile, $overwrite = false, $preserveLastModified = true, &$filterChains = null, Project $project) { // writes to tmp file first, then rename it to avoid file locking race // conditions $parent = $destFile->getParentFile(); $tmpFile = new PhingFile($parent, substr(md5(time()), 0, 8)); parent::copyFile($sourceFile, $tmpFile, $overwrite, $preserveLastModified, $filterChains, $project); $tmpFile->renameTo($destFile); }
/** * 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()); } } }
/** * Attempts to rename a file from a source to a destination. * If overwrite is set to true, this method overwrites existing file * even if the destination file is newer. * Otherwise, the source f * ile is renamed only if the destination file # * is older than it. */ private function renameFile(PhingFile $sourceFile, PhingFile $destFile, $overwrite) { $renamed = true; // ensure that parent dir of dest file exists! $parent = $destFile->getParentFile(); if ($parent !== null) { if (!$parent->exists()) { $parent->mkdirs(); } } if ($destFile->exists()) { try { $destFile->delete(); } catch (Exception $e) { throw new BuildException("Unable to remove existing file " . $destFile->__toString() . ": " . $e->getMessage()); } } $renamed = $sourceFile->renameTo($destFile); return $renamed; }
public function setFile(PhingFile $file) { $this->setDir($file->getParentFile()); $this->createInclude()->setName($file->getName()); }