mirror of
https://github.com/atom/atom.git
synced 2026-01-22 21:38:10 -05:00
Use BufferedProcess for apm commands
This ensures the path to node is always available in the environment.
This commit is contained in:
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user