<Website>

Automap

PHK Home

File: /src/Automap/CLI/Cmd.php

Size:6578
Storage flags:

<?php
//=============================================================================
//
// Copyright Francois Laupretre <automap@tekwire.net>
//
//   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 <automap@tekwire.net>
* @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 <base_path>] <relative paths...>
        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 <base_path> : 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 <format> : Output format. Default is 'auto'.

  - check
        Checks a map file

  - export [-o <path>]
        Exports the symbol table from a map file
        Options :
            -o <path> : path of file to create with exported data. Default is
                        to write to stdout.

  - import [-a] [-i <path>]
        Import symbols from an exported file
        Options :
            -i <path> : 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 <name> <value>
        Sets an option in an existing map

  - unsetOption <name>
        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 <path> : 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)!=2self::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)!=1self::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 <Extension_dir> 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
//===========================================================================
?>

For more information about the PHK package format: http://phk.tekwire.net