diff --git a/dist/index.js b/dist/index.js index 993ad462..0ce0204b 100644 --- a/dist/index.js +++ b/dist/index.js @@ -964,33 +964,34 @@ class GitCommandManager { }); } exec(args_1) { - return __awaiter(this, arguments, void 0, function* (args, opts = {}) { - var _a; + return __awaiter(this, arguments, void 0, function* (args, { encoding = 'utf8', allowAllExitCodes = false } = {}) { const result = new GitOutput(); const env = {}; for (const key of Object.keys(process.env)) { env[key] = process.env[key]; } const stdout = []; + let stdoutLength = 0; const stderr = []; + let stderrLength = 0; const options = { cwd: this.workingDirectory, env, - ignoreReturnCode: (_a = opts.allowAllExitCodes) !== null && _a !== void 0 ? _a : false, + ignoreReturnCode: allowAllExitCodes, listeners: { stdout: (data) => { - var _a; - stdout.push(data.toString((_a = opts.encoding) !== null && _a !== void 0 ? _a : 'utf8')); + stdout.push(data); + stdoutLength += data.length; }, stderr: (data) => { - var _a; - stderr.push(data.toString((_a = opts.encoding) !== null && _a !== void 0 ? _a : 'utf8')); + stderr.push(data); + stderrLength += data.length; } } }; result.exitCode = yield exec.exec(`"${this.gitPath}"`, args, options); - result.stdout = stdout.join(''); - result.stderr = stderr.join(''); + result.stdout = Buffer.concat(stdout, stdoutLength).toString(encoding); + result.stderr = Buffer.concat(stderr, stderrLength).toString(encoding); return result; }); } diff --git a/src/git-command-manager.ts b/src/git-command-manager.ts index 47e3937f..1649c3f0 100644 --- a/src/git-command-manager.ts +++ b/src/git-command-manager.ts @@ -360,7 +360,7 @@ export class GitCommandManager { return stdout } - async exec(args: string[], opts: ExecOpts = {}): Promise { + async exec(args: string[], { encoding = 'utf8', allowAllExitCodes = false }: ExecOpts = {}): Promise { const result = new GitOutput() const env = {} @@ -368,26 +368,30 @@ export class GitCommandManager { env[key] = process.env[key] } - const stdout: string[] = [] - const stderr: string[] = [] + const stdout: Buffer[] = [] + let stdoutLength = 0 + const stderr: Buffer[] = [] + let stderrLength = 0 const options = { cwd: this.workingDirectory, env, - ignoreReturnCode: opts.allowAllExitCodes ?? false, + ignoreReturnCode: allowAllExitCodes, listeners: { stdout: (data: Buffer) => { - stdout.push(data.toString(opts.encoding ?? 'utf8')) + stdout.push(data) + stdoutLength += data.length }, stderr: (data: Buffer) => { - stderr.push(data.toString(opts.encoding ?? 'utf8')) + stderr.push(data) + stderrLength += data.length } } } result.exitCode = await exec.exec(`"${this.gitPath}"`, args, options) - result.stdout = stdout.join('') - result.stderr = stderr.join('') + result.stdout = Buffer.concat(stdout, stdoutLength).toString(encoding) + result.stderr = Buffer.concat(stderr, stderrLength).toString(encoding) return result } }