From cd2233685a3edc258dca1310ebf5ca4f0e6250ec Mon Sep 17 00:00:00 2001 From: Hugo Hamon Date: Wed, 22 Aug 2012 17:49:26 +0200 Subject: [PATCH] [Generator] removed Filesystem class. Propel now relies on the standalone Filesystem component of the Symfony2 framework installable via Composer. --- composer.json | 3 +- .../Generator/Command/AbstractCommand.php | 19 +- .../Command/ConfigConvertXmlCommand.php | 6 +- .../Command/DatabaseReverseCommand.php | 3 +- .../Command/GraphvizGenerateCommand.php | 3 +- .../Command/MigrationDiffCommand.php | 3 +- .../Command/MigrationDownCommand.php | 3 +- .../Command/MigrationMigrateCommand.php | 3 +- .../Command/MigrationStatusCommand.php | 3 +- .../Generator/Command/MigrationUpCommand.php | 3 +- .../Generator/Command/ModelBuildCommand.php | 3 +- .../Generator/Command/SqlBuildCommand.php | 3 +- src/Propel/Generator/Util/Filesystem.php | 275 ------------------ 13 files changed, 30 insertions(+), 300 deletions(-) delete mode 100644 src/Propel/Generator/Util/Filesystem.php diff --git a/composer.json b/composer.json index 9fa5f252b6..004fae05b3 100644 --- a/composer.json +++ b/composer.json @@ -21,7 +21,8 @@ "symfony/console": "2.1.*", "monolog/monolog": "1.0.*", "symfony/finder": "2.1.*", - "symfony/validator": "2.1.*" + "symfony/validator": "2.1.*", + "symfony/filesystem": "2.1.*" }, "require-dev": { "behat/behat": "2.4@stable" diff --git a/src/Propel/Generator/Command/AbstractCommand.php b/src/Propel/Generator/Command/AbstractCommand.php index e2fe4ff567..5d688d90f8 100644 --- a/src/Propel/Generator/Command/AbstractCommand.php +++ b/src/Propel/Generator/Command/AbstractCommand.php @@ -13,7 +13,7 @@ use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Finder\Finder; - +use Symfony\Component\Filesystem\Filesystem; use Propel\Generator\Exception\RuntimeException; /** @@ -22,9 +22,10 @@ abstract class AbstractCommand extends Command { const DEFAULT_INPUT_DIRECTORY = '.'; - const DEFAULT_PLATFORM = 'MysqlPlatform'; + protected $filesystem; + /** * {@inheritdoc} */ @@ -72,6 +73,20 @@ protected function getSchemas($directory) ); } + /** + * Returns a Filesystem instance. + * + * @return Filesystem + */ + protected function getFilesystem() + { + if (null === $this->filesystem) { + $this->filesystem = new Filesystem(); + } + + return $this->filesystem; + } + protected function parseConnection($connection) { $pos = strpos($connection, '='); diff --git a/src/Propel/Generator/Command/ConfigConvertXmlCommand.php b/src/Propel/Generator/Command/ConfigConvertXmlCommand.php index cf0278ea2a..644241ae6f 100644 --- a/src/Propel/Generator/Command/ConfigConvertXmlCommand.php +++ b/src/Propel/Generator/Command/ConfigConvertXmlCommand.php @@ -10,16 +10,14 @@ namespace Propel\Generator\Command; -use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\Output; use Propel\Generator\Config\XmlToArrayConverter; use Propel\Generator\Config\ArrayToPhpConverter; -use Propel\Generator\Util\Filesystem; -class ConfigConvertXmlCommand extends Command +class ConfigConvertXmlCommand extends AbstractCommand { const DEFAULT_INPUT_DIRECTORY = '.'; const DEFAULT_INPUT_FILE = 'runtime-conf.xml'; @@ -51,7 +49,7 @@ protected function execute(InputInterface $input, OutputInterface $output) throw new \RuntimeException(sprintf('Unable to find the "%s" configuration file', $inputFilePath)); } - $filesystem = new Filesystem(); + $filesystem = $this->getFilesystem(); if (!$filesystem->mkdir($input->getOption('output-dir'))) { throw new \RuntimeException(sprintf('Unable to write the "%s" output directory', $input->getOption('output-dir'))); }; diff --git a/src/Propel/Generator/Command/DatabaseReverseCommand.php b/src/Propel/Generator/Command/DatabaseReverseCommand.php index 4e2b3101fb..529c9b70de 100644 --- a/src/Propel/Generator/Command/DatabaseReverseCommand.php +++ b/src/Propel/Generator/Command/DatabaseReverseCommand.php @@ -17,7 +17,6 @@ use Symfony\Component\Console\Output\Output; use Propel\Generator\Config\GeneratorConfig; use Propel\Generator\Manager\ReverseManager; -use Propel\Generator\Util\Filesystem; /** * @author William Durand @@ -61,7 +60,7 @@ protected function execute(InputInterface $input, OutputInterface $output) 'propel.reverse.parser.class' => sprintf('\\Propel\\Generator\\Reverse\\%sSchemaParser', $vendor), )); - $filesystem = new Filesystem(); + $filesystem = $this->getFilesystem(); $filesystem->mkdir($input->getOption('output-dir')); $manager = new ReverseManager(); diff --git a/src/Propel/Generator/Command/GraphvizGenerateCommand.php b/src/Propel/Generator/Command/GraphvizGenerateCommand.php index bfcb328d8a..f4f6148b05 100644 --- a/src/Propel/Generator/Command/GraphvizGenerateCommand.php +++ b/src/Propel/Generator/Command/GraphvizGenerateCommand.php @@ -16,7 +16,6 @@ use Symfony\Component\Console\Output\Output; use Propel\Generator\Config\GeneratorConfig; use Propel\Generator\Manager\GraphvizManager; -use Propel\Generator\Util\Filesystem; /** * @author William Durand @@ -49,7 +48,7 @@ protected function execute(InputInterface $input, OutputInterface $output) 'propel.packageObjectModel' => true, )); - $filesystem = new Filesystem(); + $filesystem = $this->getFilesystem(); $filesystem->mkdir($input->getOption('output-dir')); $manager = new GraphvizManager(); diff --git a/src/Propel/Generator/Command/MigrationDiffCommand.php b/src/Propel/Generator/Command/MigrationDiffCommand.php index 6fd57c2ea1..de765b918a 100644 --- a/src/Propel/Generator/Command/MigrationDiffCommand.php +++ b/src/Propel/Generator/Command/MigrationDiffCommand.php @@ -18,7 +18,6 @@ use Propel\Generator\Exception\RuntimeException; use Propel\Generator\Manager\MigrationManager; use Propel\Generator\Model\IdMethod; -use Propel\Generator\Util\Filesystem; /** * @author William Durand @@ -55,7 +54,7 @@ protected function execute(InputInterface $input, OutputInterface $output) 'propel.platform.class' => $input->getOption('platform'), )); - $filesystem = new Filesystem(); + $filesystem = $this->getFilesystem(); $filesystem->mkdir($input->getOption('output-dir')); $manager = new MigrationManager(); diff --git a/src/Propel/Generator/Command/MigrationDownCommand.php b/src/Propel/Generator/Command/MigrationDownCommand.php index b0cd14bdac..e6735cde38 100644 --- a/src/Propel/Generator/Command/MigrationDownCommand.php +++ b/src/Propel/Generator/Command/MigrationDownCommand.php @@ -16,7 +16,6 @@ use Symfony\Component\Console\Output\Output; use Propel\Generator\Config\GeneratorConfig; use Propel\Generator\Manager\MigrationManager; -use Propel\Generator\Util\Filesystem; /** * @author William Durand @@ -52,7 +51,7 @@ protected function execute(InputInterface $input, OutputInterface $output) 'propel.platform.class' => $input->getOption('platform'), )); - $filesystem = new Filesystem(); + $filesystem = $this->getFilesystem(); $filesystem->mkdir($input->getOption('output-dir')); $manager = new MigrationManager(); diff --git a/src/Propel/Generator/Command/MigrationMigrateCommand.php b/src/Propel/Generator/Command/MigrationMigrateCommand.php index b54e57f17e..0d572cc90f 100644 --- a/src/Propel/Generator/Command/MigrationMigrateCommand.php +++ b/src/Propel/Generator/Command/MigrationMigrateCommand.php @@ -16,7 +16,6 @@ use Symfony\Component\Console\Output\Output; use Propel\Generator\Config\GeneratorConfig; use Propel\Generator\Manager\MigrationManager; -use Propel\Generator\Util\Filesystem; /** * @author William Durand @@ -52,7 +51,7 @@ protected function execute(InputInterface $input, OutputInterface $output) 'propel.platform.class' => $input->getOption('platform'), )); - $filesystem = new Filesystem(); + $filesystem = $this->getFilesystem(); $filesystem->mkdir($input->getOption('output-dir')); $manager = new MigrationManager(); diff --git a/src/Propel/Generator/Command/MigrationStatusCommand.php b/src/Propel/Generator/Command/MigrationStatusCommand.php index a1871a0aa5..22b8c2f3d9 100644 --- a/src/Propel/Generator/Command/MigrationStatusCommand.php +++ b/src/Propel/Generator/Command/MigrationStatusCommand.php @@ -16,7 +16,6 @@ use Symfony\Component\Console\Output\Output; use Propel\Generator\Config\GeneratorConfig; use Propel\Generator\Manager\MigrationManager; -use Propel\Generator\Util\Filesystem; /** * @author William Durand @@ -52,7 +51,7 @@ protected function execute(InputInterface $input, OutputInterface $output) 'propel.platform.class' => $input->getOption('platform'), )); - $filesystem = new Filesystem(); + $filesystem = $this->getFilesystem(); $filesystem->mkdir($input->getOption('output-dir')); $manager = new MigrationManager(); diff --git a/src/Propel/Generator/Command/MigrationUpCommand.php b/src/Propel/Generator/Command/MigrationUpCommand.php index f6dde735d3..67331306bd 100644 --- a/src/Propel/Generator/Command/MigrationUpCommand.php +++ b/src/Propel/Generator/Command/MigrationUpCommand.php @@ -16,7 +16,6 @@ use Symfony\Component\Console\Output\Output; use Propel\Generator\Config\GeneratorConfig; use Propel\Generator\Manager\MigrationManager; -use Propel\Generator\Util\Filesystem; /** * @author William Durand @@ -52,7 +51,7 @@ protected function execute(InputInterface $input, OutputInterface $output) 'propel.platform.class' => $input->getOption('platform'), )); - $filesystem = new Filesystem(); + $filesystem = $this->getFilesystem(); $filesystem->mkdir($input->getOption('output-dir')); $manager = new MigrationManager(); diff --git a/src/Propel/Generator/Command/ModelBuildCommand.php b/src/Propel/Generator/Command/ModelBuildCommand.php index 751d871dc7..ae58638c05 100644 --- a/src/Propel/Generator/Command/ModelBuildCommand.php +++ b/src/Propel/Generator/Command/ModelBuildCommand.php @@ -16,7 +16,6 @@ use Symfony\Component\Console\Output\Output; use Propel\Generator\Config\GeneratorConfig; use Propel\Generator\Manager\ModelManager; -use Propel\Generator\Util\Filesystem; /** * @author Florian Klein @@ -133,7 +132,7 @@ protected function execute(InputInterface $input, OutputInterface $output) 'propel.mysql.tableEngineKeyword' => 'ENGINE', ), $this->getBuildProperties($input->getOption('input-dir') . '/build.properties'))); - $filesystem = new Filesystem(); + $filesystem = $this->getFilesystem(); $filesystem->mkdir($input->getOption('output-dir')); $manager = new ModelManager(); diff --git a/src/Propel/Generator/Command/SqlBuildCommand.php b/src/Propel/Generator/Command/SqlBuildCommand.php index bce9a08f77..0d687da777 100644 --- a/src/Propel/Generator/Command/SqlBuildCommand.php +++ b/src/Propel/Generator/Command/SqlBuildCommand.php @@ -16,7 +16,6 @@ use Symfony\Component\Console\Output\Output; use Propel\Generator\Config\GeneratorConfig; use Propel\Generator\Manager\SqlManager; -use Propel\Generator\Util\Filesystem; /** * @author William Durand @@ -64,7 +63,7 @@ protected function execute(InputInterface $input, OutputInterface $output) 'propel.mysql.tableEngineKeyword' => 'ENGINE', ), $this->getBuildProperties($input->getOption('input-dir') . '/build.properties'))); - $filesystem = new Filesystem(); + $filesystem = $this->getFilesystem(); $filesystem->mkdir($input->getOption('output-dir')); $manager = new SqlManager(); diff --git a/src/Propel/Generator/Util/Filesystem.php b/src/Propel/Generator/Util/Filesystem.php deleted file mode 100644 index 51f223358a..0000000000 --- a/src/Propel/Generator/Util/Filesystem.php +++ /dev/null @@ -1,275 +0,0 @@ - - */ -class Filesystem -{ - /** - * Copies a file. - * - * This method only copies the file if the origin file is newer than the target file. - * - * By default, if the target already exists, it is not overridden. - * - * @param string $originFile The original filename - * @param string $targetFile The target filename - * @param array $override Whether to override an existing file or not - */ - public function copy($originFile, $targetFile, $override = false) - { - $this->mkdir(dirname($targetFile)); - - if (!$override && is_file($targetFile)) { - $doCopy = filemtime($originFile) > filemtime($targetFile); - } else { - $doCopy = true; - } - - if ($doCopy) { - copy($originFile, $targetFile); - } - } - - /** - * Creates a directory recursively. - * - * @param string|array|\Traversable $dirs The directory path - * @param int $mode The directory mode - * - * @return boolean true if the directory has been created, false otherwise - */ - public function mkdir($dirs, $mode = 0777) - { - $ret = true; - foreach ($this->toIterator($dirs) as $dir) { - if (is_dir($dir)) { - continue; - } - - $ret = @mkdir($dir, $mode, true) && $ret; - } - - return $ret; - } - - /** - * Creates empty files. - * - * @param string|array|\Traversable $files A filename, an array of files, or a \Traversable instance to remove - */ - public function touch($files) - { - foreach ($this->toIterator($files) as $file) { - touch($file); - } - } - - /** - * Removes files or directories. - * - * @param string|array|\Traversable $files A filename, an array of files, or a \Traversable instance to remove - */ - public function remove($files) - { - $files = iterator_to_array($this->toIterator($files)); - $files = array_reverse($files); - foreach ($files as $file) { - if (!file_exists($file)) { - continue; - } - - if (is_dir($file) && !is_link($file)) { - $this->remove(new \FilesystemIterator($file)); - - rmdir($file); - } else { - unlink($file); - } - } - } - - /** - * Change mode for an array of files or directories. - * - * @param string|array|\Traversable $files A filename, an array of files, or a \Traversable instance to remove - * @param integer $mode The new mode - * @param integer $umask The mode mask (octal) - */ - public function chmod($files, $mode, $umask = 0000) - { - $currentUmask = umask(); - umask($umask); - - foreach ($this->toIterator($files) as $file) { - chmod($file, $mode); - } - - umask($currentUmask); - } - - /** - * Renames a file. - * - * @param string $origin The origin filename - * @param string $target The new filename - * - * @throws \RuntimeException When target file already exists - */ - public function rename($origin, $target) - { - // we check that target does not exist - if (is_readable($target)) { - throw new \RuntimeException(sprintf('Cannot rename because the target "%s" already exist.', $target)); - } - - rename($origin, $target); - } - - /** - * Creates a symbolic link or copy a directory. - * - * @param string $originDir The origin directory path - * @param string $targetDir The symbolic link name - * @param boolean $copyOnWindows Whether to copy files if on Windows - */ - public function symlink($originDir, $targetDir, $copyOnWindows = false) - { - if (!function_exists('symlink') && $copyOnWindows) { - $this->mirror($originDir, $targetDir); - - return; - } - - $ok = false; - if (is_link($targetDir)) { - if (readlink($targetDir) != $originDir) { - unlink($targetDir); - } else { - $ok = true; - } - } - - if (!$ok) { - symlink($originDir, $targetDir); - } - } - - /** - * Given an existing path, convert it to a path relative to a given starting path - * - * @var string Absolute path of target - * @var string Absolute path where traversal begins - * - * @return string Path of target relative to starting path - */ - public function makePathRelative($endPath, $startPath) - { - // Find for which character the the common path stops - $offset = 0; - while ($startPath[$offset] === $endPath[$offset]) { - $offset++; - } - - // Determine how deep the start path is relative to the common path (ie, "web/bundles" = 2 levels) - $depth = substr_count(substr($startPath, $offset), DIRECTORY_SEPARATOR) + 1; - - // Repeated "../" for each level need to reach the common path - $traverser = str_repeat('../', $depth); - - // Construct $endPath from traversing to the common path, then to the remaining $endPath - return $traverser.substr($endPath, $offset); - } - - /** - * Mirrors a directory to another. - * - * @param string $originDir The origin directory - * @param string $targetDir The target directory - * @param \Traversable $iterator A Traversable instance - * @param array $options An array of boolean options - * Valid options are: - * - $options['override'] Whether to override an existing file on copy or not (see copy()) - * - $options['copy_on_windows'] Whether to copy files instead of links on Windows (see symlink()) - * - * @throws \RuntimeException When file type is unknown - */ - public function mirror($originDir, $targetDir, \Traversable $iterator = null, $options = array()) - { - $copyOnWindows = false; - if (isset($options['copy_on_windows']) && !function_exists('symlink')) { - $copyOnWindows = $options['copy_on_windows']; - } - - if (null === $iterator) { - $flags = $copyOnWindows ? \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS : \FilesystemIterator::SKIP_DOTS; - $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($originDir, $flags), \RecursiveIteratorIterator::SELF_FIRST); - } - - if ('/' === substr($targetDir, -1) || '\\' === substr($targetDir, -1)) { - $targetDir = substr($targetDir, 0, -1); - } - - if ('/' === substr($originDir, -1) || '\\' === substr($originDir, -1)) { - $originDir = substr($originDir, 0, -1); - } - - foreach ($iterator as $file) { - $target = $targetDir.'/'.str_replace($originDir.DIRECTORY_SEPARATOR, '', $file->getPathname()); - - if (is_link($file)) { - $this->symlink($file, $target); - } elseif (is_dir($file)) { - $this->mkdir($target); - } elseif (is_file($file) || ($copyOnWindows && is_link($file))) { - $this->copy($file, $target, isset($options['override']) ? $options['override'] : false); - } else { - throw new \RuntimeException(sprintf('Unable to guess "%s" file type.', $file)); - } - } - } - - /** - * Returns whether the file path is an absolute path. - * - * @param string $file A file path - * - * @return boolean - */ - public function isAbsolutePath($file) - { - if ($file[0] == '/' || $file[0] == '\\' - || (strlen($file) > 3 && ctype_alpha($file[0]) - && $file[1] == ':' - && ($file[2] == '\\' || $file[2] == '/') - ) - || null !== parse_url($file, PHP_URL_SCHEME) - ) { - return true; - } - - return false; - } - - private function toIterator($files) - { - if (!$files instanceof \Traversable) { - $files = new \ArrayObject(is_array($files) ? $files : array($files)); - } - - return $files; - } -}