Public Access
feat(cli): theme_vars_check manifest completeness + fileset integrity #328
@@ -137,6 +137,45 @@ if (is_file($manifest)) {
|
||||
|
||||
isset($xml->dlid) ? $ok('<dlid> license-key field present')
|
||||
: $fail('<dlid prefix="dlid=" suffix=""/> is missing');
|
||||
|
||||
// Required manifest fields
|
||||
foreach (['name', 'element', 'author', 'creationDate'] as $field) {
|
||||
(isset($xml->$field) && trim((string) $xml->$field) !== '')
|
||||
? $ok("<$field> present")
|
||||
: $fail("<$field> is missing or empty");
|
||||
}
|
||||
|
||||
// scriptfile (if declared) must exist
|
||||
if (isset($xml->scriptfile)) {
|
||||
$sf = trim((string) $xml->scriptfile);
|
||||
is_file("$src/$sf") ? $ok("scriptfile '$sf' present")
|
||||
: $fail("<scriptfile> references '$sf' which is not in src/");
|
||||
}
|
||||
|
||||
// Fileset integrity — every referenced file/folder must exist in src/
|
||||
if (isset($xml->fileset)) {
|
||||
$missingFs = [];
|
||||
foreach ($xml->fileset->files as $files) {
|
||||
$folder = trim((string) ($files['folder'] ?? ''));
|
||||
$baseDir = $folder !== '' ? "$src/$folder" : $src;
|
||||
foreach ($files->filename as $fn) {
|
||||
$rel = ($folder !== '' ? "$folder/" : '') . trim((string) $fn);
|
||||
if (!is_file("$baseDir/" . trim((string) $fn))) { $missingFs[] = $rel; }
|
||||
}
|
||||
foreach ($files->folder as $fd) {
|
||||
$rel = ($folder !== '' ? "$folder/" : '') . trim((string) $fd) . '/';
|
||||
if (!is_dir("$baseDir/" . trim((string) $fd))) { $missingFs[] = $rel; }
|
||||
}
|
||||
}
|
||||
if ($missingFs) {
|
||||
$shown = array_slice($missingFs, 0, 10);
|
||||
$more = count($missingFs) - count($shown);
|
||||
$fail('fileset references ' . count($missingFs) . ' missing path(s): '
|
||||
. implode(', ', $shown) . ($more > 0 ? " (+$more more)" : ''));
|
||||
} else {
|
||||
$ok('all fileset paths exist in src/');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user