From e3da370d82f4f8968cf0a4aceca1a1c165e7f209 Mon Sep 17 00:00:00 2001 From: Dave Rael Date: Tue, 20 Oct 2015 10:57:04 -0600 Subject: [PATCH] Add command line parameter to set portable If parameter included, home directory will be copied to the portable --- spec/atom-portable-spec.coffee | 19 +++++++++++++++++++ src/browser/atom-portable.coffee | 3 +++ src/browser/main.coffee | 8 ++++++-- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/spec/atom-portable-spec.coffee b/spec/atom-portable-spec.coffee index 4665621ff..957900f9f 100644 --- a/spec/atom-portable-spec.coffee +++ b/spec/atom-portable-spec.coffee @@ -4,6 +4,25 @@ temp = require "temp" rimraf = require "rimraf" AtomPortable = require "../src/browser/atom-portable" +describe "Set Portable Mode", -> + portableAtomHomePath = path.join(path.dirname(process.execPath), "../.atom").toString() + portableAtomHomeNaturallyExists = fs.existsSync(portableAtomHomePath) + portableAtomHomeBackupPath = portableAtomHomePath + ".temp" + + beforeEach -> + fs.renameSync(portableAtomHomePath, portableAtomHomeBackupPath) if fs.existsSync(portableAtomHomePath) + + afterEach -> + if portableAtomHomeNaturallyExists + fs.renameSync(portableAtomHomeBackupPath, portableAtomHomePath) if not fs.existsSync(portableAtomHomePath) + else + rimraf.sync(portableAtomHomePath) if fs.existsSync(portableAtomHomePath) + rimraf.sync(portableAtomHomeBackupPath) if fs.existsSync(portableAtomHomeBackupPath) + + it "creates portable home directory", -> + AtomPortable.setPortable(process.env.ATOM_HOME) + expect(fs.existsSync(portableAtomHomePath)).toBe true + describe "Check for Portable Mode", -> describe "Windows", -> describe "with ATOM_HOME environment variable", -> diff --git a/src/browser/atom-portable.coffee b/src/browser/atom-portable.coffee index a8cbd2d41..06ca6865e 100644 --- a/src/browser/atom-portable.coffee +++ b/src/browser/atom-portable.coffee @@ -8,6 +8,9 @@ class AtomPortable execDirectoryPath = path.dirname(process.execPath) path.join(execDirectoryPath, '..', '.atom') + @setPortable: (existingAtomHome) -> + fs.copySync(existingAtomHome, @getPortableAtomHomePath()) + @isPortableInstall: (platform, environmentAtomHome, defaultHome) -> return false unless platform is 'win32' return false if environmentAtomHome diff --git a/src/browser/main.coffee b/src/browser/main.coffee index 48485486b..c54060df2 100644 --- a/src/browser/main.coffee +++ b/src/browser/main.coffee @@ -61,7 +61,9 @@ setupAtomHome = -> return 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) + + AtomPortable.setPortable(atomHome) if not AtomPortable.isPortableInstall(process.platform, process.env.ATOM_HOME, atomHome) and args.setPortable + atomHome = AtomPortable.getPortableAtomHomePath() if AtomPortable.isPortableInstall process.platform, process.env.ATOM_HOME, atomHome try atomHome = fs.realpathSync(atomHome) process.env.ATOM_HOME = atomHome @@ -106,6 +108,7 @@ parseCommandLine = -> options.string('timeout').describe('timeout', 'When in test mode, waits until the specified time (in minutes) and kills the process (exit code: 130).') options.alias('v', 'version').boolean('v').describe('v', 'Print the version.') options.alias('w', 'wait').boolean('w').describe('w', 'Wait for window to be closed before returning.') + options.alias('p', 'set-portable').boolean('p').describe('p', 'Set portable mode.') options.string('socket-path') args = options.argv @@ -131,6 +134,7 @@ parseCommandLine = -> profileStartup = args['profile-startup'] urlsToOpen = [] devResourcePath = process.env.ATOM_DEV_RESOURCE_PATH ? path.join(app.getHomeDir(), 'github', 'atom') + setPortable = args['set-portable'] if args['resource-path'] devMode = true @@ -151,6 +155,6 @@ parseCommandLine = -> {resourcePath, devResourcePath, pathsToOpen, urlsToOpen, executedFrom, test, version, pidToKillWhenClosed, devMode, safeMode, newWindow, - logFile, socketPath, profileStartup, timeout} + logFile, socketPath, profileStartup, timeout, setPortable} start()