From 5d5d83d474669a8613cab837927e804ba7e4ebce Mon Sep 17 00:00:00 2001 From: Dave Rael Date: Tue, 20 Oct 2015 07:34:18 -0600 Subject: [PATCH] Remove duplication of locating Atom Home --- src/browser/atom-application.coffee | 31 +++++++++++++++-------------- src/browser/atom-window.coffee | 2 +- src/browser/main.coffee | 8 ++++---- static/index.js | 22 ++++---------------- 4 files changed, 25 insertions(+), 38 deletions(-) diff --git a/src/browser/atom-application.coffee b/src/browser/atom-application.coffee index b68ee2c73..6ca7a2133 100644 --- a/src/browser/atom-application.coffee +++ b/src/browser/atom-application.coffee @@ -65,7 +65,7 @@ class AtomApplication exit: (status) -> app.exit(status) constructor: (options) -> - {@resourcePath, @devResourcePath, @version, @devMode, @safeMode, @socketPath, timeout} = options + {@resourcePath, @devResourcePath, @version, @devMode, @safeMode, @socketPath, timeout, @atomHome} = options @socketPath = null if options.test @@ -89,16 +89,16 @@ class AtomApplication else @loadState(options) or @openPath(options) - openWithOptions: ({pathsToOpen, executedFrom, urlsToOpen, test, pidToKillWhenClosed, devMode, safeMode, newWindow, logFile, profileStartup, timeout}) -> + openWithOptions: ({pathsToOpen, executedFrom, urlsToOpen, test, pidToKillWhenClosed, devMode, safeMode, atomHome, newWindow, logFile, profileStartup, timeout}) -> if test - @runTests({headless: true, devMode, @resourcePath, executedFrom, pathsToOpen, logFile, timeout}) + @runTests({headless: true, devMode, @resourcePath, executedFrom, pathsToOpen, logFile, timeout, atomHome}) else if pathsToOpen.length > 0 - @openPaths({pathsToOpen, executedFrom, pidToKillWhenClosed, newWindow, devMode, safeMode, profileStartup}) + @openPaths({pathsToOpen, executedFrom, pidToKillWhenClosed, newWindow, devMode, safeMode, atomHome, profileStartup}) else if urlsToOpen.length > 0 - @openUrl({urlToOpen, devMode, safeMode}) for urlToOpen in urlsToOpen + @openUrl({urlToOpen, devMode, safeMode, atomHome}) for urlToOpen in urlsToOpen else # Always open a editor window if this is the first instance of Atom. - @openPath({pidToKillWhenClosed, newWindow, devMode, safeMode, profileStartup}) + @openPath({pidToKillWhenClosed, newWindow, devMode, safeMode, atomHome, profileStartup}) # Public: Removes the {AtomWindow} from the global window list. removeWindow: (window) -> @@ -164,6 +164,7 @@ class AtomApplication getLoadSettings = => devMode: @focusedWindow()?.devMode safeMode: @focusedWindow()?.safeMode + atomHome: @focusedWindow()?.atomHome @on 'application:quit', -> app.quit() @on 'application:new-window', -> @openPath(_.extend(windowDimensions: @focusedWindow()?.getDimensions(), getLoadSettings())) @@ -359,8 +360,8 @@ class AtomApplication # :safeMode - Boolean to control the opened window's safe mode. # :profileStartup - Boolean to control creating a profile of the startup time. # :window - {AtomWindow} to open file paths in. - openPath: ({pathToOpen, pidToKillWhenClosed, newWindow, devMode, safeMode, profileStartup, window}) -> - @openPaths({pathsToOpen: [pathToOpen], pidToKillWhenClosed, newWindow, devMode, safeMode, profileStartup, window}) + openPath: ({pathToOpen, pidToKillWhenClosed, newWindow, devMode, safeMode, atomHome, profileStartup, window}) -> + @openPaths({pathsToOpen: [pathToOpen], pidToKillWhenClosed, newWindow, devMode, safeMode, atomHome, profileStartup, window}) # Public: Opens multiple paths, in existing windows if possible. # @@ -372,7 +373,7 @@ class AtomApplication # :safeMode - Boolean to control the opened window's safe mode. # :windowDimensions - Object with height and width keys. # :window - {AtomWindow} to open file paths in. - openPaths: ({pathsToOpen, executedFrom, pidToKillWhenClosed, newWindow, devMode, safeMode, windowDimensions, profileStartup, window}={}) -> + openPaths: ({pathsToOpen, executedFrom, pidToKillWhenClosed, newWindow, devMode, safeMode, atomHome, windowDimensions, profileStartup, window}={}) -> locationsToOpen = (@locationForPathToOpen(pathToOpen, executedFrom) for pathToOpen in pathsToOpen) pathsToOpen = (locationToOpen.pathToOpen for locationToOpen in locationsToOpen) @@ -404,7 +405,7 @@ class AtomApplication windowInitializationScript ?= require.resolve('../initialize-application-window') resourcePath ?= @resourcePath - openedWindow = new AtomWindow({locationsToOpen, windowInitializationScript, resourcePath, devMode, safeMode, windowDimensions, profileStartup}) + openedWindow = new AtomWindow({locationsToOpen, windowInitializationScript, resourcePath, devMode, safeMode, atomHome, windowDimensions, profileStartup}) if pidToKillWhenClosed? @pidsToOpenWindows[pidToKillWhenClosed] = openedWindow @@ -481,7 +482,7 @@ class AtomApplication packagePath = @packages.resolvePackagePath(packageName) windowInitializationScript = path.resolve(packagePath, pack.urlMain) windowDimensions = @focusedWindow()?.getDimensions() - new AtomWindow({windowInitializationScript, @resourcePath, devMode, safeMode, urlToOpen, windowDimensions}) + new AtomWindow({windowInitializationScript, @resourcePath, devMode, safeMode, atomHome, urlToOpen, windowDimensions}) else console.log "Package '#{pack.name}' does not have a url main: #{urlToOpen}" else @@ -496,7 +497,7 @@ class AtomApplication # :specPath - The directory to load specs from. # :safeMode - A Boolean that, if true, won't run specs from ~/.atom/packages # and ~/.atom/dev/packages, defaults to false. - runTests: ({headless, devMode, resourcePath, executedFrom, pathsToOpen, logFile, safeMode, timeout}) -> + runTests: ({headless, devMode, resourcePath, executedFrom, pathsToOpen, logFile, safeMode, timeout, atomHome}) -> if resourcePath isnt @resourcePath and not fs.existsSync(resourcePath) resourcePath = @resourcePath @@ -525,7 +526,7 @@ class AtomApplication testRunnerPath = @resolveTestRunnerPath(testPaths[0]) isSpec = true safeMode ?= false - new AtomWindow({windowInitializationScript, resourcePath, headless, isSpec, devMode, testRunnerPath, legacyTestRunnerPath, testPaths, logFile, safeMode}) + new AtomWindow({windowInitializationScript, resourcePath, headless, isSpec, devMode, testRunnerPath, legacyTestRunnerPath, testPaths, logFile, safeMode, atomHome}) resolveTestRunnerPath: (testPath) -> FindParentDir ?= require 'find-parent-dir' @@ -578,9 +579,9 @@ class AtomApplication # :safeMode - A Boolean which controls whether any newly opened windows # should be in safe mode or not. # :window - An {AtomWindow} to use for opening a selected file path. - promptForPathToOpen: (type, {devMode, safeMode, window}) -> + promptForPathToOpen: (type, {devMode, safeMode, atomHome, window}) -> @promptForPath type, (pathsToOpen) => - @openPaths({pathsToOpen, devMode, safeMode, window}) + @openPaths({pathsToOpen, devMode, safeMode, atomHome, window}) promptForPath: (type, callback) -> properties = diff --git a/src/browser/atom-window.coffee b/src/browser/atom-window.coffee index 16456d274..0945c0346 100644 --- a/src/browser/atom-window.coffee +++ b/src/browser/atom-window.coffee @@ -19,7 +19,7 @@ class AtomWindow isSpec: null constructor: (settings={}) -> - {@resourcePath, pathToOpen, locationsToOpen, @isSpec, @headless, @safeMode, @devMode} = settings + {@resourcePath, pathToOpen, locationsToOpen, @isSpec, @headless, @safeMode, @devMode, @atomHome} = settings locationsToOpen ?= [{pathToOpen}] if pathToOpen locationsToOpen ?= [] diff --git a/src/browser/main.coffee b/src/browser/main.coffee index 48485486b..975b3c14c 100644 --- a/src/browser/main.coffee +++ b/src/browser/main.coffee @@ -12,15 +12,14 @@ yargs = require 'yargs' console.log = require 'nslog' start = -> - setupAtomHome() + args = parseCommandLine() + args.atomHome = setupAtomHome() setupCompileCache() return if handleStartupEventWithSquirrel() # NB: This prevents Win10 from showing dupe items in the taskbar app.setAppUserModelId('com.squirrel.atom.atom') - args = parseCommandLine() - addPathToOpen = (event, pathToOpen) -> event.preventDefault() args.pathsToOpen.push(pathToOpen) @@ -58,13 +57,14 @@ setupCrashReporter = -> crashReporter.start(productName: 'Atom', companyName: 'GitHub') setupAtomHome = -> - return if process.env.ATOM_HOME + return process.env.ATOM_HOME if process.env.ATOM_HOME atomHome = path.join(app.getHomeDir(), '.atom') AtomPortable = require './atom-portable' atomHome = AtomPortable.getPortableAtomHomePath() if AtomPortable.isPortableInstall(process.platform, process.env.ATOM_HOME, atomHome) try atomHome = fs.realpathSync(atomHome) process.env.ATOM_HOME = atomHome + return atomHome setupCompileCache = -> compileCache = require('../compile-cache') diff --git a/static/index.js b/static/index.js index c21cd6327..f03303d14 100644 --- a/static/index.js +++ b/static/index.js @@ -19,7 +19,7 @@ // Ensure ATOM_HOME is always set before anything else is required // This is because of a difference in Linux not inherited between browser and render processes // issue #5142 - setupAtomHome() + setupAtomHome(loadSettings.atomHome) blobStore = FileSystemBlobStore.load( path.join(process.env.ATOM_HOME, 'blob-store/') @@ -69,7 +69,7 @@ function setupWindow (loadSettings) { var CompileCache = require('../src/compile-cache') - CompileCache.setAtomHomeDirectory(process.env.ATOM_HOME) + CompileCache.setAtomHomeDirectory(loadSettings.atomHome) var ModuleCache = require('../src/module-cache') ModuleCache.register(loadSettings) @@ -92,22 +92,8 @@ require('ipc').sendChannel('window-command', 'window:loaded') } - function setupAtomHome () { - if (!process.env.ATOM_HOME) { - var home - if (process.platform === 'win32') { - home = process.env.USERPROFILE - } else { - home = process.env.HOME - } - var atomHome = path.join(home, '.atom') - try { - atomHome = fs.realpathSync(atomHome) - } catch (error) { - // Ignore since the path might just not exist yet. - } - process.env.ATOM_HOME = atomHome - } + function setupAtomHome (atomHome) { + process.env.ATOM_HOME = atomHome } function setupCsonCache (cacheDir) {