Add bufferLines option to ChildProcess.exec

It ensures that stdout and stderr callbacks are triggered with whole lines
This commit is contained in:
Nathan Sobo
2012-07-11 16:30:50 -06:00
parent 2afec5cf53
commit 8f5746c8fe
2 changed files with 79 additions and 20 deletions

View File

@@ -8,6 +8,11 @@ module.exports =
class ChildProccess
@exec: (command, options={}) ->
deferred = $.Deferred()
if options.bufferLines
options.stdout = @bufferLines(options.stdout) if options.stdout
options.stderr = @bufferLines(options.stderr) if options.stderr
$native.exec command, options, (exitStatus, stdout, stdin) ->
if error != 0
error = new Error("Exec failed (#{exitStatus}) command '#{command}'")
@@ -18,3 +23,11 @@ class ChildProccess
deferred
@bufferLines: (callback) ->
buffered = ""
(data) ->
buffered += data
lastNewlineIndex = buffered.lastIndexOf('\n')
if lastNewlineIndex >= 0
callback(buffered.substring(0, lastNewlineIndex + 1))
buffered = buffered.substring(lastNewlineIndex + 1)