Task: #53687 Support instance-specific cfg write targets and add coverage V2 #4

Merged
norb merged 11 commits from 53687/task-support-instance-specific-cfg-write-target-v2 into master 2026-03-30 15:09:21 +00:00
2 changed files with 24 additions and 57 deletions
Showing only changes of commit 2a391f4e0a - Show all commits

Task: #53687 Simplify cfg argument handling and keep --siteDir with JSON write input (-i)

Alejandro Sosa 2026-03-26 12:27:12 +01:00

32
bin/cfg
View file

@ -56,36 +56,6 @@ function readJsonInputFile(string $path): array
return $data; return $data;
} }
// Pre-parse siteDir so it can be passed after positional args.
// The input helper library does not handle this case reliably.
$preparsedSiteDir = null;
$rawArgv = $_SERVER['argv'] ?? $GLOBALS['argv'] ?? null;
if (is_array($rawArgv) && !empty($rawArgv))
{
$filteredArgv = [$rawArgv[0]];
for ($idx = 1; $idx < count($rawArgv); $idx++)
{
$arg = $rawArgv[$idx];
if ($arg === '--siteDir')
{
$preparsedSiteDir = $rawArgv[$idx + 1] ?? '';
if (isset($rawArgv[$idx + 1])) $idx++;
continue;
}
if (str_starts_with($arg, '--siteDir='))
{
$preparsedSiteDir = substr($arg, strlen('--siteDir='));
continue;
}
$filteredArgv[] = $arg;
}
$_SERVER['argv'] = $filteredArgv;
$GLOBALS['argv'] = $filteredArgv;
}
$version = '0.4'; $version = '0.4';
$actions = [ 'show', 'write', 'help' ]; $actions = [ 'show', 'write', 'help' ];
@ -289,7 +259,7 @@ if ($pkgPath = $argv->find('pkgPath')) $cfg->pkgPath(rtrim($pkgPath, '/').'/');
$site = null; $site = null;
$siteFlag = 0x01; $siteFlag = 0x01;
$siteInput = ($preparsedSiteDir !== null) ? $preparsedSiteDir : $argv->find('siteDir'); $siteInput = $argv->find('siteDir');
if ($siteInput !== null && $siteInput !== false) if ($siteInput !== null && $siteInput !== false)
{ {
$siteInput = trim((string)$siteInput); $siteInput = trim((string)$siteInput);

View file

@ -151,14 +151,13 @@ class CfgTest extends TestCase
public function testWriteWithSiteDirCreatesAndWritesSiteConfig(): void public function testWriteWithSiteDirCreatesAndWritesSiteConfig(): void
{ {
$result = $this->runCfg([ $result = $this->runCfg([
'-a', '-a',
$this->tmpDir, $this->tmpDir,
'write', 'write',
'Extension', 'Extension',
'module:code="X100"', 'module:code="X100"',
'--siteDir', '--siteDir=owner_xyz',
'owner_xyz', ]);
]);
$this->assertSame(0, $result['code'], $result['output']); $this->assertSame(0, $result['code'], $result['output']);
@ -173,25 +172,23 @@ class CfgTest extends TestCase
public function testWriteWithSiteDirMergesIntoExistingSiteConfig(): void public function testWriteWithSiteDirMergesIntoExistingSiteConfig(): void
{ {
$firstWrite = $this->runCfg([ $firstWrite = $this->runCfg([
'-a', '-a',
$this->tmpDir, $this->tmpDir,
'write', 'write',
'Extension', 'Extension',
'module:code="X100"', 'module:code="X100"',
'--siteDir', '--siteDir=owner_xyz',
'owner_xyz', ]);
]);
$this->assertSame(0, $firstWrite['code'], $firstWrite['output']); $this->assertSame(0, $firstWrite['code'], $firstWrite['output']);
$secondWrite = $this->runCfg([ $secondWrite = $this->runCfg([
'-a', '-a',
$this->tmpDir, $this->tmpDir,
'write', 'write',
'Extension', 'Extension',
'module:label="demo-module"', 'module:label="demo-module"',
'--siteDir', '--siteDir=owner_xyz',
'owner_xyz', ]);
]);
$this->assertSame(0, $secondWrite['code'], $secondWrite['output']); $this->assertSame(0, $secondWrite['code'], $secondWrite['output']);
$siteFile = $this->tmpDir.'/config/owner_xyz/Extension.conf.php'; $siteFile = $this->tmpDir.'/config/owner_xyz/Extension.conf.php';
@ -327,10 +324,10 @@ class CfgTest extends TestCase
'Extension', 'Extension',
'module:code="X100"', 'module:code="X100"',
'--siteDir=', '--siteDir=',
]); ]);
$this->assertSame(1, $result['code']); $this->assertSame(1, $result['code']);
$this->assertStringContainsString('Option --siteDir is empty.', $result['output']); $this->assertStringContainsString('a value is required for --siteDir', $result['output']);
} }
private function runCfg(array $args): array private function runCfg(array $args): array