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 ncc\Classes\Runtime;
use ncc\CLI\Main;
use ncc\Objects\CliHelpSection;
use ncc\Utilities\Console;
use ncc\Utilities\Functions;
use ncc\Utilities\Resolver;
class ExecCommand
{
@ -40,6 +42,12 @@
{
$package = $args['package'] ?? null;
$version = $args['exec-version'] ?? 'latest';
$program_arguments = [];
if(isset($args['exec-args']))
{
$program_arguments = Resolver::splitArguments(Main::getRawArgs(), '--exec-args');
}
if($package === null)
{
@ -58,7 +66,7 @@
try
{
return Runtime::execute($package_name);
return Runtime::execute($package_name, $program_arguments);
}
catch(Exception $e)
{

View file

@ -49,6 +49,11 @@
*/
private static $args;
/**
* @var array
*/
private static $raw_args;
/**
* @var LogLevel|null
*/
@ -63,6 +68,7 @@
public static function start(array $argv): int
{
self::$args = Resolver::parseArguments(implode(' ', $argv));
self::$raw_args = $argv;
if(!isset(self::$args['ncc-cli']))
{
@ -213,6 +219,16 @@
return self::$args;
}
/**
* Returns the raw arguments passed to ncc
*
* @return array
*/
public static function getRawArgs(): array
{
return self::$raw_args;
}
/**
* @return LogLevel
*/

View file

@ -84,7 +84,7 @@
* @throws PathNotFoundException
* @throws OperationException
*/
public static function execute(string $package): int
public static function execute(string $package, array $arguments=[]): int
{
if(!self::isImported($package))
{
@ -110,7 +110,8 @@
return ExecutionUnitRunner::executeFromSystem(
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;
}
/**
* 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
*