From 8018dc9d57f732b6d27aab104e2816e7b89eee0f Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Mon, 15 Aug 2016 17:05:18 -0700 Subject: [PATCH] Allow ATOM_HOME to be reassigned if the new value is valid --- spec/update-process-env-spec.js | 38 +++++++++++++++++++++++++++++++++ src/update-process-env.js | 5 +++++ 2 files changed, 43 insertions(+) diff --git a/spec/update-process-env-spec.js b/spec/update-process-env-spec.js index 39376b4c2..1de89beba 100644 --- a/spec/update-process-env-spec.js +++ b/spec/update-process-env-spec.js @@ -1,6 +1,8 @@ /** @babel */ /* eslint-env jasmine */ +import path from 'path' +import temp from 'temp' import child_process from 'child_process' import {updateProcessEnv, shouldGetEnvFromShell} from '../src/update-process-env' import dedent from 'dedent' @@ -44,6 +46,42 @@ describe('updateProcessEnv(launchEnv)', function () { // with another object. expect(process.env).toBe(initialProcessEnv) }) + + it('allows ATOM_HOME to be overwritten only if the new value is a valid path', function () { + newAtomHomePath = temp.mkdirSync('atom-home') + + process.env = { + WILL_BE_DELETED: 'hi', + NODE_ENV: 'the-node-env', + NODE_PATH: '/the/node/path', + ATOM_HOME: '/the/atom/home' + } + + updateProcessEnv({PWD: '/the/dir'}) + expect(process.env).toEqual({ + PWD: '/the/dir', + NODE_ENV: 'the-node-env', + NODE_PATH: '/the/node/path', + ATOM_HOME: '/the/atom/home' + }) + + updateProcessEnv({PWD: '/the/dir', ATOM_HOME: path.join(newAtomHomePath, 'non-existent')}) + expect(process.env).toEqual({ + PWD: '/the/dir', + NODE_ENV: 'the-node-env', + NODE_PATH: '/the/node/path', + ATOM_HOME: '/the/atom/home' + }) + + + updateProcessEnv({PWD: '/the/dir', ATOM_HOME: newAtomHomePath}) + expect(process.env).toEqual({ + PWD: '/the/dir', + NODE_ENV: 'the-node-env', + NODE_PATH: '/the/node/path', + ATOM_HOME: newAtomHomePath + }) + }) }) describe('when the launch environment does not come from a shell', function () { diff --git a/src/update-process-env.js b/src/update-process-env.js index 2bbbbfe7e..c65e8c4fd 100644 --- a/src/update-process-env.js +++ b/src/update-process-env.js @@ -1,5 +1,6 @@ /** @babel */ +import fs from 'fs' import {spawnSync} from 'child_process' const ENVIRONMENT_VARIABLES_TO_PRESERVE = new Set([ @@ -37,6 +38,10 @@ function updateProcessEnv (launchEnv) { process.env[key] = envToAssign[key] } } + + if (envToAssign.ATOM_HOME && fs.existsSync(envToAssign.ATOM_HOME)) { + process.env.ATOM_HOME = envToAssign.ATOM_HOME + } } }