From e058f95afa632e5caab015765a3fbf8592011c0d Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Fri, 24 May 2024 11:15:29 -0500 Subject: [PATCH 1/5] fix: Fixed 'ti sdk install' silent fail when copying new modules to dest --- CHANGELOG.md | 1 + src/commands/sdk.js | 42 ++++++++++++++++++++---------------------- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8efe951f..309cf792 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ * fix: `ti sdk rm ` treats confirm prompt as false * fix: Assert required Node.js version * fix: Clear out undefined command args which fixes `ti project` + * fix: Fixed `ti sdk install` bug when installing new module files 7.0.0 (5/10/2024) ------------------- diff --git a/src/commands/sdk.js b/src/commands/sdk.js index f9938411..b8d3e416 100644 --- a/src/commands/sdk.js +++ b/src/commands/sdk.js @@ -404,39 +404,37 @@ SdkSubcommands.install = { const modules = []; src = join(tempDir, 'modules'); - try { - if (fs.statSync(src).isDirectory()) { - const modulesDest = join(titaniumDir, 'modules'); + if (fs.statSync(src).isDirectory()) { + const modulesDest = join(titaniumDir, 'modules'); + + for (const platform of fs.readdirSync(src)) { + const srcPlatformDir = join(src, platform); + if (!fs.statSync(srcPlatformDir).isDirectory()) { + continue; + } - for (const platform of fs.readdirSync(src)) { - const srcPlatformDir = join(src, platform); - if (!fs.statSync(srcPlatformDir).isDirectory()) { + for (const moduleName of fs.readdirSync(srcPlatformDir)) { + const srcModuleDir = join(srcPlatformDir, moduleName); + if (!fs.statSync(srcModuleDir).isDirectory()) { continue; } - for (const moduleName of fs.readdirSync(srcPlatformDir)) { - const srcModuleDir = join(srcPlatformDir, moduleName); - if (!fs.statSync(srcModuleDir).isDirectory()) { + for (const ver of fs.readdirSync(srcModuleDir)) { + const srcVersionDir = join(srcModuleDir, ver); + if (!fs.statSync(srcVersionDir).isDirectory()) { continue; } - for (const ver of fs.readdirSync(srcModuleDir)) { - const srcVersionDir = join(srcModuleDir, ver); - if (!fs.statSync(srcVersionDir).isDirectory()) { - continue; - } - - const destDir = join(modulesDest, platform, moduleName, ver); - if (!cli.argv.force || fs.statSync(destDir).isDirectory()) { - continue; - } - - modules.push({ src: srcVersionDir, dest: destDir }); + const destDir = join(modulesDest, platform, moduleName, ver); + if (!cli.argv.force || fs.existsSync(destDir)) { + continue; } + + modules.push({ src: srcVersionDir, dest: destDir }); } } } - } catch {} + } if (modules.length) { for (const { src, dest } of modules) { From 4b8a6fdc0c5938d0939391ffcb0d198fcfc04d64 Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Fri, 24 May 2024 12:21:57 -0500 Subject: [PATCH 2/5] AND, not OR --- CHANGELOG.md | 2 +- package.json | 2 +- src/commands/sdk.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 309cf792..8fa72656 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ * fix: `ti sdk rm ` treats confirm prompt as false * fix: Assert required Node.js version * fix: Clear out undefined command args which fixes `ti project` - * fix: Fixed `ti sdk install` bug when installing new module files + * fix: `ti sdk install` silently fails when installing new modules 7.0.0 (5/10/2024) ------------------- diff --git a/package.json b/package.json index 2d7a06ee..117d3cb0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "titanium", - "version": "7.0.0", + "version": "7.1.0", "author": "TiDev, Inc. ", "description": "Command line interface for building Titanium SDK apps", "type": "module", diff --git a/src/commands/sdk.js b/src/commands/sdk.js index b8d3e416..43255238 100644 --- a/src/commands/sdk.js +++ b/src/commands/sdk.js @@ -426,7 +426,7 @@ SdkSubcommands.install = { } const destDir = join(modulesDest, platform, moduleName, ver); - if (!cli.argv.force || fs.existsSync(destDir)) { + if (!cli.argv.force && fs.existsSync(destDir)) { continue; } From 5a83d99f0caa3c7990144f86129273442b5b588b Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Fri, 24 May 2024 14:24:54 -0500 Subject: [PATCH 3/5] Add some --debug logging --- src/commands/sdk.js | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/commands/sdk.js b/src/commands/sdk.js index 43255238..34bb8a8f 100644 --- a/src/commands/sdk.js +++ b/src/commands/sdk.js @@ -339,6 +339,7 @@ SdkSubcommands.install = { const showProgress = !cli.argv.quiet && !!cli.argv['progress-bars']; const osName = cli.env.os.name; const subject = cli.argv._.shift() || 'latest'; + const { trace } = cli.debugLogger; logger.skipBanner(false); logger.banner(); @@ -361,6 +362,7 @@ SdkSubcommands.install = { // step 2: extract the sdk zip file let { name, renameTo, tempDir } = await extractSDK({ + debugLogger: cli.debugLogger, file, force: cli.argv.force, logger, @@ -402,7 +404,7 @@ SdkSubcommands.install = { // step 5: install the modules - const modules = []; + const modules = {}; src = join(tempDir, 'modules'); if (fs.statSync(src).isDirectory()) { const modulesDest = join(titaniumDir, 'modules'); @@ -427,19 +429,24 @@ SdkSubcommands.install = { const destDir = join(modulesDest, platform, moduleName, ver); if (!cli.argv.force && fs.existsSync(destDir)) { + trace(`Module ${cyan(`${moduleName}@${ver}`)} already installed`); continue; } - modules.push({ src: srcVersionDir, dest: destDir }); + modules[`${moduleName}@${ver}`] = { src: srcVersionDir, dest: destDir }; } } } } - if (modules.length) { - for (const { src, dest } of modules) { + if (Object.keys(modules).length) { + trace(`Installing ${cyan(Object.keys(modules).length)} modules:`); + for (const [name, { src, dest }] of Object.entries(modules)) { + trace(` ${cyan(name)}`); await fs.move(src, dest, { overwrite: true }); } + } else { + trace('SDK has new modules to install'); } // step 6: cleanup @@ -614,7 +621,7 @@ async function getInstallFile({ branch, config, logger, osName, showProgress, su return { downloadedFile, file }; } -async function extractSDK({ file, force, logger, noPrompt, osName, showProgress, subject, titaniumDir }) { +async function extractSDK({ debugLogger, file, force, logger, noPrompt, osName, showProgress, subject, titaniumDir }) { const sdkDestRegExp = new RegExp(`^mobilesdk[/\\\\]${osName}[/\\\\]([^/\\\\]+)`); const tempDir = join(os.tmpdir(), `titanium-cli-${Math.floor(Math.random() * 1e6)}`); let artifact; @@ -655,7 +662,7 @@ async function extractSDK({ file, force, logger, noPrompt, osName, showProgress, } }; - logger.trace(`Extracting ${file} -> ${tempDir}`); + debugLogger.trace(`Extracting ${file} -> ${tempDir}`); await extractZip({ dest: tempDir, file, @@ -666,11 +673,11 @@ async function extractSDK({ file, force, logger, noPrompt, osName, showProgress, return { name, renameTo, tempDir }; } - logger.trace(`Detected artifact: ${artifact}`); + debugLogger.trace(`Detected artifact: ${artifact}`); const tempDir2 = join(os.tmpdir(), `titanium-cli-${Math.floor(Math.random() * 1e6)}`); file = join(tempDir, artifact); - logger.trace(`Extracting ${file} -> ${tempDir2}`); + debugLogger.trace(`Extracting ${file} -> ${tempDir2}`); await extractZip({ dest: tempDir2, file, From 44b17f2950a82bbc9adf0e57cef9ef0f7c6f165a Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Fri, 24 May 2024 16:58:12 -0500 Subject: [PATCH 4/5] fix prompts and fix module overwriting --- CHANGELOG.md | 6 +++++- src/commands/sdk.js | 26 +++++++++++++++++--------- src/util/setup-screens.js | 2 +- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fa72656..2b256d39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,11 @@ * fix: `ti sdk rm ` treats confirm prompt as false * fix: Assert required Node.js version * fix: Clear out undefined command args which fixes `ti project` - * fix: `ti sdk install` silently fails when installing new modules + * fix: `ti sdk install` no longer silently fails when installing new modules + * fix: When reinstalling an SDK, choosing "Overwrite" will force modules to + also be reinstalled + * fix: Properly handle result from `ti sdk install` overwrite prompt, + `ti sdk uninstall` version prompt, and `ti setup user` name prompt 7.0.0 (5/10/2024) ------------------- diff --git a/src/commands/sdk.js b/src/commands/sdk.js index 34bb8a8f..faf1427c 100644 --- a/src/commands/sdk.js +++ b/src/commands/sdk.js @@ -361,7 +361,7 @@ SdkSubcommands.install = { // step 2: extract the sdk zip file - let { name, renameTo, tempDir } = await extractSDK({ + let { forceModules, name, renameTo, tempDir } = await extractSDK({ debugLogger: cli.debugLogger, file, force: cli.argv.force, @@ -428,7 +428,7 @@ SdkSubcommands.install = { } const destDir = join(modulesDest, platform, moduleName, ver); - if (!cli.argv.force && fs.existsSync(destDir)) { + if (!forceModules && fs.existsSync(destDir)) { trace(`Module ${cyan(`${moduleName}@${ver}`)} already installed`); continue; } @@ -628,13 +628,14 @@ async function extractSDK({ debugLogger, file, force, logger, noPrompt, osName, let bar; let name; let renameTo; + let forceModules = force; const onEntry = async (filename, _idx, total) => { if (total > 1) { const m = !name && filename.match(sdkDestRegExp); if (m) { name = m[1]; - renameTo = await checkSDKFile({ + const result = await checkSDKFile({ force, logger, filename, @@ -645,6 +646,9 @@ async function extractSDK({ debugLogger, file, force, logger, noPrompt, osName, subject }); + forceModules = result.forceModules ?? force; + renameTo = result.renameTo; + logger.log('Extracting SDK...'); if (showProgress && !bar) { bar = new ProgressBar(' :paddedPercent [:bar]', { @@ -670,7 +674,7 @@ async function extractSDK({ debugLogger, file, force, logger, noPrompt, osName, }); if (!artifact) { - return { name, renameTo, tempDir }; + return { forceModules, name, renameTo, tempDir }; } debugLogger.trace(`Detected artifact: ${artifact}`); @@ -685,7 +689,7 @@ async function extractSDK({ debugLogger, file, force, logger, noPrompt, osName, }); await fs.remove(tempDir); - return { name, renameTo, tempDir: tempDir2 }; + return { forceModules, name, renameTo, tempDir: tempDir2 }; } async function checkSDKFile({ force, logger, filename, name, noPrompt, osName, sdkDir, subject }) { @@ -725,7 +729,7 @@ async function checkSDKFile({ force, logger, filename, name, noPrompt, osName, s } } - const { action } = await prompt({ + const action = await prompt({ type: 'select', name: 'action', message: `Titanium SDK ${name} is already installed`, @@ -744,9 +748,13 @@ async function checkSDKFile({ force, logger, filename, name, noPrompt, osName, s logger.log(); + const result = { action }; if (action === 'rename') { - return renameTo; + result.renameTo = renameTo; + } else if (action === 'overwrite') { + result.forceModules = true; } + return result; } /** @@ -794,7 +802,7 @@ SdkSubcommands.uninstall = { } if (!versions.length) { - ({ versions } = await prompt({ + versions = await prompt({ type: 'multiselect', name: 'versions', message: 'Which SDKs to uninstall?', @@ -804,7 +812,7 @@ SdkSubcommands.uninstall = { title: v, value: v })) - })); + }); if (!versions) { return; } diff --git a/src/util/setup-screens.js b/src/util/setup-screens.js index 76ae4d96..affcf9e2 100644 --- a/src/util/setup-screens.js +++ b/src/util/setup-screens.js @@ -521,7 +521,7 @@ export class SetupScreens { async userScreen() { this.logger.log(screenTitle('User')); - const { name } = await prompt({ + const name = await prompt({ type: 'text', message: 'What do you want as your "author" name?', initial: this.config.get('user.name', ''), From 3678227d026b9f89109c68b085446fdaf8c91440 Mon Sep 17 00:00:00 2001 From: Chris Barber Date: Sat, 25 May 2024 10:37:57 -0500 Subject: [PATCH 5/5] Add result check --- src/commands/sdk.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/commands/sdk.js b/src/commands/sdk.js index faf1427c..387a7203 100644 --- a/src/commands/sdk.js +++ b/src/commands/sdk.js @@ -646,8 +646,8 @@ async function extractSDK({ debugLogger, file, force, logger, noPrompt, osName, subject }); - forceModules = result.forceModules ?? force; - renameTo = result.renameTo; + forceModules = result?.forceModules ?? force; + renameTo = result?.renameTo; logger.log('Extracting SDK...'); if (showProgress && !bar) {