Fill out some missing browser environment values

Pass the user data dir to the browser environment service then derive
all the paths we can based off that path like the global storage path
which the vim extension uses to store history (otherwise it gets stored
in the working directory from when code-server was spawned).

Arguably the better solution is to use the userdata scheme but that
won't work because the vim extension ignores the VS Code API.

Fixes #1551.
This commit is contained in:
Asher 2020-04-27 16:51:38 -05:00
parent 8608ae2f08
commit 6074ca275b
No known key found for this signature in database
GPG Key ID: D63C1EF81242354A
1 changed files with 80 additions and 14 deletions

View File

@ -229,7 +229,7 @@ index 2c64061da7..c0ef8faedd 100644
// Do nothing. If we can't read the file we have no // Do nothing. If we can't read the file we have no
// language pack config. // language pack config.
diff --git a/src/vs/code/browser/workbench/workbench.ts b/src/vs/code/browser/workbench/workbench.ts diff --git a/src/vs/code/browser/workbench/workbench.ts b/src/vs/code/browser/workbench/workbench.ts
index ef926bf4fa..db460bf2b6 100644 index ef926bf4fa..64efcc463c 100644
--- a/src/vs/code/browser/workbench/workbench.ts --- a/src/vs/code/browser/workbench/workbench.ts
+++ b/src/vs/code/browser/workbench/workbench.ts +++ b/src/vs/code/browser/workbench/workbench.ts
@@ -12,6 +12,8 @@ import { request } from 'vs/base/parts/request/browser/request'; @@ -12,6 +12,8 @@ import { request } from 'vs/base/parts/request/browser/request';
@ -281,10 +281,12 @@ index ef926bf4fa..db460bf2b6 100644
// Revive static extension locations // Revive static extension locations
if (Array.isArray(config.staticExtensions)) { if (Array.isArray(config.staticExtensions)) {
config.staticExtensions.forEach(extension => { config.staticExtensions.forEach(extension => {
@@ -298,35 +318,6 @@ class WorkspaceProvider implements IWorkspaceProvider { @@ -296,36 +316,7 @@ class WorkspaceProvider implements IWorkspaceProvider {
// Find workspace to open and payload
let foundWorkspace = false;
let workspace: IWorkspace; let workspace: IWorkspace;
let payload = Object.create(null); - let payload = Object.create(null);
-
- const query = new URL(document.location.href).searchParams; - const query = new URL(document.location.href).searchParams;
- query.forEach((value, key) => { - query.forEach((value, key) => {
- switch (key) { - switch (key) {
@ -313,10 +315,10 @@ index ef926bf4fa..db460bf2b6 100644
- break; - break;
- } - }
- }); - });
- + let payload = config.workspaceProvider?.payload || Object.create(null);
// If no workspace is provided through the URL, check for config attribute from server // If no workspace is provided through the URL, check for config attribute from server
if (!foundWorkspace) { if (!foundWorkspace) {
if (config.folderUri) {
diff --git a/src/vs/platform/environment/common/environment.ts b/src/vs/platform/environment/common/environment.ts diff --git a/src/vs/platform/environment/common/environment.ts b/src/vs/platform/environment/common/environment.ts
index aa44ee75d7..884887a6a3 100644 index aa44ee75d7..884887a6a3 100644
--- a/src/vs/platform/environment/common/environment.ts --- a/src/vs/platform/environment/common/environment.ts
@ -1131,10 +1133,10 @@ index 0000000000..56331ff1fc
+require('../../bootstrap-amd').load('vs/server/entry'); +require('../../bootstrap-amd').load('vs/server/entry');
diff --git a/src/vs/server/ipc.d.ts b/src/vs/server/ipc.d.ts diff --git a/src/vs/server/ipc.d.ts b/src/vs/server/ipc.d.ts
new file mode 100644 new file mode 100644
index 0000000000..cb4d3a6afe index 0000000000..d4771351de
--- /dev/null --- /dev/null
+++ b/src/vs/server/ipc.d.ts +++ b/src/vs/server/ipc.d.ts
@@ -0,0 +1,113 @@ @@ -0,0 +1,116 @@
+/** +/**
+ * External interfaces for integration into code-server over IPC. No vs imports + * External interfaces for integration into code-server over IPC. No vs imports
+ * should be made in this file. + * should be made in this file.
@ -1231,6 +1233,9 @@ index 0000000000..cb4d3a6afe
+ readonly folderUri?: UriComponents; + readonly folderUri?: UriComponents;
+ readonly workspaceUri?: UriComponents; + readonly workspaceUri?: UriComponents;
+ readonly logLevel?: number; + readonly logLevel?: number;
+ readonly workspaceProvider?: {
+ payload: [["userDataPath", string]];
+ };
+ }; + };
+ readonly remoteUserDataUri: UriComponents; + readonly remoteUserDataUri: UriComponents;
+ readonly productConfiguration: { + readonly productConfiguration: {
@ -2321,10 +2326,10 @@ index 0000000000..3c74512192
+} +}
diff --git a/src/vs/server/node/server.ts b/src/vs/server/node/server.ts diff --git a/src/vs/server/node/server.ts b/src/vs/server/node/server.ts
new file mode 100644 new file mode 100644
index 0000000000..52311bf756 index 0000000000..d1f14654cf
--- /dev/null --- /dev/null
+++ b/src/vs/server/node/server.ts +++ b/src/vs/server/node/server.ts
@@ -0,0 +1,269 @@ @@ -0,0 +1,272 @@
+import * as net from 'net'; +import * as net from 'net';
+import * as path from 'path'; +import * as path from 'path';
+import { Emitter } from 'vs/base/common/event'; +import { Emitter } from 'vs/base/common/event';
@ -2422,6 +2427,9 @@ index 0000000000..52311bf756
+ folderUri: startPath && !startPath.workspace ? parseUrl(startPath.url) : undefined, + folderUri: startPath && !startPath.workspace ? parseUrl(startPath.url) : undefined,
+ remoteAuthority: options.remoteAuthority, + remoteAuthority: options.remoteAuthority,
+ logLevel: getLogLevel(environment), + logLevel: getLogLevel(environment),
+ workspaceProvider: {
+ payload: [["userDataPath", environment.userDataPath]],
+ },
+ }, + },
+ remoteUserDataUri: transformer.transformOutgoing(URI.file(environment.userDataPath)), + remoteUserDataUri: transformer.transformOutgoing(URI.file(environment.userDataPath)),
+ productConfiguration: product, + productConfiguration: product,
@ -3000,10 +3008,18 @@ index b378daa5a0..8d7b1b16df 100644
console.error('Could not rewrite csp'); console.error('Could not rewrite csp');
} }
diff --git a/src/vs/workbench/services/environment/browser/environmentService.ts b/src/vs/workbench/services/environment/browser/environmentService.ts diff --git a/src/vs/workbench/services/environment/browser/environmentService.ts b/src/vs/workbench/services/environment/browser/environmentService.ts
index f878c3de3d..8d8f0dc3c3 100644 index f878c3de3d..ad6fb4606a 100644
--- a/src/vs/workbench/services/environment/browser/environmentService.ts --- a/src/vs/workbench/services/environment/browser/environmentService.ts
+++ b/src/vs/workbench/services/environment/browser/environmentService.ts +++ b/src/vs/workbench/services/environment/browser/environmentService.ts
@@ -166,8 +166,8 @@ export class BrowserWorkbenchEnvironmentService implements IWorkbenchEnvironment @@ -13,6 +13,7 @@ import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/
import { IWorkbenchConstructionOptions } from 'vs/workbench/workbench.web.api';
import product from 'vs/platform/product/common/product';
import { memoize } from 'vs/base/common/decorators';
+import * as paths from 'vs/base/common/path';
export class BrowserWindowConfiguration implements IWindowConfiguration {
@@ -166,8 +167,8 @@ export class BrowserWorkbenchEnvironmentService implements IWorkbenchEnvironment
@memoize @memoize
get webviewExternalEndpoint(): string { get webviewExternalEndpoint(): string {
@ -3014,8 +3030,45 @@ index f878c3de3d..8d8f0dc3c3 100644
} }
@memoize @memoize
@@ -263,5 +263,8 @@ export class BrowserWorkbenchEnvironmentService implements IWorkbenchEnvironment @@ -246,22 +247,38 @@ export class BrowserWorkbenchEnvironmentService implements IWorkbenchEnvironment
appSettingsHome!: URI; driverHandle?: string;
driverVerbose!: boolean;
- installSourcePath!: string;
+ @memoize
+ get installSourcePath(): string { return paths.join(this.userDataPath, 'installSource'); }
builtinExtensionsPath!: string;
- globalStorageHome!: string;
- workspaceStorageHome!: string;
+ @memoize
+ get globalStorageHome(): string { return paths.join(this.appSettingsHome.fsPath, 'globalStorage'); }
+ @memoize
+ get workspaceStorageHome(): string { return paths.join(this.appSettingsHome.fsPath, 'workspaceStorage'); }
- backupWorkspacesPath!: string;
+ @memoize
+ get backupWorkspacesPath(): string { return paths.join(this.backupHome.fsPath, 'workspaces.json'); }
- machineSettingsResource!: URI;
+ @memoize
+ get machineSettingsResource(): URI { return joinPath(URI.file(paths.join(this.userDataPath, 'Machine')), 'settings.json'); }
userHome!: string;
- userDataPath!: string;
+ @memoize
+ get userDataPath(): string {
+ const dataPath = this.payload?.get("userDataPath");
+ if (!dataPath) {
+ throw new Error("userDataPath was not provided to environment service");
+ }
+ return dataPath;
+ }
appRoot!: string;
- appSettingsHome!: URI;
+ @memoize
+ get appSettingsHome(): URI { return URI.file(paths.join(this.userDataPath, 'User')); }
execPath!: string; execPath!: string;
+ extraExtensionPaths!: string[]; + extraExtensionPaths!: string[];
@ -3047,6 +3100,19 @@ index 5b6a15e820..0f93c896e2 100644
remoteEnv.extensions = remoteEnv.extensions.filter(extension => this._isEnabled(extension) && !canExecuteOnWeb(extension, this._productService, this._configService)); remoteEnv.extensions = remoteEnv.extensions.filter(extension => this._isEnabled(extension) && !canExecuteOnWeb(extension, this._productService, this._configService));
this._checkEnableProposedApi(remoteEnv.extensions); this._checkEnableProposedApi(remoteEnv.extensions);
diff --git a/src/vs/workbench/services/extensions/browser/webWorkerExtensionHostStarter.ts b/src/vs/workbench/services/extensions/browser/webWorkerExtensionHostStarter.ts
index 5e09934624..d70f8b5364 100644
--- a/src/vs/workbench/services/extensions/browser/webWorkerExtensionHostStarter.ts
+++ b/src/vs/workbench/services/extensions/browser/webWorkerExtensionHostStarter.ts
@@ -142,7 +142,7 @@ export class WebWorkerExtensionHostStarter implements IExtensionHostStarter {
appLanguage: platform.language,
extensionDevelopmentLocationURI: this._environmentService.extensionDevelopmentLocationURI,
extensionTestsLocationURI: this._environmentService.extensionTestsLocationURI,
- globalStorageHome: URI.parse('fake:globalStorageHome'), //todo@joh URI.file(this._environmentService.globalStorageHome),
+ globalStorageHome: URI.file(this._environmentService.globalStorageHome),
userHome: URI.parse('fake:userHome'), //todo@joh URI.file(this._environmentService.userHome),
webviewResourceRoot: this._environmentService.webviewResourceRoot,
webviewCspSource: this._environmentService.webviewCspSource,
diff --git a/src/vs/workbench/services/extensions/common/extensionsUtil.ts b/src/vs/workbench/services/extensions/common/extensionsUtil.ts diff --git a/src/vs/workbench/services/extensions/common/extensionsUtil.ts b/src/vs/workbench/services/extensions/common/extensionsUtil.ts
index 9e8352ac88..22a2d296f9 100644 index 9e8352ac88..22a2d296f9 100644
--- a/src/vs/workbench/services/extensions/common/extensionsUtil.ts --- a/src/vs/workbench/services/extensions/common/extensionsUtil.ts