Add CLI support for passing and splitting execution arguments

This commit is contained in:
netkas 2024-09-20 18:39:46 -04:00
parent 7494ead7b3
commit 9418125722
4 changed files with 47 additions and 3 deletions

View file

@ -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)
{ {

View file

@ -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
*/ */

View file

@ -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
); );
} }

View file

@ -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
* *