diff --git a/common.js b/common.js index f11ba12..7754661 100644 --- a/common.js +++ b/common.js @@ -11,6 +11,14 @@ export const windows = (os.platform() === 'win32') // Extract to SSD on Windows, see https://github.com/ruby/setup-ruby/pull/14 export const drive = (windows ? (process.env['GITHUB_WORKSPACE'] || 'C')[0] : undefined) +export function partition(string, separator) { + const i = string.indexOf(separator) + if (i === -1) { + throw new Error(`No separator ${separator} in string ${string}`) + } + return [string.slice(0, i), string.slice(i + separator.length, string.length)] +} + export async function measure(name, block) { return await core.group(name, async () => { const start = performance.now() @@ -95,7 +103,7 @@ export function getToolCacheRubyPrefix(platform, version) { export function win2nix(path) { if (/^[A-Z]:/i.test(path)) { // path starts with drive - path = `/${path[0].toLowerCase()}${path.split(':', 2)[1]}` + path = `/${path[0].toLowerCase()}${partition(path, ':')[1]}` } return path.replace(/\\/g, '/').replace(/ /g, '\\ ') } diff --git a/dist/index.js b/dist/index.js index 44a4c39..380de72 100644 --- a/dist/index.js +++ b/dist/index.js @@ -27796,7 +27796,7 @@ function addVCVARSEnv() { let newSet = cp.execSync(cmd).toString().trim().split(/\r?\n/) newSet = newSet.filter(line => line.match(/\S=\S/)) newSet.forEach(s => { - let [k,v] = s.split('=', 2) + let [k,v] = common.partition(s, '=') newEnv.set(k,v) }) @@ -32094,6 +32094,7 @@ exports.default = _default; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windows", function() { return windows; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "drive", function() { return drive; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return partition; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "measure", function() { return measure; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isHeadVersion", function() { return isHeadVersion; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isStableVersion", function() { return isStableVersion; }); @@ -32116,6 +32117,14 @@ const windows = (os.platform() === 'win32') // Extract to SSD on Windows, see https://github.com/ruby/setup-ruby/pull/14 const drive = (windows ? (process.env['GITHUB_WORKSPACE'] || 'C')[0] : undefined) +function partition(string, separator) { + const i = string.indexOf(separator) + if (i === -1) { + throw new Error(`No separator ${separator} in string ${string}`) + } + return [string.slice(0, i), string.slice(i + separator.length, string.length)] +} + async function measure(name, block) { return await core.group(name, async () => { const start = performance.now() @@ -32200,7 +32209,7 @@ function getToolCacheRubyPrefix(platform, version) { function win2nix(path) { if (/^[A-Z]:/i.test(path)) { // path starts with drive - path = `/${path[0].toLowerCase()}${path.split(':', 2)[1]}` + path = `/${path[0].toLowerCase()}${partition(path, ':')[1]}` } return path.replace(/\\/g, '/').replace(/ /g, '\\ ') } @@ -51269,7 +51278,7 @@ function parseRubyEngineAndVersion(rubyVersion) { } else if (rubyVersion === '.tool-versions') { // Read from .tool-versions const toolVersions = fs.readFileSync('.tool-versions', 'utf8').trim() const rubyLine = toolVersions.split(/\r?\n/).filter(e => e.match(/^ruby\s/))[0] - rubyVersion = rubyLine.split(/\s+/, 2)[1] + rubyVersion = rubyLine.match(/^ruby\s+(.+)$/)[1] console.log(`Using ${rubyVersion} as input from file .tool-versions`) } @@ -51281,7 +51290,7 @@ function parseRubyEngineAndVersion(rubyVersion) { engine = rubyVersion version = '' // Let the logic in validateRubyEngineAndVersion() find the version } else { // engine-X.Y.Z - [engine, version] = rubyVersion.split('-', 2) + [engine, version] = common.partition(rubyVersion, '-') } return [engine, version] diff --git a/index.js b/index.js index 0b9bbf9..76297fc 100644 --- a/index.js +++ b/index.js @@ -106,7 +106,7 @@ function parseRubyEngineAndVersion(rubyVersion) { } else if (rubyVersion === '.tool-versions') { // Read from .tool-versions const toolVersions = fs.readFileSync('.tool-versions', 'utf8').trim() const rubyLine = toolVersions.split(/\r?\n/).filter(e => e.match(/^ruby\s/))[0] - rubyVersion = rubyLine.split(/\s+/, 2)[1] + rubyVersion = rubyLine.match(/^ruby\s+(.+)$/)[1] console.log(`Using ${rubyVersion} as input from file .tool-versions`) } @@ -118,7 +118,7 @@ function parseRubyEngineAndVersion(rubyVersion) { engine = rubyVersion version = '' // Let the logic in validateRubyEngineAndVersion() find the version } else { // engine-X.Y.Z - [engine, version] = rubyVersion.split('-', 2) + [engine, version] = common.partition(rubyVersion, '-') } return [engine, version] diff --git a/windows.js b/windows.js index 89cc401..2756062 100644 --- a/windows.js +++ b/windows.js @@ -120,7 +120,7 @@ export function addVCVARSEnv() { let newSet = cp.execSync(cmd).toString().trim().split(/\r?\n/) newSet = newSet.filter(line => line.match(/\S=\S/)) newSet.forEach(s => { - let [k,v] = s.split('=', 2) + let [k,v] = common.partition(s, '=') newEnv.set(k,v) })