From 98cc7c41c1d29d5326c79bef09037840e726c156 Mon Sep 17 00:00:00 2001 From: Timotej Ecimovic <timotej.ecimovic@silabs.com> Date: Tue, 8 Nov 2022 07:51:44 -0500 Subject: [PATCH] Properly implement switch for ZCL metafile loading failures. (#790) --- src-electron/main-process/startup.js | 25 +++++++++++++++++++------ src-electron/zcl/zcl-loader.js | 24 +++++++++++++++++++----- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/src-electron/main-process/startup.js b/src-electron/main-process/startup.js index d919805d..d363b53b 100644 --- a/src-electron/main-process/startup.js +++ b/src-electron/main-process/startup.js @@ -66,7 +66,9 @@ async function startNormal(quitFunction, argv) { mainDatabase = db try { - await zclLoader.loadZclMetafiles(db, argv.zclProperties) + await zclLoader.loadZclMetafiles(db, argv.zclProperties, { + failOnLoadingError: !argv.noLoadingFailure, + }) let ctx = await generatorEngine.loadTemplates(db, argv.generationTemplate, { failOnLoadingError: !argv.noLoadingFailure, }) @@ -187,7 +189,9 @@ async function startConvert(argv, options) { env.zapVersion() ) options.logger(' ðŸ database and schema initialized') - await zclLoader.loadZclMetafiles(db, argv.zclProperties) + await zclLoader.loadZclMetafiles(db, argv.zclProperties, { + failOnLoadingError: !argv.noLoadingFailure, + }) options.logger(` ðŸ zcl package loaded: ${argv.zclProperties}`) if (argv.generationTemplate != null) { await generatorEngine.loadTemplates(db, argv.generationTemplate, { @@ -360,7 +364,9 @@ async function startAnalyze(argv, options) { env.zapVersion() ) options.logger(' 👉 database and schema initialized') - await zclLoader.loadZclMetafiles(db, argv.zclProperties) + await zclLoader.loadZclMetafiles(db, argv.zclProperties, { + failOnLoadingError: !argv.noLoadingFailure, + }) await util.executePromisesSequentially(paths, (singlePath) => importJs .importDataFromFile(db, singlePath, { @@ -399,7 +405,9 @@ async function startServer(argv, quitFunction) { }) mainDatabase = db try { - await zclLoader.loadZclMetafiles(db, argv.zclProperties) + await zclLoader.loadZclMetafiles(db, argv.zclProperties, { + failOnLoadingError: !argv.noLoadingFailure, + }) let ctx = await generatorEngine.loadTemplates(db, argv.generationTemplate, { failOnLoadingError: !argv.noLoadingFailure, }) @@ -445,7 +453,10 @@ async function startSelfCheck( options.logger(' 👉 database and schema initialized') let zclPackageIds = await zclLoader.loadZclMetafiles( mainDb, - argv.zclProperties + argv.zclProperties, + { + failOnLoadingError: !argv.noLoadingFailure, + } ) options.logger( ` 👉 zcl metadata packlages loaded: ${zclPackageIds.length}` @@ -559,7 +570,9 @@ async function startGeneration(argv, options) { env.zapVersion() ) - await zclLoader.loadZclMetafiles(mainDb, zclProperties) + await zclLoader.loadZclMetafiles(mainDb, zclProperties, { + failOnLoadingError: !argv.noLoadingFailure, + }) let ctx = await generatorEngine.loadTemplates(mainDb, templateMetafile, { failOnLoadingError: !argv.noLoadingFailure, }) diff --git a/src-electron/zcl/zcl-loader.js b/src-electron/zcl/zcl-loader.js index 6383c416..62111da5 100644 --- a/src-electron/zcl/zcl-loader.js +++ b/src-electron/zcl/zcl-loader.js @@ -74,16 +74,30 @@ async function recordVersion(db, packageId, version, category, description) { * @param {*} metadataFile array of paths * @returns Array of loaded packageIds. */ -async function loadZclMetafiles(db, metadataFiles) { +async function loadZclMetafiles( + db, + metadataFiles, + options = { + failOnLoadingError: true, + } +) { let packageIds = [] if (Array.isArray(metadataFiles)) { for (let f of metadataFiles) { - let ctx = await loadZcl(db, f) - packageIds.push(ctx.packageId) + try { + let ctx = await loadZcl(db, f) + packageIds.push(ctx.packageId) + } catch (err) { + if (options.failOnLoadingError) throw err + } } } else { - let ctx = await loadZcl(db, metadataFiles) - packageIds.push(ctx.packageId) + try { + let ctx = await loadZcl(db, metadataFiles) + packageIds.push(ctx.packageId) + } catch (err) { + if (options.failOnLoadingError) throw err + } } return packageIds } -- GitLab