public static function call_phing($task, $target, $build_file = '', $options = array()) { $args = array(); foreach ($options as $key => $value) { $args[] = "-D{$key}={$value}"; } if ($build_file) { $args[] = '-f'; $args[] = realpath($build_file); } if (!$task->is_verbose()) { $args[] = '-q'; } if (is_array($target)) { $args = array_merge($args, $target); } else { $args[] = $target; } if (DIRECTORY_SEPARATOR != '\\' && (function_exists('posix_isatty') && @posix_isatty(STDOUT))) { $args[] = '-logger'; $args[] = 'phing.listener.AnsiColorLogger'; } Phing::startup(); Phing::setProperty('phing.home', getenv('PHING_HOME')); $m = new pakePhing(); $m->execute($args); $m->runBuild(); }
public static function call_phing($task, $target, $build_file = '', $options = array()) { $args = array(); foreach ($options as $key => $value) { $args[] = "-D{$key}={$value}"; } if ($build_file) { $args[] = '-f'; $args[] = realpath($build_file); } if (!$task->is_verbose()) { $args[] = '-q'; } if (is_array($target)) { $args = array_merge($args, $target); } else { $args[] = $target; } Phing::startup(); Phing::setProperty('phing.home', getenv('PHING_HOME')); ob_start(array('pakePhingTask', 'colorize'), 2); $m = new pakePhing(); $m->execute($args); $m->runBuild(); ob_end_clean(); }
public function setUp() { Phing::startup(); $this->project = $this->getMockBuilder('Project')->setMethods(array('getBasedir'))->getMock(); $this->task = new GuessExtensionKeyTask(); $this->task->setProject($this->project); }
protected function setUp() { if (version_compare(PHP_VERSION, '5.3.2') < 0) { define('E_DEPRECATED', 8192); } chdir(dirname(__FILE__)); Phing::setProperty('phing.home', ZECLIB_TEST_VENDOR_DIR . '/phing'); Phing::startup(); }
public function setUp() { Phing::startup(); $this->base = $this->getMockBuilder('PhingFile')->setConstructorArgs(array(dirname(__FILE__) . '/../Fixtures/BaseLocalConfiguration.php'))->setMethods(NULL)->getMock(); $this->update = $this->getMockBuilder('PhingFile')->setConstructorArgs(array(dirname(__FILE__) . '/../Fixtures/UpdateLocalConfiguration.php'))->setMethods(NULL)->getMock(); $_tempTargetFile = tempnam('/tmp', 'tmp'); $tempTargetFile = $this->getMockBuilder('PhingFile')->setConstructorArgs(array($_tempTargetFile))->setMethods(NULL)->getMock(); $this->fileWriter = $this->getMockBuilder('FileWriter')->setConstructorArgs(array($tempTargetFile))->getMock(); $this->task = new MergeLocalConfigurationTask(); }
public function __construct() { // @todo These should have an auto-loader require_once 'phing/Phing.php'; require_once 'phing/Project.php'; require_once 'phing/types/FileSet.php'; require_once 'phing/system/io/PhingFile.php'; require_once 'phing/system/util/Properties.php'; // Needs calling quite early (e.g. PhingFile won't work without it) Phing::startup(); }
public function setUp() { Phing::startup(); $this->project = $this->getMockBuilder('Project')->setMethods(NULL)->getMock(NULL); $tempTargetFile = tempnam('/tmp', 'tmp'); $this->file = $this->getMockBuilder('PhingFile')->setConstructorArgs(array($tempTargetFile))->setMethods(NULL)->getMock(); $propertyTask = $this->getMockBuilder('PropertyTask')->setMethods(NULL)->getMock(); $propertyTask->setProject($this->project); $propertyTask->setFile(dirname(__FILE__) . '/../Fixtures/LocalConfiguration.properties'); $propertyTask->setPrefix('LocalConfiguration.'); $propertyTask->main(); $this->task = new GenerateLocalConfigurationTask(); $this->task->setProject($this->project); }
/** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { try { $args = $this->preparePhingArgs($input, $output); $phingClasspath = $this->getContainer()->getParameter('rhapsody_phing.phing_classpath'); $phingHome = $this->getContainer()->getParameter('rhapsody_phing.phing_home'); if ($output->getVerbosity() == OutputInterface::VERBOSITY_VERBOSE) { $commandline = 'phing ' . implode(' ', $args); $output->writeln('Executing Phing with: ' . $commandline); } //require_once('phing/Phing.php'); \Phing::startup(); \Phing::setProperty('rhapsody_phing.home', $phingHome); \Phing::fire($args); \Phing::shutdown(); } catch (ConfigurationException $x) { Phing::printMessage($x); exit(-1); } catch (Exception $x) { exit(1); } }
// --------------------------- /* set classpath */ if (getenv('PHP_CLASSPATH')) { if (!defined('PHP_CLASSPATH')) { define('PHP_CLASSPATH', getenv('PHP_CLASSPATH') . PATH_SEPARATOR . get_include_path()); } ini_set('include_path', PHP_CLASSPATH); } else { if (!defined('PHP_CLASSPATH')) { define('PHP_CLASSPATH', get_include_path()); } } require_once 'phing/Phing.php'; try { /* Setup Phing environment */ Phing::startup(); // Set phing.home property to the value from environment // (this may be NULL, but that's not a big problem.) Phing::setProperty('phing.home', getenv('PHING_HOME')); // Grab and clean up the CLI arguments $args = isset($argv) ? $argv : $_SERVER['argv']; // $_SERVER['argv'] seems to not work (sometimes?) when argv is registered array_shift($args); // 1st arg is script name, so drop it // Invoke the commandline entry point Phing::fire($args); // Invoke any shutdown routines. Phing::shutdown(); } catch (ConfigurationException $x) { Phing::printMessage($x); exit(-1);
protected function getModels($databaseManager, $verbose = false) { Phing::startup(); // required to locate behavior classes... $schemas = sfFinder::type('file')->name('*schema.xml')->follow_link()->in(sfConfig::get('sf_config_dir')); if (!$schemas) { throw new sfCommandException('You must create a schema.yml or schema.xml file.'); } $ads = array(); foreach ($schemas as $schema) { if ($verbose) { $this->logSection('schema', sprintf(' Parsing schema "%s"', $schema), null, 'COMMENT'); } $dom = new DomDocument('1.0', 'UTF-8'); $dom->load($schema); //$this->includeExternalSchemas($dom, sfConfig::get('sf_config_dir')); $xmlParser = new XmlToAppData(new DefaultPlatform(), ''); $generatorConfig = $this->getGeneratorConfig(); $generatorConfig->setBuildConnections($this->getConnections($databaseManager)); $xmlParser->setGeneratorConfig($generatorConfig); $ad = $xmlParser->parseString($dom->saveXML(), $schema); $ads[] = $ad; $nbTables = $ad->getDatabase(null, false)->countTables(); if ($verbose) { $this->logSection('schema', sprintf(' %d tables processed successfully', $nbTables), null, 'COMMENT'); } } if (count($ads) > 1) { $ad = array_shift($ads); $ad->joinAppDatas($ads); //$ad = $this->joinDataModels($ads); //$this->dataModels = array($ad); } else { $ad = $ads[0]; } $ad->doFinalInitialization(); return $ad; }
/** * @see sfTask */ protected function execute($arguments = array(), $options = array()) { $databaseManager = new sfDatabaseManager($this->configuration); $connections = $this->getConnections($databaseManager); //$connection = $databaseManager->getDatabase($options['connection'] ? $options['connection'] : null)->getConnection(); $i = new afsDbInfo(); $this->logSection('propel', 'Reading databases structure...'); $ad = new AppData(); $totalNbTables = 0; foreach ($connections as $name => $params) { $pdo = $databaseManager->getDatabase($name)->getConnection(); $database = new Database($name); $platform = $this->getPlatform($databaseManager, $name); $database->setPlatform($platform); $database->setDefaultIdMethod(IDMethod::NATIVE); $parser = $this->getParser($databaseManager, $name, $pdo); //$parser->setMigrationTable($options['migration-table']); $parser->setPlatform($platform); $nbTables = $parser->parse($database); $ad->addDatabase($database); $totalNbTables += $nbTables; $this->logSection('propel', sprintf(' %d tables imported from database "%s"', $nbTables, $name), null, 'COMMENT'); } if ($totalNbTables) { $this->logSection('propel', sprintf('%d tables imported from databases.', $totalNbTables)); } else { $this->logSection('propel', 'Database is empty'); } $this->logSection('propel', 'Loading XML schema files...'); Phing::startup(); // required to locate behavior classes... $this->schemaToXML(self::DO_NOT_CHECK_SCHEMA, 'generated-'); $this->copyXmlSchemaFromPlugins('generated-'); $appData = $this->getModels($databaseManager, true); $this->logSection('propel', sprintf('%d tables defined in the schema files.', $appData->countTables())); $this->cleanup(true); $this->logSection('sql-diff', 'Comparing databases and schemas...'); $manager = new PropelMigrationManager(); $manager->setConnections($connections); foreach ($ad->getDatabases() as $database) { $name = $database->getName(); $filenameDiff = sfConfig::get('sf_data_dir') . "/sql/{$name}." . time() . ".diff.sql"; $this->logSection('sql-diff', sprintf(' Comparing database "%s"', $name), null, 'COMMENT'); if (!$appData->hasDatabase($name)) { // FIXME: tables present in database but not in XML continue; } $databaseDiff = PropelDatabaseComparator::computeDiff($database, $appData->getDatabase($name)); if (!$databaseDiff) { //no diff } $this->logSection('sql-diff', sprintf('Structure of database was modified in datasource "%s": %s', $name, $databaseDiff->getDescription())); $platform = $this->getPlatform($databaseManager, $name); //up sql $upDiff = $platform->getModifyDatabaseDDL($databaseDiff); //down sql $downDiff = $platform->getModifyDatabaseDDL($databaseDiff->getReverseDiff()); if ($databaseDiff) { $this->logSection('sql-diff', "Writing file {$filenameDiff}"); afStudioUtil::writeFile($filenameDiff, $upDiff); if ($options['insert'] === true || $options['insert'] === 'true') { $this->logSection('sql-diff', "Inserting sql diff"); $i->executeSql($upDiff, Propel::getConnection($name)); } if ($options['build'] === true || $options['build'] === 'true') { $this->logSection('sql-diff', 'Creating models from current schema'); $this->createTask('propel:build-model')->run(); $this->logSection('sql-diff', 'Creating forms from current schema'); $this->createTask('propel:build-forms')->run(); $this->logSection('sql-diff', 'Setting AppFlower project permissions'); $this->createTask('afs:fix-perms')->run(); $this->logSection('sql-diff', 'Creating AppFlower validator cache'); $this->createTask('appflower:validator-cache')->run(array('frontend', 'cache', 'yes')); $this->logSection('sql-diff', 'Clearing Symfony cache'); $this->createTask('cc')->run(); } } } }
/** * * @param string $taskName */ public function runPhing($taskName) { // Copy Files $this->mySchemaBuilder->loadXmlFiles(); // Create build.properties file $this->createBuildPropertiesFile($this->tmpDir . '/build.properties'); // Create buildtime-conf file $this->createBuildTimeConfFile($this->tmpDir . '/buildtime-conf.xml'); // $args = array(); $args = $this->getPhingArguments(); $args[] = $taskName; // Enable output buffering \Phing::setOutputStream(new \OutputStream(fopen('php://output', 'w'))); \Phing::setErrorStream(new \OutputStream(fopen('php://output', 'w'))); \Phing::startup(); \Phing::setProperty('phing.home', getenv('PHING_HOME')); // $myPhing = new \Phing(); //$returnStatus = true; $myPhing->execute($args); $myPhing->runBuild(); /*$this->buffer = ob_get_contents(); // Guess errors if (strstr($this->buffer, 'failed. Aborting.') || strstr($this->buffer, 'Failed to execute') || strstr($this->buffer, 'failed for the following reason:')) { }*/ }
/** * Calls Phing's methods to generate propel's objects * * @param string $libraries_path * @param array $arguments */ public static function buildProject($libraries_path, array &$arguments) { require_once 'phing/Phing.php'; Phing::startup(); Phing::setProperty('phing.home', $libraries_path . 'phing'); Phing::start($arguments); }
public function testPhingInstallation() { $tmpDir = sys_get_temp_dir(); WadeLib::installPhingManually($tmpDir, $tmpDir . '/phing'); # Start Phing with a test-buildfile $phingDir = $tmpDir . '/phing'; $phingInclude = $phingDir . '/classes/'; ini_set('include_path', $phingInclude); require $phingInclude . 'phing/Phing.php'; Phing::startup(); # Sets up the phing environment Phing::start(array('-buildfile', 'tests/build.xml')); # Check results of test-buildfile $resultFile = __DIR__ . '/wadelib_testbuild'; $this->assertEquals(PHP_OS, file_get_contents($resultFile)); # Delete local files: unlink($resultFile); # Remove extracted Phing library: FileSystemManager::rrmdir($phingDir); }
/** * @see sfTask */ protected function execute($arguments = array(), $options = array()) { $databaseManager = new sfDatabaseManager($this->configuration); $connections = $this->getConnections($databaseManager); $this->logSection('propel', 'Reading databases structure...'); $ad = new AppData(); $totalNbTables = 0; foreach ($connections as $name => $params) { if ($options['verbose']) { $this->logSection('propel', sprintf(' Connecting to database "%s" using DSN "%s"', $name, $params['dsn']), null, 'COMMENT'); } $pdo = $databaseManager->getDatabase($name)->getConnection(); $database = new Database($name); $platform = $this->getPlatform($databaseManager, $name); $database->setPlatform($platform); $database->setDefaultIdMethod(IDMethod::NATIVE); $parser = $this->getParser($databaseManager, $name, $pdo); $parser->setMigrationTable($options['migration-table']); $parser->setPlatform($platform); $nbTables = $parser->parse($database); $ad->addDatabase($database); $totalNbTables += $nbTables; if ($options['verbose']) { $this->logSection('propel', sprintf(' %d tables imported from database "%s"', $nbTables, $name), null, 'COMMENT'); } } if ($totalNbTables) { $this->logSection('propel', sprintf('%d tables imported from databases.', $totalNbTables)); } else { $this->logSection('propel', 'Database is empty'); } $this->logSection('propel', 'Loading XML schema files...'); Phing::startup(); // required to locate behavior classes... $this->schemaToXML(self::DO_NOT_CHECK_SCHEMA, 'generated-'); $this->copyXmlSchemaFromPlugins('generated-'); $appData = $this->getModels($databaseManager, $options['verbose']); $this->logSection('propel', sprintf('%d tables defined in the schema files.', $appData->countTables())); $this->cleanup($options['verbose']); $this->logSection('propel', 'Comparing databases and schemas...'); $manager = new PropelMigrationManager(); $manager->setConnections($connections); $migrationsUp = array(); $migrationsDown = array(); foreach ($ad->getDatabases() as $database) { $name = $database->getName(); if ($options['verbose']) { $this->logSection('propel', sprintf(' Comparing database "%s"', $name), null, 'COMMENT'); } if (!$appData->hasDatabase($name)) { // FIXME: tables present in database but not in XML continue; } $databaseDiff = PropelDatabaseComparator::computeDiff($database, $appData->getDatabase($name)); if (!$databaseDiff) { if ($options['verbose']) { $this->logSection('propel', sprintf(' Same XML and database structures for datasource "%s" - no diff to generate', $name), null, 'COMMENT'); } continue; } $this->logSection('propel', sprintf('Structure of database was modified in datasource "%s": %s', $name, $databaseDiff->getDescription())); if ($options['verbose']) { $this->logBlock($databaseDiff, 'COMMENT'); } $platform = $this->getPlatform($databaseManager, $name); $migrationsUp[$name] = $platform->getModifyDatabaseDDL($databaseDiff); $migrationsDown[$name] = $platform->getModifyDatabaseDDL($databaseDiff->getReverseDiff()); } if (!$migrationsUp) { $this->logSection('propel', 'Same XML and database structures for all datasources - no diff to generate'); return; } $timestamp = time(); $migrationDirectory = sfConfig::get('sf_root_dir') . DIRECTORY_SEPARATOR . $options['migration-dir']; $migrationFileName = $manager->getMigrationFileName($timestamp); $migrationFilePath = $migrationDirectory . DIRECTORY_SEPARATOR . $migrationFileName; if ($options['ask-confirmation'] && !$this->askConfirmation(array(sprintf('Migration class will be generated in %s', $migrationFilePath), 'Are you sure you want to proceed? (Y/n)'), 'QUESTION_LARGE', true)) { $this->logSection('propel', 'Task aborted.'); return 1; } $this->getFilesystem()->mkdirs($migrationDirectory); $migrationClassBody = $manager->getMigrationClassBody($migrationsUp, $migrationsDown, $timestamp); file_put_contents($migrationFilePath, $migrationClassBody); $this->logSection('propel', sprintf('"%s" file successfully created in %s', $migrationFileName, $migrationDirectory)); if ($editorCmd = $options['editor-cmd']) { $this->logSection('propel', sprintf('Using "%s" as text editor', $editorCmd)); shell_exec($editorCmd . ' ' . escapeshellarg($migrationFilePath)); } else { $this->logSection('propel', ' Please review the generated SQL statements, and add data migration code if necessary.'); $this->logSection('propel', ' Once the migration class is valid, call the "propel:migrate" task to execute it.'); } }
/** * Run propel phing commands * * @param string $cmd phing target * @param array $argv arguments * @return string */ public static function propelGen($cmd = '', $argv = array()) { $autoloader = App::getInstance()->autoloader; $generatorBase = dirname(dirname(dirname($autoloader->findFile('AbstractPropelDataModelTask')))); $buildXml = $generatorBase . '/build.xml'; $projectPath = \Curry\App::getInstance()['projectPath'] . '/propel'; $argv[] = '-logger'; $argv[] = 'phing.listener.AnsiColorLogger'; $argv[] = '-f'; $argv[] = $buildXml; $argv[] = '-Dproject.dir=' . $projectPath; if ($cmd) { $argv[] = $cmd; } $cwd = getcwd(); $stream = fopen("php://temp", 'r+'); $outputStream = new OutputStream($stream); Phing::setOutputStream($outputStream); Phing::setErrorStream($outputStream); Phing::startup(); Phing::fire($argv); rewind($stream); $content = stream_get_contents($stream); Phing::shutdown(); chdir($cwd); if (extension_loaded('apc')) { @apc_clear_cache(); } return $content; }
public function setUp() { Phing::startup(); $this->reader = $this->getMockBuilder('FileReader')->setConstructorArgs(array(realpath(dirname(__FILE__) . '/../Fixtures/DefaultConfiguration.php')))->setMethods(NULL)->getMock(); $this->filter = new LocalConfigurationFilter($this->reader); }
protected function callPhing($taskName, $checkSchema, $properties = array()) { $schemas = sfFinder::type('file')->name('*schema.xml')->relative()->follow_link()->in(sfConfig::get('sf_config_dir')); if (self::CHECK_SCHEMA === $checkSchema && !$schemas) { throw new sfCommandException('You must create a schema.yml or schema.xml file.'); } // Call phing targets sfToolkit::addIncludePath(array(sfConfig::get('sf_symfony_lib_dir'), sfConfig::get('sf_propel_generator_path', realpath(dirname(__FILE__) . '/../vendor/propel-generator/classes')))); $args = array(); $bufferPhingOutput = null === $this->commandApplication || !$this->commandApplication->withTrace(); $properties = array_merge(array('build.properties' => 'propel.ini', 'project.dir' => sfConfig::get('sf_config_dir'), 'propel.output.dir' => sfConfig::get('sf_root_dir')), $properties); foreach ($properties as $key => $value) { $args[] = "-D{$key}={$value}"; } // Build file $args[] = '-f'; $args[] = realpath(dirname(__FILE__) . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'propel-generator' . DIRECTORY_SEPARATOR . 'build.xml'); // Logger if (DIRECTORY_SEPARATOR != '\\' && (function_exists('posix_isatty') && @posix_isatty(STDOUT))) { $args[] = '-logger'; $args[] = 'phing.listener.AnsiColorLogger'; } // Add our listener to detect errors $args[] = '-listener'; $args[] = 'sfPhingListener'; // Add any arbitrary arguments last foreach ($this->additionalPhingArgs as $arg) { if (in_array($arg, array('verbose', 'debug'))) { $bufferPhingOutput = false; } $args[] = '-' . $arg; } $args[] = $taskName; // filter arguments through the event dispatcher $args = $this->dispatcher->filter(new sfEvent($this, 'propel.filter_phing_args'), $args)->getReturnValue(); require_once dirname(__FILE__) . '/sfPhing.class.php'; // enable output buffering Phing::setOutputStream(new OutputStream(fopen('php://output', 'w'))); Phing::startup(); Phing::setProperty('phing.home', getenv('PHING_HOME')); $this->logSection('propel', 'Running "' . $taskName . '" phing task'); if ($bufferPhingOutput) { ob_start(); } $m = new sfPhing(); $m->execute($args); $m->runBuild(); if ($bufferPhingOutput) { ob_end_clean(); } chdir(sfConfig::get('sf_root_dir')); // any errors? $ret = true; if (sfPhingListener::hasErrors()) { $messages = array('Some problems occurred when executing the task:'); foreach (sfPhingListener::getExceptions() as $exception) { $messages[] = ''; $messages[] = preg_replace('/^.*build\\-propel\\.xml/', 'build-propel.xml', $exception->getMessage()); $messages[] = ''; } if (count(sfPhingListener::getErrors())) { $messages[] = 'If the exception message is not clear enough, read the output of the task for'; $messages[] = 'more information'; } $this->logBlock($messages, 'ERROR_LARGE'); $ret = false; } return $ret; }
protected function callPhing($taskName, $checkSchema) { $schemas = sfFinder::type('file')->name('*schema.xml')->relative()->follow_link()->in('config'); if (self::CHECK_SCHEMA === $checkSchema && !$schemas) { throw new sfCommandException('You must create a schema.yml or schema.xml file.'); } // Call phing targets if (false === strpos('propel-generator', get_include_path())) { set_include_path(sfConfig::get('sf_symfony_lib_dir') . '/plugins/sfPropelPlugin/lib/vendor/propel-generator/classes' . PATH_SEPARATOR . get_include_path()); } set_include_path(sfConfig::get('sf_root_dir') . PATH_SEPARATOR . get_include_path()); $args = array(); // Needed to include the right Propel builders set_include_path(sfConfig::get('sf_symfony_lib_dir') . PATH_SEPARATOR . get_include_path()); $options = array('project.dir' => sfConfig::get('sf_config_dir'), 'build.properties' => 'propel.ini', 'propel.output.dir' => sfConfig::get('sf_root_dir')); foreach ($options as $key => $value) { $args[] = "-D{$key}={$value}"; } // Build file $args[] = '-f'; $args[] = realpath(sfConfig::get('sf_symfony_lib_dir') . '/plugins/sfPropelPlugin/lib/vendor/propel-generator/build.xml'); if (is_null($this->commandApplication) || !$this->commandApplication->isVerbose()) { $args[] = '-q'; } if (!is_null($this->commandApplication) && $this->commandApplication->withTrace()) { $args[] = '-debug'; } // Logger if (DIRECTORY_SEPARATOR != '\\' && (function_exists('posix_isatty') && @posix_isatty(STDOUT))) { $args[] = '-logger'; $args[] = 'phing.listener.AnsiColorLogger'; } $args[] = $taskName; require_once dirname(__FILE__) . '/sfPhing.class.php'; Phing::startup(); Phing::setProperty('phing.home', getenv('PHING_HOME')); $m = new sfPhing(); $m->execute($args); $m->runBuild(); chdir(sfConfig::get('sf_root_dir')); }