From c5035362ab300a9e43fcc7447d43e74be85c574a Mon Sep 17 00:00:00 2001 From: Andrey Savitsky Date: Wed, 2 Jun 2021 23:29:46 +0300 Subject: [PATCH] Fix broken line buffers (#773) * Fix broken line buffers * Code style --- packages/exec/src/toolrunner.ts | 34 +++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/packages/exec/src/toolrunner.ts b/packages/exec/src/toolrunner.ts index 940d9a1a..87d0bbe1 100644 --- a/packages/exec/src/toolrunner.ts +++ b/packages/exec/src/toolrunner.ts @@ -84,7 +84,7 @@ export class ToolRunner extends events.EventEmitter { data: Buffer, strBuffer: string, onLine: (line: string) => void - ): void { + ): string { try { let s = strBuffer + data.toString() let n = s.indexOf(os.EOL) @@ -98,10 +98,12 @@ export class ToolRunner extends events.EventEmitter { n = s.indexOf(os.EOL) } - strBuffer = s + return s } catch (err) { // streaming lines to console is best effort. Don't fail a build. this._debug(`error processing line. Failed with error ${err}`) + + return '' } } @@ -444,7 +446,7 @@ export class ToolRunner extends events.EventEmitter { this._getSpawnOptions(this.options, fileName) ) - const stdbuffer = '' + let stdbuffer = '' if (cp.stdout) { cp.stdout.on('data', (data: Buffer) => { if (this.options.listeners && this.options.listeners.stdout) { @@ -455,15 +457,19 @@ export class ToolRunner extends events.EventEmitter { optionsNonNull.outStream.write(data) } - this._processLineBuffer(data, stdbuffer, (line: string) => { - if (this.options.listeners && this.options.listeners.stdline) { - this.options.listeners.stdline(line) + stdbuffer = this._processLineBuffer( + data, + stdbuffer, + (line: string) => { + if (this.options.listeners && this.options.listeners.stdline) { + this.options.listeners.stdline(line) + } } - }) + ) }) } - const errbuffer = '' + let errbuffer = '' if (cp.stderr) { cp.stderr.on('data', (data: Buffer) => { state.processStderr = true @@ -482,11 +488,15 @@ export class ToolRunner extends events.EventEmitter { s.write(data) } - this._processLineBuffer(data, errbuffer, (line: string) => { - if (this.options.listeners && this.options.listeners.errline) { - this.options.listeners.errline(line) + errbuffer = this._processLineBuffer( + data, + errbuffer, + (line: string) => { + if (this.options.listeners && this.options.listeners.errline) { + this.options.listeners.errline(line) + } } - }) + ) }) }