Skip to content
Browse files

[Generator] removed Filesystem class. Propel now relies on the standa…

…lone Filesystem component of the Symfony2 framework installable via Composer.
  • Loading branch information...
1 parent 338752a commit cd2233685a3edc258dca1310ebf5ca4f0e6250ec @hhamon committed
View
3 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"
View
19 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, '=');
View
6 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')));
};
View
3 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 <william.durand1@gmail.com>
@@ -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();
View
3 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 <william.durand1@gmail.com>
@@ -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();
View
3 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 <william.durand1@gmail.com>
@@ -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();
View
3 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 <william.durand1@gmail.com>
@@ -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();
View
3 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 <william.durand1@gmail.com>
@@ -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();
View
3 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 <william.durand1@gmail.com>
@@ -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();
View
3 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 <william.durand1@gmail.com>
@@ -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();
View
3 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 <florian.klein@free.fr>
@@ -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();
View
3 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 <william.durand1@gmail.com>
@@ -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();
View
275 src/Propel/Generator/Util/Filesystem.php
@@ -1,275 +0,0 @@
-<?php
-
-/**
- * This file is part of the Propel package.
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- *
- * @license MIT License
- */
-
-namespace Propel\Generator\Util;
-
-/**
- * Provides basic utility to manipulate the file system.
- * This class comes from the Symfony2 framework.
- *
- * @author Fabien Potencier <fabien@symfony.com>
- */
-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;
- }
-}

0 comments on commit cd22336

Please sign in to comment.
Something went wrong with that request. Please try again.