diff --git a/lib/entry-points.js b/lib/entry-points.js index b2bb9c1835..d9d14db90c 100644 --- a/lib/entry-points.js +++ b/lib/entry-points.js @@ -183682,13 +183682,13 @@ async function getTarVersion() { if (!match2?.[1]) { throw new Error("Failed to parse output of tar --version."); } - return { type: "gnu", version: match2[1] }; + return { type: "gnu", version: match2[1], path: tar }; } else if (stdout.includes("bsdtar")) { const match2 = stdout.match(/bsdtar ([0-9.]+)/); if (!match2?.[1]) { throw new Error("Failed to parse output of tar --version."); } - return { type: "bsd", version: match2[1] }; + return { type: "bsd", version: match2[1], path: tar }; } else { throw new Error("Unknown tar version"); } @@ -183755,10 +183755,10 @@ async function extractTarZst(tar, dest, tarVersion, logger2) { args.push("--overwrite"); } args.push("-f", tar instanceof stream.Readable ? "-" : tar, "-C", dest); - process.stdout.write(`[command]tar ${args.join(" ")} + process.stdout.write(`[command]${tarVersion.path} ${args.join(" ")} `); await new Promise((resolve15, reject) => { - const tarProcess = (0, import_child_process.spawn)("tar", args, { stdio: "pipe" }); + const tarProcess = (0, import_child_process.spawn)(tarVersion.path, args, { stdio: "pipe" }); let stdout = ""; tarProcess.stdout?.on("data", (data) => { stdout += data.toString(); @@ -183785,11 +183785,11 @@ async function extractTarZst(tar, dest, tarVersion, logger2) { if (code !== 0) { reject( new CommandInvocationError( - "tar", + tarVersion.path, args, code ?? void 0, - stdout, - stderr + stderr, + stdout ) ); } diff --git a/src/tar.test.ts b/src/tar.test.ts index 99d68b5317..e193b2df44 100644 --- a/src/tar.test.ts +++ b/src/tar.test.ts @@ -15,7 +15,7 @@ test("extractTarZst rejects if the input stream errors", async (t) => { const promise = extractTarZst( archive, path.join(tmpDir, "dest"), - { type: "gnu", version: "1.34" }, + { type: "gnu", version: "1.34", path: "tar" }, new RecordingLogger(), ); diff --git a/src/tar.ts b/src/tar.ts index 3a0d79cc64..3497da5e5e 100644 --- a/src/tar.ts +++ b/src/tar.ts @@ -17,6 +17,8 @@ const MIN_REQUIRED_GNU_TAR_VERSION = "1.31"; export type TarVersion = { type: "gnu" | "bsd"; version: string; + /** Path to the `tar` executable that reported this version. */ + path: string; }; async function getTarVersion(): Promise { @@ -39,14 +41,14 @@ async function getTarVersion(): Promise { throw new Error("Failed to parse output of tar --version."); } - return { type: "gnu", version: match[1] }; + return { type: "gnu", version: match[1], path: tar }; } else if (stdout.includes("bsdtar")) { const match = stdout.match(/bsdtar ([0-9.]+)/); if (!match?.[1]) { throw new Error("Failed to parse output of tar --version."); } - return { type: "bsd", version: match[1] }; + return { type: "bsd", version: match[1], path: tar }; } else { throw new Error("Unknown tar version"); } @@ -171,10 +173,10 @@ export async function extractTarZst( args.push("-f", tar instanceof stream.Readable ? "-" : tar, "-C", dest); - process.stdout.write(`[command]tar ${args.join(" ")}\n`); + process.stdout.write(`[command]${tarVersion.path} ${args.join(" ")}\n`); await new Promise((resolve, reject) => { - const tarProcess = spawn("tar", args, { stdio: "pipe" }); + const tarProcess = spawn(tarVersion.path, args, { stdio: "pipe" }); let stdout = ""; tarProcess.stdout?.on("data", (data: Buffer) => { @@ -210,11 +212,11 @@ export async function extractTarZst( if (code !== 0) { reject( new CommandInvocationError( - "tar", + tarVersion.path, args, code ?? undefined, - stdout, stderr, + stdout, ), ); } diff --git a/src/tools-download.test.ts b/src/tools-download.test.ts index 1ba980bbe3..928255d3c2 100644 --- a/src/tools-download.test.ts +++ b/src/tools-download.test.ts @@ -70,7 +70,7 @@ test.serial( destination, undefined, {}, - { type: "gnu", version: "1.34" }, + { type: "gnu", version: "1.34", path: "tar" }, new RecordingLogger(), ); @@ -103,7 +103,7 @@ test.serial( destination, undefined, {}, - { type: "gnu", version: "1.34" }, + { type: "gnu", version: "1.34", path: "tar" }, new RecordingLogger(), ), { @@ -147,7 +147,7 @@ test.serial( destination, undefined, {}, - { type: "gnu", version: "1.34" }, + { type: "gnu", version: "1.34", path: "tar" }, new RecordingLogger(), ); @@ -187,7 +187,7 @@ test.serial( destination, undefined, {}, - { type: "gnu", version: "1.34" }, + { type: "gnu", version: "1.34", path: "tar" }, new RecordingLogger(), ); @@ -235,7 +235,7 @@ test.serial( path.join(tmpDir, "codeql"), undefined, {}, - { type: "gnu", version: "1.34" }, + { type: "gnu", version: "1.34", path: "tar" }, new RecordingLogger(), );