diff --git a/automation/build-bin.ts b/automation/build-bin.ts index fdf05c34..5b31474a 100644 --- a/automation/build-bin.ts +++ b/automation/build-bin.ts @@ -17,7 +17,7 @@ import type { JsonVersions } from '../lib/commands/version'; -import { run as oclifRun } from '@oclif/dev-cli'; +import { run as oclifRun } from 'oclif'; import * as archiver from 'archiver'; import * as Bluebird from 'bluebird'; import { execFile } from 'child_process'; @@ -64,7 +64,7 @@ const standaloneZips: PathByPlatform = { const oclifInstallers: PathByPlatform = { darwin: dPath('macos', `balena-${version}.pkg`), - win32: dPath('win', `balena-${version}-${arch}.exe`), + win32: dPath('win32', `balena-${version}-${arch}.exe`), }; const renamedOclifInstallers: PathByPlatform = { @@ -456,7 +456,7 @@ async function notarizeMacInstaller(): Promise { } /** - * Run the `oclif-dev pack:win` or `pack:macos` command (depending on the value + * Run the `oclif pack:win` or `pack:macos` command (depending on the value * of process.platform) to generate the native installers (which end up under * the 'dist' folder). There are some harcoded options such as selecting only * 64-bit binaries under Windows. @@ -486,7 +486,7 @@ export async function buildOclifInstaller() { await signFilesForNotarization(); } console.log('======================================================='); - console.log(`oclif-dev "${packCmd}" "${packOpts.join('" "')}"`); + console.log(`oclif "${packCmd}" "${packOpts.join('" "')}"`); console.log(`cwd="${process.cwd()}" ROOT="${ROOT}"`); console.log('======================================================='); await oclifRun([packCmd].concat(...packOpts)); diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 92509b2b..2905cdf9 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1445,161 +1445,6 @@ "tslib": "^2.0.0" } }, - "@oclif/dev-cli": { - "version": "1.26.0", - "resolved": "https://registry.npmjs.org/@oclif/dev-cli/-/dev-cli-1.26.0.tgz", - "integrity": "sha512-272udZP+bG4qahoAcpWcMTJKiA+V42kRMqQM7n4tgW35brYb2UP5kK+p08PpF8sgSfRTV8MoJVJG9ax5kY82PA==", - "dev": true, - "requires": { - "@oclif/command": "^1.8.0", - "@oclif/config": "^1.17.0", - "@oclif/errors": "^1.3.3", - "@oclif/plugin-help": "^3.2.0", - "cli-ux": "^5.2.1", - "debug": "^4.1.1", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^8.1", - "github-slugger": "^1.2.1", - "lodash": "^4.17.11", - "normalize-package-data": "^3.0.0", - "qqjs": "^0.3.10", - "tslib": "^2.0.3" - }, - "dependencies": { - "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", - "requires": { - "type-fest": "^0.11.0" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "extract-stack": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/extract-stack/-/extract-stack-2.0.0.tgz", - "integrity": "sha512-AEo4zm+TenK7zQorGK1f9mJ8L14hnTDi2ZQPR+Mub1NX8zimka1mXpV5LpH8x9HoUmFSHZCfLHqWvp0Y4FxxzQ==" - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "hosted-git-info": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.1.tgz", - "integrity": "sha512-eT7NrxAsppPRQEBSwKSosReE+v8OzABwEScQYk5d4uxaEPlzxTIku7LINXtBGalthkLhJnq5lBI89PfK43zAKg==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "normalize-package-data": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz", - "integrity": "sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "resolve": "^1.20.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz", - "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==", - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", - "dev": true - }, - "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - } - } - }, "@oclif/errors": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/@oclif/errors/-/errors-1.3.3.tgz", diff --git a/package.json b/package.json index 543e9c6c..7329917d 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "build": "npm run build:src && npm run catch-uncommitted", "build:t": "npm run lint && npm run build:fast && npm run build:test", "build:src": "npm run lint && npm run build:fast && npm run build:test && npm run build:doc && npm run build:completion", - "build:fast": "gulp pages && tsc && npx oclif-dev manifest", + "build:fast": "gulp pages && tsc && npx oclif manifest", "build:test": "tsc -P ./tsconfig.dev.json --noEmit && tsc -P ./tsconfig.js.json --noEmit", "build:doc": "ts-node --transpile-only automation/capitanodoc/index.ts > docs/balena-cli.md", "build:completion": "node completion/generate-completion.js", @@ -117,7 +117,6 @@ "devDependencies": { "@balena/lint": "^6.2.0", "@oclif/config": "^1.17.0", - "@oclif/dev-cli": "^1.26.0", "@oclif/parser": "^3.8.5", "@octokit/plugin-throttling": "^3.5.1", "@octokit/rest": "^18.6.7", diff --git a/patches/all/@oclif+dev-cli+1.26.0.patch b/patches/all/oclif+1.18.1.patch similarity index 64% rename from patches/all/@oclif+dev-cli+1.26.0.patch rename to patches/all/oclif+1.18.1.patch index 97c99142..66e11506 100644 --- a/patches/all/@oclif+dev-cli+1.26.0.patch +++ b/patches/all/oclif+1.18.1.patch @@ -1,20 +1,20 @@ -diff --git a/node_modules/@oclif/dev-cli/lib/commands/pack/macos.js b/node_modules/@oclif/dev-cli/lib/commands/pack/macos.js -index e0abbbe..debf799 100644 ---- a/node_modules/@oclif/dev-cli/lib/commands/pack/macos.js -+++ b/node_modules/@oclif/dev-cli/lib/commands/pack/macos.js -@@ -128,6 +128,7 @@ class PackMacos extends command_1.Command { +diff --git a/node_modules/oclif/lib/commands/pack/macos.js b/node_modules/oclif/lib/commands/pack/macos.js +index 2a7bcdd..c3df321 100644 +--- a/node_modules/oclif/lib/commands/pack/macos.js ++++ b/node_modules/oclif/lib/commands/pack/macos.js +@@ -133,6 +133,7 @@ class PackMacos extends command_1.Command { if (process.env.OSX_KEYCHAIN) args.push('--keychain', process.env.OSX_KEYCHAIN); args.push(dist); -+ console.error(`[debug] @oclif/dev-cli pkgbuild "${args.join('" "')}"`); ++ console.error(`[debug] oclif pkgbuild "${args.join('" "')}"`); await qq.x('pkgbuild', args); } } -diff --git a/node_modules/@oclif/dev-cli/lib/commands/pack/win.js b/node_modules/@oclif/dev-cli/lib/commands/pack/win.js -index a313991..6681892 100644 ---- a/node_modules/@oclif/dev-cli/lib/commands/pack/win.js -+++ b/node_modules/@oclif/dev-cli/lib/commands/pack/win.js -@@ -51,6 +51,13 @@ VIAddVersionKey /LANG=\${LANG_ENGLISH} "ProductVersion" "\${VERSION}.0" +diff --git a/node_modules/oclif/lib/commands/pack/win.js b/node_modules/oclif/lib/commands/pack/win.js +index 7547ad2..df9e4b5 100644 +--- a/node_modules/oclif/lib/commands/pack/win.js ++++ b/node_modules/oclif/lib/commands/pack/win.js +@@ -52,6 +52,13 @@ VIAddVersionKey /LANG=\${LANG_ENGLISH} "ProductVersion" "\${VERSION}.0" InstallDir "\$PROGRAMFILES${arch === 'x64' ? '64' : ''}\\${config.dirname}" Section "${config.name} CLI \${VERSION}" @@ -28,7 +28,16 @@ index a313991..6681892 100644 SetOutPath $INSTDIR File /r bin File /r client -@@ -192,7 +199,8 @@ class PackWin extends command_1.Command { +@@ -61,6 +68,8 @@ Section "${config.name} CLI \${VERSION}" + WriteUninstaller "$INSTDIR\\Uninstall.exe" + WriteRegStr HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${config.dirname}" \\ + "DisplayName" "${config.name}" ++ WriteRegStr HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${config.dirname}" \\ ++ "DisplayVersion" "\${VERSION}" + WriteRegStr HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${config.dirname}" \\ + "UninstallString" "$\\"$INSTDIR\\uninstall.exe$\\"" + WriteRegStr HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\${config.dirname}" \\ +@@ -193,7 +202,8 @@ class PackWin extends command_1.Command { async run() { await this.checkForNSIS(); const { flags } = this.parse(PackWin); @@ -38,26 +47,26 @@ index a313991..6681892 100644 const { config } = buildConfig; await Tarballs.build(buildConfig, { platform: 'win32', pack: false }); const arches = buildConfig.targets.filter(t => t.platform === 'win32').map(t => t.arch); -@@ -207,7 +215,8 @@ class PackWin extends command_1.Command { +@@ -208,7 +218,8 @@ class PackWin extends command_1.Command { // eslint-disable-next-line no-await-in-loop await qq.mv(buildConfig.workspace({ platform: 'win32', arch }), [installerBase, 'client']); // eslint-disable-next-line no-await-in-loop - await qq.x(`makensis ${installerBase}/${config.bin}.nsi | grep -v "\\[compress\\]" | grep -v "^File: Descending to"`); + const { msysExec, toMsysPath } = require("../../util"); + await msysExec(`makensis ${toMsysPath(installerBase)}/${config.bin}.nsi | grep -v "\\[compress\\]" | grep -v "^File: Descending to"`); - const o = buildConfig.dist(`win/${config.bin}-v${buildConfig.version}-${arch}.exe`); + const templateKey = upload_util_1.templateShortKey('win32', { bin: config.bin, version: buildConfig.version, sha: buildConfig.gitSha, arch }); + const o = buildConfig.dist(`win32/${templateKey}`); // eslint-disable-next-line no-await-in-loop - await qq.mv([installerBase, 'installer.exe'], o); -@@ -232,4 +241,5 @@ exports.default = PackWin; +@@ -255,4 +266,5 @@ PackWin.hidden = true; PackWin.description = 'create windows installer from oclif CLI'; PackWin.flags = { root: command_1.flags.string({ char: 'r', description: 'path to oclif CLI root', default: '.', required: true }), + targets: command_1.flags.string({char: 't', description: 'comma-separated targets to pack (e.g.: win32-x86,win32-x64)'}), }; -diff --git a/node_modules/@oclif/dev-cli/lib/tarballs/build.js b/node_modules/@oclif/dev-cli/lib/tarballs/build.js -index c6bd245..baa7f6f 100644 ---- a/node_modules/@oclif/dev-cli/lib/tarballs/build.js -+++ b/node_modules/@oclif/dev-cli/lib/tarballs/build.js +diff --git a/node_modules/oclif/lib/tarballs/build.js b/node_modules/oclif/lib/tarballs/build.js +index 39aae96..6e88b74 100644 +--- a/node_modules/oclif/lib/tarballs/build.js ++++ b/node_modules/oclif/lib/tarballs/build.js @@ -18,8 +18,9 @@ const pack = async (from, to) => { qq.cd(prevCwd); }; @@ -65,7 +74,7 @@ index c6bd245..baa7f6f 100644 - const { xz, config } = c; + const { xz, config, tmp } = c; const prevCwd = qq.cwd(); -+ console.error(`[debug] @oclif/dev-cli cwd="${prevCwd}"\n c.root="${c.root}" c.workspace()="${c.workspace()}"`); ++ console.error(`[debug] oclif cwd="${prevCwd}"\n c.root="${c.root}" c.workspace()="${c.workspace()}"`); const packCLI = async () => { const stdout = await qq.x.stdout('npm', ['pack', '--unsafe-perm'], { cwd: c.root }); return path.join(c.root, stdout.split('\n').pop()); @@ -110,7 +119,7 @@ index c6bd245..baa7f6f 100644 - await qq.x('npm install --production'); + const ws = c.workspace(); + qq.cd(ws); -+ console.error(`[debug] @oclif/dev-cli copying node_modules to "${ws}"`) ++ console.error(`[debug] oclif copying node_modules to "${ws}"`) + const source = path.join(c.root, 'node_modules'); + if (process.platform === 'win32') { + // xcopy is much faster than `qq.cp(source, ws)` @@ -120,13 +129,13 @@ index c6bd245..baa7f6f 100644 + // file attributes containing `codesign` digital signatures + await qq.x(`cp -pR "${source}" "${ws}"`); } -+ console.error(`[debug] @oclif/dev-cli running "npm prune --production" in "${ws}"`); ++ console.error(`[debug] oclif running "npm prune --production" in "${ws}"`); + await qq.x('npm prune --production'); -+ console.error(`[debug] @oclif/dev-cli done`); ++ console.error(`[debug] oclif done`); }; - const buildTarget = async (target) => { - const workspace = c.workspace(target); -@@ -74,7 +83,8 @@ async function build(c, options = {}) { + const pretarball = async () => { + qq.cd(c.workspace()); +@@ -99,7 +108,8 @@ async function build(c, options = {}) { output: path.join(workspace, 'bin', 'node'), platform: target.platform, arch: target.arch, @@ -136,11 +145,11 @@ index c6bd245..baa7f6f 100644 }); if (options.pack === false) return; -diff --git a/node_modules/@oclif/dev-cli/lib/tarballs/config.js b/node_modules/@oclif/dev-cli/lib/tarballs/config.js -index 9754a6b..68ef6b7 100644 ---- a/node_modules/@oclif/dev-cli/lib/tarballs/config.js -+++ b/node_modules/@oclif/dev-cli/lib/tarballs/config.js -@@ -17,7 +17,10 @@ function gitSha(cwd, options = {}) { +diff --git a/node_modules/oclif/lib/tarballs/config.js b/node_modules/oclif/lib/tarballs/config.js +index 0dc3cd7..1336219 100644 +--- a/node_modules/oclif/lib/tarballs/config.js ++++ b/node_modules/oclif/lib/tarballs/config.js +@@ -18,7 +18,10 @@ function gitSha(cwd, options = {}) { } exports.gitSha = gitSha; async function Tmp(config) { @@ -148,23 +157,23 @@ index 9754a6b..68ef6b7 100644 + const tmp = process.env.BUILD_TMP + ? path.join(process.env.BUILD_TMP, 'oclif') + : path.join(config.root, 'tmp'); -+ console.error(`[debug] @oclif/dev-cli tmp="${tmp}"`); ++ console.error(`[debug] oclif tmp="${tmp}"`); await qq.mkdirp(tmp); return tmp; } -@@ -44,7 +47,7 @@ async function buildConfig(root, options = {}) { +@@ -43,7 +46,7 @@ async function buildConfig(root, options = {}) { s3Config: updateConfig.s3, nodeVersion: updateConfig.node.version || process.versions.node, workspace(target) { - const base = qq.join(config.root, 'tmp'); + const base = tmp; if (target && target.platform) - return qq.join(base, [target.platform, target.arch].join('-'), config.s3Key('baseDir', target)); - return qq.join(base, config.s3Key('baseDir', target)); -diff --git a/node_modules/@oclif/dev-cli/lib/tarballs/node.js b/node_modules/@oclif/dev-cli/lib/tarballs/node.js + return qq.join(base, [target.platform, target.arch].join('-'), upload_util_1.templateShortKey('baseDir', { bin: config.bin })); + return qq.join(base, upload_util_1.templateShortKey('baseDir', { bin: config.bin })); +diff --git a/node_modules/oclif/lib/tarballs/node.js b/node_modules/oclif/lib/tarballs/node.js index fabe5c4..e32dd76 100644 ---- a/node_modules/@oclif/dev-cli/lib/tarballs/node.js -+++ b/node_modules/@oclif/dev-cli/lib/tarballs/node.js +--- a/node_modules/oclif/lib/tarballs/node.js ++++ b/node_modules/oclif/lib/tarballs/node.js @@ -4,9 +4,10 @@ const errors_1 = require("@oclif/errors"); const path = require("path"); const qq = require("qqjs"); @@ -196,14 +205,33 @@ index fabe5c4..e32dd76 100644 await qq.mv([nodeBase, 'node.exe'], cache); qq.popd(); } -diff --git a/node_modules/@oclif/dev-cli/lib/util.js b/node_modules/@oclif/dev-cli/lib/util.js -index b3d48b7..540bbe6 100644 ---- a/node_modules/@oclif/dev-cli/lib/util.js -+++ b/node_modules/@oclif/dev-cli/lib/util.js -@@ -40,3 +40,47 @@ function sortBy(arr, fn) { - } - exports.sortBy = sortBy; - exports.template = (context) => (t) => _.template(t || '')(context); +diff --git a/node_modules/oclif/lib/upload-util.js b/node_modules/oclif/lib/upload-util.js +index 45392cb..3c806c7 100644 +--- a/node_modules/oclif/lib/upload-util.js ++++ b/node_modules/oclif/lib/upload-util.js +@@ -28,10 +28,10 @@ function templateShortKey(type, ext, options = { root: '.' }) { + const templates = { + baseDir: '<%- bin %>', + unversioned: '<%- bin %>-<%- platform %>-<%- arch %><%- ext %>', +- versioned: '<%- bin %>-v<%- version %>-<%- sha %>-<%- platform %>-<%- arch %><%- ext %>', +- manifest: '<%- bin %>-v<%- version %>-<%- sha %>-<%- platform %>-<%- arch %>-buildmanifest', +- macos: '<%- bin %>-v<%- version %>-<%- sha %>.pkg', +- win32: '<%- bin %>-v<%- version %>-<%- sha %>-<%- arch %>.exe', ++ versioned: '<%- bin %>-v<%- version %>-<%- platform %>-<%- arch %><%- ext %>', ++ manifest: '<%- bin %>-v<%- version %>-<%- platform %>-<%- arch %>-buildmanifest', ++ macos: '<%- bin %>-v<%- version %>.pkg', ++ win32: '<%- bin %>-v<%- version %>-<%- arch %>.exe', + deb: '<%- bin %>_<%- versionShaRevision %>_<%- arch %>.deb', + }; + return _.template(templates[type])(Object.assign({}, options)); +diff --git a/node_modules/oclif/lib/util.js b/node_modules/oclif/lib/util.js +index 910315f..71d7649 100644 +--- a/node_modules/oclif/lib/util.js ++++ b/node_modules/oclif/lib/util.js +@@ -67,3 +67,47 @@ exports.sortVersionsObjectByKeysDesc = (input) => { + }); + return result; + }; + +// OSTYPE is 'msys' for MSYS 1.0 and for MSYS2, or 'cygwin' for Cygwin +// but note that OSTYPE is not "exported" by default, so run: export OSTYPE=$OSTYPE @@ -219,7 +247,7 @@ index b3d48b7..540bbe6 100644 +exports.isCygwin = isCygwin; +exports.isMinGW = isMinGW; +exports.isMSYS2 = isMSYS2; -+console.error(`[debug] @oclif/dev-cli MSYSSHELLPATH=${MSYSSHELLPATH} MSYSTEM=${process.env.MSYSTEM} OSTYPE=${process.env.OSTYPE} isMSYS2=${isMSYS2} isMingGW=${isMinGW} isCygwin=${isCygwin}`); ++console.error(`[debug] oclif MSYSSHELLPATH=${MSYSSHELLPATH} MSYSTEM=${process.env.MSYSTEM} OSTYPE=${process.env.OSTYPE} isMSYS2=${isMSYS2} isMingGW=${isMinGW} isCygwin=${isCygwin}`); + +const qq = require("qqjs"); + @@ -232,7 +260,7 @@ index b3d48b7..540bbe6 100644 + } else if (isCygwin) { + msysPath = msysPath.replace(/^([a-zA-Z]):/, '/cygdrive/$1'); + } -+ console.error(`[debug] @oclif/dev-cli toMsysPath before="${windowsPath}" after="${msysPath}"`); ++ console.error(`[debug] oclif toMsysPath before="${windowsPath}" after="${msysPath}"`); + return msysPath; +} +exports.toMsysPath = toMsysPath; @@ -244,7 +272,7 @@ index b3d48b7..540bbe6 100644 + } + const sh = MSYSSHELLPATH; + const args = ['-c', cmd]; -+ console.error(`[debug] @oclif/dev-cli msysExec sh="${sh}" args=${JSON.stringify(args)} options=${JSON.stringify(options)}`); ++ console.error(`[debug] oclif msysExec sh="${sh}" args=${JSON.stringify(args)} options=${JSON.stringify(options)}`); + return qq.x(sh, args, options); +} +exports.msysExec = msysExec;