Add CLI support for passing and splitting execution arguments
This commit is contained in:
parent
7494ead7b3
commit
9418125722
4 changed files with 47 additions and 3 deletions
|
@ -24,9 +24,11 @@
|
||||||
|
|
||||||
use Exception;
|
use Exception;
|
||||||
use ncc\Classes\Runtime;
|
use ncc\Classes\Runtime;
|
||||||
|
use ncc\CLI\Main;
|
||||||
use ncc\Objects\CliHelpSection;
|
use ncc\Objects\CliHelpSection;
|
||||||
use ncc\Utilities\Console;
|
use ncc\Utilities\Console;
|
||||||
use ncc\Utilities\Functions;
|
use ncc\Utilities\Functions;
|
||||||
|
use ncc\Utilities\Resolver;
|
||||||
|
|
||||||
class ExecCommand
|
class ExecCommand
|
||||||
{
|
{
|
||||||
|
@ -40,6 +42,12 @@
|
||||||
{
|
{
|
||||||
$package = $args['package'] ?? null;
|
$package = $args['package'] ?? null;
|
||||||
$version = $args['exec-version'] ?? 'latest';
|
$version = $args['exec-version'] ?? 'latest';
|
||||||
|
$program_arguments = [];
|
||||||
|
|
||||||
|
if(isset($args['exec-args']))
|
||||||
|
{
|
||||||
|
$program_arguments = Resolver::splitArguments(Main::getRawArgs(), '--exec-args');
|
||||||
|
}
|
||||||
|
|
||||||
if($package === null)
|
if($package === null)
|
||||||
{
|
{
|
||||||
|
@ -58,7 +66,7 @@
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return Runtime::execute($package_name);
|
return Runtime::execute($package_name, $program_arguments);
|
||||||
}
|
}
|
||||||
catch(Exception $e)
|
catch(Exception $e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -49,6 +49,11 @@
|
||||||
*/
|
*/
|
||||||
private static $args;
|
private static $args;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private static $raw_args;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var LogLevel|null
|
* @var LogLevel|null
|
||||||
*/
|
*/
|
||||||
|
@ -63,6 +68,7 @@
|
||||||
public static function start(array $argv): int
|
public static function start(array $argv): int
|
||||||
{
|
{
|
||||||
self::$args = Resolver::parseArguments(implode(' ', $argv));
|
self::$args = Resolver::parseArguments(implode(' ', $argv));
|
||||||
|
self::$raw_args = $argv;
|
||||||
|
|
||||||
if(!isset(self::$args['ncc-cli']))
|
if(!isset(self::$args['ncc-cli']))
|
||||||
{
|
{
|
||||||
|
@ -213,6 +219,16 @@
|
||||||
return self::$args;
|
return self::$args;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the raw arguments passed to ncc
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function getRawArgs(): array
|
||||||
|
{
|
||||||
|
return self::$raw_args;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return LogLevel
|
* @return LogLevel
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -84,7 +84,7 @@
|
||||||
* @throws PathNotFoundException
|
* @throws PathNotFoundException
|
||||||
* @throws OperationException
|
* @throws OperationException
|
||||||
*/
|
*/
|
||||||
public static function execute(string $package): int
|
public static function execute(string $package, array $arguments=[]): int
|
||||||
{
|
{
|
||||||
if(!self::isImported($package))
|
if(!self::isImported($package))
|
||||||
{
|
{
|
||||||
|
@ -110,7 +110,8 @@
|
||||||
|
|
||||||
return ExecutionUnitRunner::executeFromSystem(
|
return ExecutionUnitRunner::executeFromSystem(
|
||||||
self::$imported_packages[$package],
|
self::$imported_packages[$package],
|
||||||
Metadata::fromArray(ZiProto::decode(IO::fread($metadata_path)))->getMainExecutionPolicy()
|
Metadata::fromArray(ZiProto::decode(IO::fread($metadata_path)))->getMainExecutionPolicy(),
|
||||||
|
$arguments
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -130,6 +130,25 @@
|
||||||
return $configs;
|
return $configs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Split arguments
|
||||||
|
*
|
||||||
|
* @param array $args List of arguments
|
||||||
|
* @param string $arg The argument to split from
|
||||||
|
* @return array Split arguments starting from specified argument
|
||||||
|
*/
|
||||||
|
public static function splitArguments(array $args, string $arg): array
|
||||||
|
{
|
||||||
|
$index = array_search($arg, $args);
|
||||||
|
|
||||||
|
if($index === false)
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return array_slice($args, $index + 1);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resolves the constant's full name
|
* Resolves the constant's full name
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Reference in a new issue