mirror of
https://github.com/atom/atom.git
synced 2026-01-26 23:38:48 -05:00
82 lines
1.8 KiB
JavaScript
82 lines
1.8 KiB
JavaScript
/** @babel */
|
|
|
|
import fs from 'fs'
|
|
import {spawnSync} from 'child_process'
|
|
|
|
const ENVIRONMENT_VARIABLES_TO_PRESERVE = new Set([
|
|
'NODE_ENV',
|
|
'NODE_PATH',
|
|
'ATOM_HOME',
|
|
'ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT'
|
|
])
|
|
|
|
const PLATFORMS_KNOWN_TO_WORK = new Set([
|
|
'darwin',
|
|
'linux'
|
|
])
|
|
|
|
function updateProcessEnv (launchEnv) {
|
|
let envToAssign
|
|
if (launchEnv && shouldGetEnvFromShell(launchEnv)) {
|
|
envToAssign = getEnvFromShell(launchEnv)
|
|
} else if (launchEnv && launchEnv.PWD) {
|
|
envToAssign = launchEnv
|
|
}
|
|
|
|
if (envToAssign) {
|
|
for (let key in process.env) {
|
|
if (!ENVIRONMENT_VARIABLES_TO_PRESERVE.has(key)) {
|
|
delete process.env[key]
|
|
}
|
|
}
|
|
|
|
for (let key in envToAssign) {
|
|
if (!ENVIRONMENT_VARIABLES_TO_PRESERVE.has(key) || (!process.env[key] && envToAssign[key])) {
|
|
process.env[key] = envToAssign[key]
|
|
}
|
|
}
|
|
|
|
if (envToAssign.ATOM_HOME && fs.existsSync(envToAssign.ATOM_HOME)) {
|
|
process.env.ATOM_HOME = envToAssign.ATOM_HOME
|
|
}
|
|
}
|
|
}
|
|
|
|
function shouldGetEnvFromShell (env) {
|
|
if (!PLATFORMS_KNOWN_TO_WORK.has(process.platform)) {
|
|
return false
|
|
}
|
|
|
|
if (!env || !env.SHELL || env.SHELL.trim() === '') {
|
|
return false
|
|
}
|
|
|
|
if (env.ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT || process.env.ATOM_DISABLE_SHELLING_OUT_FOR_ENVIRONMENT) {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
function getEnvFromShell (env) {
|
|
if (!shouldGetEnvFromShell(env)) {
|
|
return
|
|
}
|
|
|
|
let {stdout} = spawnSync(env.SHELL, ['-ilc', 'command env'], {encoding: 'utf8'})
|
|
if (stdout) {
|
|
let result = {}
|
|
for (let line of stdout.split('\n')) {
|
|
if (line.includes('=')) {
|
|
let components = line.split('=')
|
|
let key = components.shift()
|
|
let value = components.join('=')
|
|
result[key] = value
|
|
}
|
|
}
|
|
return result
|
|
}
|
|
}
|
|
|
|
export default { updateProcessEnv, shouldGetEnvFromShell }
|