提交 bd799550 编写于 作者: J Joao Moreno

portable mode

上级 d631cb80
...@@ -3,6 +3,37 @@ ...@@ -3,6 +3,37 @@
* Licensed under the MIT License. See License.txt in the project root for license information. * Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
Error.stackTraceLimit = 100; // increase number of stack frames (from 10, https://github.com/v8/v8/wiki/Stack-Trace-API)
const fs = require('fs');
const path = require('path');
const product = require('../product.json');
const appRoot = path.dirname(__dirname);
function getApplicationPath() {
if (process.env['VSCODE_DEV']) {
return appRoot;
} else if (process.platform === 'darwin') {
return path.dirname(path.dirname(path.dirname(appRoot)));
} else {
return path.dirname(path.dirname(appRoot));
}
}
function getPortableDataPath() {
return path.join(path.dirname(getApplicationPath()), product.portable);
}
if (product.portable) {
const portablePath = getPortableDataPath();
try { fs.mkdirSync(portablePath); } catch (err) { if (err.code !== 'EEXIST') { throw err; } }
const tmpdir = path.join(portablePath, 'tmp');
try { fs.mkdirSync(tmpdir); } catch (err) { if (err.code !== 'EEXIST') { throw err; } }
process.env[process.platform === 'win32' ? 'TEMP' : 'TMPDIR'] = tmpdir;
}
//#region Add support for using node_modules.asar //#region Add support for using node_modules.asar
(function () { (function () {
const path = require('path'); const path = require('path');
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
'use strict'; 'use strict';
let perf = require('./vs/base/common/performance'); const perf = require('./vs/base/common/performance');
perf.mark('main:started'); perf.mark('main:started');
// Perf measurements // Perf measurements
...@@ -12,6 +12,35 @@ global.perfStartTime = Date.now(); ...@@ -12,6 +12,35 @@ global.perfStartTime = Date.now();
Error.stackTraceLimit = 100; // increase number of stack frames (from 10, https://github.com/v8/v8/wiki/Stack-Trace-API) Error.stackTraceLimit = 100; // increase number of stack frames (from 10, https://github.com/v8/v8/wiki/Stack-Trace-API)
const fs = require('fs');
const path = require('path');
const product = require('../product.json');
const appRoot = path.dirname(__dirname);
function getApplicationPath() {
if (process.env['VSCODE_DEV']) {
return appRoot;
} else if (process.platform === 'darwin') {
return path.dirname(path.dirname(path.dirname(appRoot)));
} else {
return path.dirname(path.dirname(appRoot));
}
}
function getPortableDataPath() {
return path.join(path.dirname(getApplicationPath()), product.portable);
}
if (product.portable) {
const portablePath = getPortableDataPath();
try { fs.mkdirSync(portablePath); } catch (err) { if (err.code !== 'EEXIST') { throw err; } }
const tmpdir = path.join(portablePath, 'tmp');
try { fs.mkdirSync(tmpdir); } catch (err) { if (err.code !== 'EEXIST') { throw err; } }
process.env[process.platform === 'win32' ? 'TEMP' : 'TMPDIR'] = tmpdir;
}
//#region Add support for using node_modules.asar //#region Add support for using node_modules.asar
(function () { (function () {
const path = require('path'); const path = require('path');
...@@ -36,18 +65,15 @@ Error.stackTraceLimit = 100; // increase number of stack frames (from 10, https: ...@@ -36,18 +65,15 @@ Error.stackTraceLimit = 100; // increase number of stack frames (from 10, https:
})(); })();
//#endregion //#endregion
let app = require('electron').app; const app = require('electron').app;
// TODO@Ben Electron 2.0.x: prevent localStorage migration from SQLite to LevelDB due to issues // TODO@Ben Electron 2.0.x: prevent localStorage migration from SQLite to LevelDB due to issues
app.commandLine.appendSwitch('disable-mojo-local-storage'); app.commandLine.appendSwitch('disable-mojo-local-storage');
let fs = require('fs'); const minimist = require('minimist');
let path = require('path'); const paths = require('./paths');
let minimist = require('minimist');
let paths = require('./paths');
let product = require('../product.json');
let args = minimist(process.argv, { const args = minimist(process.argv, {
string: [ string: [
'user-data-dir', 'user-data-dir',
'locale', 'locale',
...@@ -350,9 +376,16 @@ function getNodeCachedDataDir() { ...@@ -350,9 +376,16 @@ function getNodeCachedDataDir() {
} }
//#endregion //#endregion
function getUserDataPath() {
if (product.portable) {
return path.join(getPortableDataPath(), 'user-data');
}
return path.resolve(args['user-data-dir'] || paths.getDefaultUserDataPath(process.platform));
}
// Set userData path before app 'ready' event and call to process.chdir // Set userData path before app 'ready' event and call to process.chdir
let userData = path.resolve(args['user-data-dir'] || paths.getDefaultUserDataPath(process.platform)); app.setPath('userData', getUserDataPath());
app.setPath('userData', userData);
// Update cwd based on environment and platform // Update cwd based on environment and platform
try { try {
......
...@@ -90,7 +90,24 @@ export class EnvironmentService implements IEnvironmentService { ...@@ -90,7 +90,24 @@ export class EnvironmentService implements IEnvironmentService {
get userHome(): string { return os.homedir(); } get userHome(): string { return os.homedir(); }
@memoize @memoize
get userDataPath(): string { return parseUserDataDir(this._args, process); } private get appPath(): string {
if (process.env['VSCODE_DEV']) {
return this.appRoot;
} else if (process.platform === 'darwin') {
return path.dirname(path.dirname(path.dirname(this.appRoot)));
} else {
return path.dirname(path.dirname(this.appRoot));
}
}
@memoize
get userDataPath(): string {
if (product.portable) {
return path.join(path.dirname(this.appPath), product.portable, 'user-data');
}
return parseUserDataDir(this._args, process);
}
get appNameLong(): string { return product.nameLong; } get appNameLong(): string { return product.nameLong; }
...@@ -127,7 +144,19 @@ export class EnvironmentService implements IEnvironmentService { ...@@ -127,7 +144,19 @@ export class EnvironmentService implements IEnvironmentService {
get installSourcePath(): string { return path.join(this.userDataPath, 'installSource'); } get installSourcePath(): string { return path.join(this.userDataPath, 'installSource'); }
@memoize @memoize
get extensionsPath(): string { return parsePathArg(this._args['extensions-dir'], process) || process.env['VSCODE_EXTENSIONS'] || path.join(this.userHome, product.dataFolderName, 'extensions'); } get extensionsPath(): string {
const fromArgs = parsePathArg(this._args['extensions-dir'], process);
if (fromArgs) {
return fromArgs;
} else if (process.env['VSCODE_EXTENSIONS']) {
return process.env['VSCODE_EXTENSIONS'];
} else if (product.portable) {
return path.join(path.dirname(this.appPath), product.portable, 'extensions');
} else {
return path.join(this.userHome, product.dataFolderName, 'extensions');
}
}
@memoize @memoize
get extensionDevelopmentPath(): string { return this._args.extensionDevelopmentPath ? path.normalize(this._args.extensionDevelopmentPath) : this._args.extensionDevelopmentPath; } get extensionDevelopmentPath(): string { return this._args.extensionDevelopmentPath ? path.normalize(this._args.extensionDevelopmentPath) : this._args.extensionDevelopmentPath; }
......
...@@ -73,6 +73,7 @@ export interface IProductConfiguration { ...@@ -73,6 +73,7 @@ export interface IProductConfiguration {
'darwin': string; 'darwin': string;
}; };
logUploaderUrl: string; logUploaderUrl: string;
portable?: string;
} }
export interface ISurveyData { export interface ISurveyData {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册