Skip to content

Commit 6074ca2

Browse files
committed
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.
1 parent 8608ae2 commit 6074ca2

File tree

1 file changed

+80
-14
lines changed

1 file changed

+80
-14
lines changed

ci/vscode.patch

+80-14
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ index 2c64061da7..c0ef8faedd 100644
229229
// Do nothing. If we can't read the file we have no
230230
// language pack config.
231231
diff --git a/src/vs/code/browser/workbench/workbench.ts b/src/vs/code/browser/workbench/workbench.ts
232-
index ef926bf4fa..db460bf2b6 100644
232+
index ef926bf4fa..64efcc463c 100644
233233
--- a/src/vs/code/browser/workbench/workbench.ts
234234
+++ b/src/vs/code/browser/workbench/workbench.ts
235235
@@ -12,6 +12,8 @@ import { request } from 'vs/base/parts/request/browser/request';
@@ -281,10 +281,12 @@ index ef926bf4fa..db460bf2b6 100644
281281
// Revive static extension locations
282282
if (Array.isArray(config.staticExtensions)) {
283283
config.staticExtensions.forEach(extension => {
284-
@@ -298,35 +318,6 @@ class WorkspaceProvider implements IWorkspaceProvider {
284+
@@ -296,36 +316,7 @@ class WorkspaceProvider implements IWorkspaceProvider {
285+
// Find workspace to open and payload
286+
let foundWorkspace = false;
285287
let workspace: IWorkspace;
286-
let payload = Object.create(null);
287-
288+
- let payload = Object.create(null);
289+
-
288290
- const query = new URL(document.location.href).searchParams;
289291
- query.forEach((value, key) => {
290292
- switch (key) {
@@ -313,10 +315,10 @@ index ef926bf4fa..db460bf2b6 100644
313315
- break;
314316
- }
315317
- });
316-
-
318+
+ let payload = config.workspaceProvider?.payload || Object.create(null);
319+
317320
// If no workspace is provided through the URL, check for config attribute from server
318321
if (!foundWorkspace) {
319-
if (config.folderUri) {
320322
diff --git a/src/vs/platform/environment/common/environment.ts b/src/vs/platform/environment/common/environment.ts
321323
index aa44ee75d7..884887a6a3 100644
322324
--- a/src/vs/platform/environment/common/environment.ts
@@ -1131,10 +1133,10 @@ index 0000000000..56331ff1fc
11311133
+require('../../bootstrap-amd').load('vs/server/entry');
11321134
diff --git a/src/vs/server/ipc.d.ts b/src/vs/server/ipc.d.ts
11331135
new file mode 100644
1134-
index 0000000000..cb4d3a6afe
1136+
index 0000000000..d4771351de
11351137
--- /dev/null
11361138
+++ b/src/vs/server/ipc.d.ts
1137-
@@ -0,0 +1,113 @@
1139+
@@ -0,0 +1,116 @@
11381140
+/**
11391141
+ * External interfaces for integration into code-server over IPC. No vs imports
11401142
+ * should be made in this file.
@@ -1231,6 +1233,9 @@ index 0000000000..cb4d3a6afe
12311233
+ readonly folderUri?: UriComponents;
12321234
+ readonly workspaceUri?: UriComponents;
12331235
+ readonly logLevel?: number;
1236+
+ readonly workspaceProvider?: {
1237+
+ payload: [["userDataPath", string]];
1238+
+ };
12341239
+ };
12351240
+ readonly remoteUserDataUri: UriComponents;
12361241
+ readonly productConfiguration: {
@@ -2321,10 +2326,10 @@ index 0000000000..3c74512192
23212326
+}
23222327
diff --git a/src/vs/server/node/server.ts b/src/vs/server/node/server.ts
23232328
new file mode 100644
2324-
index 0000000000..52311bf756
2329+
index 0000000000..d1f14654cf
23252330
--- /dev/null
23262331
+++ b/src/vs/server/node/server.ts
2327-
@@ -0,0 +1,269 @@
2332+
@@ -0,0 +1,272 @@
23282333
+import * as net from 'net';
23292334
+import * as path from 'path';
23302335
+import { Emitter } from 'vs/base/common/event';
@@ -2422,6 +2427,9 @@ index 0000000000..52311bf756
24222427
+ folderUri: startPath && !startPath.workspace ? parseUrl(startPath.url) : undefined,
24232428
+ remoteAuthority: options.remoteAuthority,
24242429
+ logLevel: getLogLevel(environment),
2430+
+ workspaceProvider: {
2431+
+ payload: [["userDataPath", environment.userDataPath]],
2432+
+ },
24252433
+ },
24262434
+ remoteUserDataUri: transformer.transformOutgoing(URI.file(environment.userDataPath)),
24272435
+ productConfiguration: product,
@@ -3000,10 +3008,18 @@ index b378daa5a0..8d7b1b16df 100644
30003008
console.error('Could not rewrite csp');
30013009
}
30023010
diff --git a/src/vs/workbench/services/environment/browser/environmentService.ts b/src/vs/workbench/services/environment/browser/environmentService.ts
3003-
index f878c3de3d..8d8f0dc3c3 100644
3011+
index f878c3de3d..ad6fb4606a 100644
30043012
--- a/src/vs/workbench/services/environment/browser/environmentService.ts
30053013
+++ b/src/vs/workbench/services/environment/browser/environmentService.ts
3006-
@@ -166,8 +166,8 @@ export class BrowserWorkbenchEnvironmentService implements IWorkbenchEnvironment
3014+
@@ -13,6 +13,7 @@ import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/
3015+
import { IWorkbenchConstructionOptions } from 'vs/workbench/workbench.web.api';
3016+
import product from 'vs/platform/product/common/product';
3017+
import { memoize } from 'vs/base/common/decorators';
3018+
+import * as paths from 'vs/base/common/path';
3019+
3020+
export class BrowserWindowConfiguration implements IWindowConfiguration {
3021+
3022+
@@ -166,8 +167,8 @@ export class BrowserWorkbenchEnvironmentService implements IWorkbenchEnvironment
30073023

30083024
@memoize
30093025
get webviewExternalEndpoint(): string {
@@ -3014,8 +3030,45 @@ index f878c3de3d..8d8f0dc3c3 100644
30143030
}
30153031

30163032
@memoize
3017-
@@ -263,5 +263,8 @@ export class BrowserWorkbenchEnvironmentService implements IWorkbenchEnvironment
3018-
appSettingsHome!: URI;
3033+
@@ -246,22 +247,38 @@ export class BrowserWorkbenchEnvironmentService implements IWorkbenchEnvironment
3034+
driverHandle?: string;
3035+
driverVerbose!: boolean;
3036+
3037+
- installSourcePath!: string;
3038+
+ @memoize
3039+
+ get installSourcePath(): string { return paths.join(this.userDataPath, 'installSource'); }
3040+
3041+
builtinExtensionsPath!: string;
3042+
3043+
- globalStorageHome!: string;
3044+
- workspaceStorageHome!: string;
3045+
+ @memoize
3046+
+ get globalStorageHome(): string { return paths.join(this.appSettingsHome.fsPath, 'globalStorage'); }
3047+
+ @memoize
3048+
+ get workspaceStorageHome(): string { return paths.join(this.appSettingsHome.fsPath, 'workspaceStorage'); }
3049+
3050+
- backupWorkspacesPath!: string;
3051+
+ @memoize
3052+
+ get backupWorkspacesPath(): string { return paths.join(this.backupHome.fsPath, 'workspaces.json'); }
3053+
3054+
- machineSettingsResource!: URI;
3055+
+ @memoize
3056+
+ get machineSettingsResource(): URI { return joinPath(URI.file(paths.join(this.userDataPath, 'Machine')), 'settings.json'); }
3057+
3058+
userHome!: string;
3059+
- userDataPath!: string;
3060+
+ @memoize
3061+
+ get userDataPath(): string {
3062+
+ const dataPath = this.payload?.get("userDataPath");
3063+
+ if (!dataPath) {
3064+
+ throw new Error("userDataPath was not provided to environment service");
3065+
+ }
3066+
+ return dataPath;
3067+
+ }
3068+
appRoot!: string;
3069+
- appSettingsHome!: URI;
3070+
+ @memoize
3071+
+ get appSettingsHome(): URI { return URI.file(paths.join(this.userDataPath, 'User')); }
30193072
execPath!: string;
30203073

30213074
+ extraExtensionPaths!: string[];
@@ -3047,6 +3100,19 @@ index 5b6a15e820..0f93c896e2 100644
30473100
remoteEnv.extensions = remoteEnv.extensions.filter(extension => this._isEnabled(extension) && !canExecuteOnWeb(extension, this._productService, this._configService));
30483101
this._checkEnableProposedApi(remoteEnv.extensions);
30493102

3103+
diff --git a/src/vs/workbench/services/extensions/browser/webWorkerExtensionHostStarter.ts b/src/vs/workbench/services/extensions/browser/webWorkerExtensionHostStarter.ts
3104+
index 5e09934624..d70f8b5364 100644
3105+
--- a/src/vs/workbench/services/extensions/browser/webWorkerExtensionHostStarter.ts
3106+
+++ b/src/vs/workbench/services/extensions/browser/webWorkerExtensionHostStarter.ts
3107+
@@ -142,7 +142,7 @@ export class WebWorkerExtensionHostStarter implements IExtensionHostStarter {
3108+
appLanguage: platform.language,
3109+
extensionDevelopmentLocationURI: this._environmentService.extensionDevelopmentLocationURI,
3110+
extensionTestsLocationURI: this._environmentService.extensionTestsLocationURI,
3111+
- globalStorageHome: URI.parse('fake:globalStorageHome'), //todo@joh URI.file(this._environmentService.globalStorageHome),
3112+
+ globalStorageHome: URI.file(this._environmentService.globalStorageHome),
3113+
userHome: URI.parse('fake:userHome'), //todo@joh URI.file(this._environmentService.userHome),
3114+
webviewResourceRoot: this._environmentService.webviewResourceRoot,
3115+
webviewCspSource: this._environmentService.webviewCspSource,
30503116
diff --git a/src/vs/workbench/services/extensions/common/extensionsUtil.ts b/src/vs/workbench/services/extensions/common/extensionsUtil.ts
30513117
index 9e8352ac88..22a2d296f9 100644
30523118
--- a/src/vs/workbench/services/extensions/common/extensionsUtil.ts

0 commit comments

Comments
 (0)