From 3071853f23f763d399fe0aa798c262e999058781 Mon Sep 17 00:00:00 2001 From: Gunnar Wrobel Date: Tue, 2 Mar 2010 13:49:51 +0100 Subject: [PATCH] Intermediate step in refactoring the Quality package. --- framework/Qc/lib/Horde/Qc/Config.php | 9 +- framework/Qc/lib/Horde/Qc/Config/Cli.php | 22 +---- framework/Qc/lib/Horde/Qc/Module.php | 26 ++++- .../Qc/lib/Horde/Qc/Module/PearPackageXml.php | 76 ++++++++++++++- framework/Qc/package.xml | 8 +- framework/Qc/script/horde-quality-control.php | 107 +-------------------- 6 files changed, 113 insertions(+), 135 deletions(-) diff --git a/framework/Qc/lib/Horde/Qc/Config.php b/framework/Qc/lib/Horde/Qc/Config.php index 267d24789..e4b6d76ec 100644 --- a/framework/Qc/lib/Horde/Qc/Config.php +++ b/framework/Qc/lib/Horde/Qc/Config.php @@ -28,6 +28,13 @@ * @link http://pear.horde.org/index.php?package=Qc erver */ -abstract class Horde_Qc_Config +class Horde_Qc_Config { + + private $configs; + + public function __construct(Horde_Qc_Modules $modules) + { + $this->configs[] = new Horde_Qc_Config_Cli($modules); + } } \ No newline at end of file diff --git a/framework/Qc/lib/Horde/Qc/Config/Cli.php b/framework/Qc/lib/Horde/Qc/Config/Cli.php index c14ec1bd3..66f0ad998 100644 --- a/framework/Qc/lib/Horde/Qc/Config/Cli.php +++ b/framework/Qc/lib/Horde/Qc/Config/Cli.php @@ -43,7 +43,7 @@ implements Horde_Qc_Config_Interface * * @param Horde_Qc_Modules $modules A list of modules. */ - public function __construct(Horde_Modules $modules) + public function __construct(Horde_Qc_Modules $modules) { $options = array(); @@ -58,25 +58,5 @@ implements Horde_Qc_Config_Interface ) ); list($this->_opts, $this->_args) = $parser->parseArgs(); - $this->_validate(); - - foreach ($modules as $module) { - $module->validateOptions($this->_opts, $this->_args); - } - } - - private function _validate() - { - if (empty($this->_args[0])) { - print "Please specify the path to the package you want to release!\n\n"; - $this->_parser->printUsage(STDERR); - exit(1); - } - - if (!is_dir($this->_args[0])) { - print sprintf("%s specifies no directory!\n", $this->_args[0]); - exit(1); - } } - } diff --git a/framework/Qc/lib/Horde/Qc/Module.php b/framework/Qc/lib/Horde/Qc/Module.php index b2868f0b4..feb6cf282 100644 --- a/framework/Qc/lib/Horde/Qc/Module.php +++ b/framework/Qc/lib/Horde/Qc/Module.php @@ -1,6 +1,6 @@ _parent = $parent; + } + + abstract public function getOptions(); + + abstract public function validateOptions(); + + abstract public function setup(); + + abstract public function run(); } \ No newline at end of file diff --git a/framework/Qc/lib/Horde/Qc/Module/PearPackageXml.php b/framework/Qc/lib/Horde/Qc/Module/PearPackageXml.php index dcbcde130..225102b24 100644 --- a/framework/Qc/lib/Horde/Qc/Module/PearPackageXml.php +++ b/framework/Qc/lib/Horde/Qc/Module/PearPackageXml.php @@ -25,7 +25,8 @@ * @license http://www.fsf.org/copyleft/lgpl.html LGPL * @link http://pear.horde.org/index.php?package=Qc */ -interface Horde_Qc_Module +class Horde_Qc_Module_PearPackageXml +extends Horde_Qc_Module { public function getOptions() { @@ -38,7 +39,78 @@ interface Horde_Qc_Module ); } - public function validateOptions(array $options, array $arguments) + public function run() { + +PEAR::setErrorHandling(PEAR_ERROR_DIE); + + + $package_file = $package_path . '/package.xml'; + +if (!file_exists($package_file)) { + print sprintf("There is no package.xml at %s!\n", $package_path); + exit(1); +} + +$package = PEAR_PackageFileManager2::importOptions( + $package_file, + array( + 'packagedirectory' => $package_path, + 'filelistgenerator' => 'file', + 'clearcontents' => false, + 'clearchangelog' => false, + 'simpleoutput' => true, + 'include' => '*', + 'dir_roles' => + array( + 'lib' => 'php', + 'doc' => 'doc', + 'example' => 'doc', + 'script' => 'script', + 'test' => 'test', + ), + ) +); + +$package->generateContents(); + +/** + * This is required to clear the + * section. + */ +$package->setPackageType('php'); + +$contents = $package->getContents(); +$files = $contents['dir']['file']; + +foreach ($files as $file) { + $components = explode('/', $file['attribs']['name'], 2); + switch ($components[0]) { + case 'doc': + case 'example': + case 'lib': + case 'test': + $package->addInstallAs( + $file['attribs']['name'], $components[1] + ); + break; + case 'script': + $filename = basename($file['attribs']['name']); + if (substr($filename, strlen($filename) - 4)) { + $filename = substr($filename, 0, strlen($filename) - 4); + } + $package->addInstallAs( + $file['attribs']['name'], $filename + ); + break; + } +} + +if (!empty($opts['update_packagexml'])) { + $package->writePackageFile(); +} else { + $package->debugPackageFile(); +} + } } diff --git a/framework/Qc/package.xml b/framework/Qc/package.xml index e4452dd35..3f99a8dac 100644 --- a/framework/Qc/package.xml +++ b/framework/Qc/package.xml @@ -51,7 +51,7 @@ - + @@ -73,6 +73,12 @@ pear.horde.org + + + Test + pear.horde.org + + diff --git a/framework/Qc/script/horde-quality-control.php b/framework/Qc/script/horde-quality-control.php index dc2cb6b3b..afa8f199c 100755 --- a/framework/Qc/script/horde-quality-control.php +++ b/framework/Qc/script/horde-quality-control.php @@ -1,107 +1,4 @@ #!/usr/bin/env php 'store_true') - ), -); -$parser = new Horde_Argv_Parser( - array( - 'optionList' => $options, - 'usage' => '%prog ' . _("[options] PACKAGE_PATH") - ) -); -list($opts, $args) = $parser->parseArgs(); - -if (empty($args[0])) { - echo "Please specify the path to the package you want to release!\n\n"; - $parser->printUsage(STDERR); - exit(1); -} - -$package_path = $args[0]; -if (!is_dir($package_path)) { - printf("%s specifies no directory!\n", $package_path); - exit(1); -} - -$package_file = $package_path . '/package.xml'; - -if (!file_exists($package_file)) { - printf("There is no package.xml at %s!\n", $package_path); - exit(1); -} - -$package = PEAR_PackageFileManager2::importOptions( - $package_file, - array( - 'packagedirectory' => $package_path, - 'filelistgenerator' => 'file', - 'clearcontents' => false, - 'clearchangelog' => false, - 'simpleoutput' => true, - 'ignore' => array('*~', 'conf.php', 'CVS/*'), - 'include' => '*', - 'dir_roles' => - array( - 'lib' => 'php', - 'doc' => 'doc', - 'example' => 'doc', - 'script' => 'script', - 'test' => 'test', - 'migration' => 'data', - ), - ) -); - -$package->generateContents(); - -/** - * This is required to clear the - * section. - */ -$package->setPackageType('php'); - -$contents = $package->getContents(); -$files = $contents['dir']['file']; - -foreach ($files as $file) { - $components = explode('/', $file['attribs']['name'], 2); - switch ($components[0]) { - case 'doc': - case 'example': - case 'lib': - case 'test': - $package->addInstallAs( - $file['attribs']['name'], $components[1] - ); - break; - case 'migration': - $components = explode('/', $components[1]); - array_splice($components, count($components) - 1, 0, 'migration'); - $package->addInstallAs( - $file['attribs']['name'], implode('/', $components) - ); - break; - case 'script': - $filename = basename($file['attribs']['name']); - if (substr($filename, strlen($filename) - 4)) { - $filename = substr($filename, 0, strlen($filename) - 4); - } - $package->addInstallAs( - $file['attribs']['name'], $filename - ); - break; - } -} - -if (!empty($opts['update_packagexml'])) { - $package->writePackageFile(); -} else { - $package->debugPackageFile(); -} +require_once('Horde/Autoloader.php'); +Horde_Qc::main(); -- 2.11.0