// // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // //============================================================================= /** * @copyright Francois Laupretre * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, V 2.0 * @category Automap * @package Automap *///========================================================================== //============================================================================= /** * The main script of the CLI Automap manager tool. * * API status: Private * Included in the PHK PHP runtime: No * Implemented in the extension: No *///========================================================================== namespace Automap\CLI { if (!class_exists('Automap\CLI\Cmd',false)) { class Cmd { //--------- private static function errorAbort($msg,$usage=true) { if ($usage) $msg .= " - Use 'help' command for syntax"; throw new \Exception($msg); } //--------- private static function usage() { echo " Available commands : - register [-a] [-b ] Scans PHP scripts and builds a map. The relative paths can reference regular files and/or directories. Directories are scanned recursively and every PHP scripts they contain are scanned. Options : -a : Append. If the map file exists, add symbols without recreating it -b : Specifies a base path. If relative, the reference is the map file directory. - show [-f {auto|html|text}] Displays the content of a map file Options : -f : Output format. Default is 'auto'. - check Checks a map file - export [-o ] Exports the symbol table from a map file Options : -o : path of file to create with exported data. Default is to write to stdout. - import [-a] [-i ] Import symbols from an exported file Options : -i : path of file where data will be read. Default is to read from stdin. -a : If the map file exists, add symbols without recreating it - setOption Sets an option in an existing map - unsetOption Unsets an option in an existing map - help Display this message Global options : -v : Increase verbose level (can be set more than once) -q : Decrease verbose level (can be set more than once) -m : Specifies the path of the map file the command applies to. Default is './auto.map'. More information at http://automap.tekwire.net\n\n"; } //--------- // Main // Options can be located before AND after the action keyword. public static function run($args) { $op=new Options; $op->parseAll($args); $action=(count($args)) ? array_shift($args) : 'help'; switch($action) { case 'show': $map=new \Automap\Map($op->option('map_path')); $map->show($op->option('format')); break; case 'check': $map=new \Automap\Map($op->option('map_path')); $errs=$map->check($id); if (count($errs)) { foreach($errs as $err) \Phool\Display::error($err); throw new \Exception("*** The check procedure found errors in file $mapfile"); } \Phool\Display::info('Check OK'); break; case 'setOption': if (count($args)!=2) self::errorAbort('setOption requires 2 arguments'); list($name,$value)=$args; $map=new \Automap\Build\Creator(); $map->readMapFile($op->option('map_path')); $map->setOption($name,$value); $map->save($op->option('map_path')); break; case 'unsetOption': if (count($args)!=1) self::errorAbort('unsetOption requires 1 argument'); $name=array_shift($args); $map=new \Automap\Build\Creator(); $map->readMapFile($op->option('map_path')); $map->unsetOption($name); $map->save($op->option('map_path')); break; case 'register_extensions': //-- Must be executed with : //-- php -n -d automap.phk register_extensions //-- in order to ignore extension preloading directives in php.ini //-- (if an extension is already loaded, we cannot determine which file //-- it came from). The '-d' flag is mandatory as long as PHP cannot //-- dl() outside of 'extension_dir'. $map=new \Automap\Build\Creator(); if (($op->option('append')) && is_file($op->option('map_path'))) $map->readMapFile($op->option('map_path')); $map->registerExtensionDir(); $map->save($op->option('map_path')); break; case 'register': $map=new \Automap\Build\Creator(); if (($op->option('append')) && is_file($op->option('map_path'))) $map->readMapFile($op->option('map_path')); $abs_map_dir=\Phool\File::mkAbsolutePath(dirname($op->option('map_path'))); if (!is_null($op->option('base_path'))) $map->setOption('base_path',$op->option('base_path')); $abs_base=\Phool\File::combinePath($abs_map_dir,$map->option('base_path')); foreach($args as $rpath) { $abs_path=\Phool\File::combinePath($abs_base,$rpath); $map->registerPath($abs_path,$rpath); } $map->save($op->option('map_path')); break; case 'export': $map=new \Automap\Map($op->option('map_path')); $map->export($op->option('output')); break; case 'import': $map=new \Automap\Build\Creator(); if (($op->option('append')) && is_file($op->option('map_path'))) $map->readMapFile($op->option('map_path')); $map->import($op->option('input')); $map->save($op->option('map_path')); break; case 'help': self::usage(); break; default: self::errorAbort("Unknown action: '$action'"); } } //--- } // End of class //=========================================================================== } // End of class_exists //=========================================================================== } // End of namespace //=========================================================================== ?>