diff --git a/scripts/hustler-import.mjs b/scripts/hustler-import.mjs index a720fa7..726baca 100644 --- a/scripts/hustler-import.mjs +++ b/scripts/hustler-import.mjs @@ -919,17 +919,25 @@ export function schreibe(plan, wurzel = REPO) { const mb = (b) => `${(b / 1024 / 1024).toFixed(2).replace('.', ',')} MB` export async function main(argumente) { - if (argumente.includes('--help') || argumente.includes('-h') || argumente.length < 1 || argumente.length > 2) { - console.log('Aufruf: node scripts/hustler-import.mjs []') - return argumente.length >= 1 && argumente.length <= 2 ? 0 : 2 + // --ohne-woms: bewusst nur mit pixelwelt-v2 arbeiten (entfernt vorhandene graue Raum-Ebenen und setzt das Haus auf v2 zurück) + const ohneWoms = argumente.includes('--ohne-woms') + const pfade = argumente.filter((a) => a !== '--ohne-woms') + if (pfade.includes('--help') || pfade.includes('-h') || pfade.length < 1 || pfade.length > 2) { + console.log('Aufruf: node scripts/hustler-import.mjs (oder bewusst ohne zweiten Ordner: --ohne-woms)') + return pfade.length >= 1 && pfade.length <= 2 ? 0 : 2 } - const v2 = path.resolve(argumente[0]) - let woms = argumente[1] ? path.resolve(argumente[1]) : null + const v2 = path.resolve(pfade[0]) + let woms = pfade[1] ? path.resolve(pfade[1]) : null const hinweise = [] - if (woms && !existsSync(woms)) { - hinweise.push(`Hinweis: Der Ordner ${woms} gibt es noch nicht; es wird nur mit pixelwelt-v2 gearbeitet.`) - woms = null + if (woms && !existsSync(woms)) woms = null + // Ohne den Ordner mit dem neu gezeichneten Haus würden die eingecheckten grauen Raum-Ebenen gelöscht und haus.png auf v2 zurückgesetzt + // (Endprüfung R6): das nur auf ausdrücklichen Wunsch + const hausImRepo = path.join(REPO, ASSETS, 'haus') + const graueImRepo = existsSync(hausImRepo) && readdirSync(hausImRepo).some((n) => /^raum-grau-[a-z0-9_-]+\.png$/i.test(n)) + if (!woms && graueImRepo && !ohneWoms) { + throw new ImportFehler('Der Ordner pixelwelt-woms fehlt (zweites Argument), im Repo liegen aber graue Raum-Ebenen. Ohne ihn würden sie gelöscht und das Haus auf pixelwelt-v2 zurückgesetzt. Ordner angeben oder bewusst --ohne-woms setzen.') } + if (!woms && ohneWoms) hinweise.push('Hinweis: --ohne-woms – es wird nur mit pixelwelt-v2 gearbeitet.') const plan = await baue({ v2, woms }) const z = schreibe(plan) for (const h of hinweise) console.log(h) diff --git a/tests/unit/hustlerImportCss.test.mjs b/tests/unit/hustlerImportCss.test.mjs index b3a6cc9..011245c 100644 --- a/tests/unit/hustlerImportCss.test.mjs +++ b/tests/unit/hustlerImportCss.test.mjs @@ -7,7 +7,7 @@ import path from 'node:path' // Umformer und Planer aus scripts/hustler-import.mjs: CSS-Zerlegung (Kommentare, Zeichenketten, verschachtelte // @media, @keyframes), Selektoren, Animationsnamen, Blob-Adressen, Fehlermeldungen und Wiederholbarkeit. -const { wandleCss, wandleSelektor, baue, pruefsumme, schreibe, ImportFehler } = await import('../../scripts/hustler-import.mjs') +const { wandleCss, wandleSelektor, baue, pruefsumme, schreibe, ImportFehler, main } = await import('../../scripts/hustler-import.mjs') const V2 = process.env.HUSTLER_V2 || '/root/reports/workers-2026-10-16/pixelwelt-v2' const hatV2 = existsSync(path.join(V2, 'entwurf/Main.dc.html')) @@ -292,3 +292,7 @@ test('baue mit pixelwelt-woms: gleichnamige Haus-Dateien ersetzen die aus v2, gr loesche(wurzel) } }) + +test('Import ohne pixelwelt-woms bricht ab, solange im Repo graue Raum-Ebenen liegen (Endprüfung R6) – nichts wird geschrieben oder gelöscht', opt, async () => { + await assert.rejects(() => main([V2]), (e) => e instanceof ImportFehler && /--ohne-woms/.test(e.message)) +})