From d6513e9aa9fea053ad3d70bb35df432b30f44493 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Mon, 24 Jun 2013 16:44:40 -0700 Subject: [PATCH] Use BufferedProcess for apm commands This ensures the path to node is always available in the environment. --- src/app/package-manager.coffee | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/app/package-manager.coffee b/src/app/package-manager.coffee index eb5330f33..f1f80c500 100644 --- a/src/app/package-manager.coffee +++ b/src/app/package-manager.coffee @@ -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}