Use BufferedProcess for apm commands

This ensures the path to node is always available in the environment.
This commit is contained in:
Kevin Sawicki
2013-06-24 16:44:40 -07:00
parent afac77ddfd
commit d6513e9aa9

View File

@@ -1,4 +1,4 @@
{spawn} = require 'child_process'
BufferedProcess = require 'buffered-process'
roaster = require 'roaster'
async = require 'async'
@@ -22,14 +22,14 @@ renderMarkdownInMetadata = (packages, callback) ->
queue.drain = callback
getAvailable = (callback) ->
apm = require.resolve '.bin/apm'
apmProcess = spawn(apm, ['available', '--json'])
chunks = []
apmProcess.stdout.on 'data', (chunk) -> chunks.push(chunk)
apmProcess.on 'close', (code) ->
command = require.resolve '.bin/apm'
args = ['available', '--json']
output = []
stdout = (lines) -> output.push(lines)
exit = (code) ->
if code is 0
try
packages = JSON.parse(Buffer.concat(chunks).toString()) ? []
packages = JSON.parse(output.join()) ? []
catch error
callback(error)
return
@@ -41,15 +41,17 @@ getAvailable = (callback) ->
else
callback(new Error("apm failed with code: #{code}"))
new BufferedProcess({command, args, stdout, exit})
install = ({name, version}, callback) ->
activateOnSuccess = !atom.isPackageDisabled(name)
activateOnFailure = atom.isPackageActive(name)
atom.deactivatePackage(name) if atom.isPackageActive(name)
atom.unloadPackage(name) if atom.isPackageLoaded(name)
apm = require.resolve '.bin/apm'
apmProcess = spawn(apm, ['install', "#{name}@#{version}"])
apmProcess.on 'close', (code) =>
command = require.resolve '.bin/apm'
args = ['install', "#{name}@#{version}"]
exit = (code) ->
if code is 0
atom.activatePackage(name) if activateOnSuccess
callback()
@@ -57,16 +59,20 @@ install = ({name, version}, callback) ->
actom.activatePackage(name) if activateOnFailure
callback(new Error("Installing '#{name}' failed."))
new BufferedProcess({command, args, exit})
uninstall = ({name}, callback) ->
atom.deactivatePackage(name) if atom.isPackageActive(name)
apm = require.resolve '.bin/apm'
apmProcess = spawn(apm, ['uninstall', name])
apmProcess.on 'close', (code) =>
command = require.resolve '.bin/apm'
args = ['uninstall', name]
exit = (code) ->
if code is 0
atom.unloadPackage(name) if atom.isPackageLoaded(name)
callback()
else
callback(new Error("Uninstalling '#{name}' failed."))
new BufferedProcess({command, args, exit})
module.exports = {renderMarkdownInMetadata, install, uninstall, getAvailable}