mirror of
https://github.com/coder/code-server.git
synced 2024-12-29 04:34:00 +03:00
34c6751bf8
* Update VS Code to 1.92.2 * Use server-main.js to load VS Code It looks like the bootstrap files are now bundled so we can no longer require them. We could make them included again, but maybe it is better to go through the main entrypoint anyway because it includes some nls stuff which is maybe necessary. This also fixes what looks like a bug where we could create two servers if two requests came in. I am not sure what the practical consequences of that would be, but it will no longer do that. * Drop es2020 patch Unfortunately, VS Code will not load with this. It seems to be because `this` is being used in static properties, and it becomes `void 0` for some reason under the es2020 target. For example: static PREFIX_BY_CATEGORY = `${this.PREFIX}${this.SCOPE_PREFIX}`; becomes AbstractGotoSymbolQuickAccessProvider.PREFIX_BY_CATEGORY = `${(void 0).PREFIX}${(void 0).SCOPE_PREFIX}`; Which, obviously, will not work. Older versions of Safari (and maybe other browsers) are likely affected. * Fix display language * Update Playwright I think maybe because of the dropped es2020 patch that Webkit is now failing because it is too old. * Do not wait for networkidle in e2e tests I am not sure what is going on but some tests on Webkit are timing out and it seems the page is loaded but something is still trying to download. Not good, but for now try to at least get the tests passing.
95 lines
4.6 KiB
Diff
95 lines
4.6 KiB
Diff
Make storage local to the remote server
|
|
|
|
This makes user settings will be stored in the file system instead of in browser
|
|
storage. Using browser storage makes sharing or seeding settings between
|
|
browsers difficult and remote settings is not a sufficient replacement because
|
|
some settings are only allowed to be set on the user level.
|
|
|
|
Unfortunately this does not affect state which uses a separate method with
|
|
IndexedDB and does not appear nearly as easy to redirect to disk.
|
|
|
|
To test change settings from the UI and on disk while making sure they appear on
|
|
the other side.
|
|
|
|
This patch also resolves a bug where a global value for workspace initialization
|
|
is used in a non async-safe way.
|
|
|
|
Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts
|
|
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|
@@ -328,6 +328,7 @@ export class WebClientServer {
|
|
remoteAuthority,
|
|
serverBasePath: this._basePath,
|
|
webviewEndpoint: vscodeBase + this._staticRoute + '/out/vs/workbench/contrib/webview/browser/pre',
|
|
+ userDataPath: this._environmentService.userDataPath,
|
|
_wrapWebWorkerExtHostInIframe,
|
|
developmentOptions: { enableSmokeTestDriver: this._environmentService.args['enable-smoke-test-driver'] ? true : undefined, logLevel: this._logService.getLevel() },
|
|
settingsSyncOptions: !this._environmentService.isBuilt && this._environmentService.args['enable-sync'] ? { enabled: true } : undefined,
|
|
Index: code-server/lib/vscode/src/vs/workbench/browser/web.api.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/workbench/browser/web.api.ts
|
|
+++ code-server/lib/vscode/src/vs/workbench/browser/web.api.ts
|
|
@@ -298,6 +298,11 @@ export interface IWorkbenchConstructionO
|
|
*/
|
|
readonly configurationDefaults?: Record<string, any>;
|
|
|
|
+ /**
|
|
+ * Path to the user data directory.
|
|
+ */
|
|
+ readonly userDataPath?: string
|
|
+
|
|
//#endregion
|
|
|
|
//#region Profile options
|
|
Index: code-server/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts
|
|
+++ code-server/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts
|
|
@@ -102,7 +102,14 @@ export class BrowserWorkbenchEnvironment
|
|
get logFile(): URI { return joinPath(this.windowLogsPath, 'window.log'); }
|
|
|
|
@memoize
|
|
- get userRoamingDataHome(): URI { return URI.file('/User').with({ scheme: Schemas.vscodeUserData }); }
|
|
+ get userRoamingDataHome(): URI { return joinPath(URI.file(this.userDataPath).with({ scheme: Schemas.vscodeRemote }), 'User'); }
|
|
+
|
|
+ get userDataPath(): string {
|
|
+ if (!this.options.userDataPath) {
|
|
+ throw new Error('userDataPath was not provided to the browser');
|
|
+ }
|
|
+ return this.options.userDataPath;
|
|
+ }
|
|
|
|
@memoize
|
|
get argvResource(): URI { return joinPath(this.userRoamingDataHome, 'argv.json'); }
|
|
Index: code-server/lib/vscode/src/vs/workbench/services/configuration/browser/configurationService.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/workbench/services/configuration/browser/configurationService.ts
|
|
+++ code-server/lib/vscode/src/vs/workbench/services/configuration/browser/configurationService.ts
|
|
@@ -145,8 +145,10 @@ export class WorkspaceService extends Di
|
|
this.workspaceConfiguration = this._register(new WorkspaceConfiguration(configurationCache, fileService, uriIdentityService, logService));
|
|
this._register(this.workspaceConfiguration.onDidUpdateConfiguration(fromCache => {
|
|
this.onWorkspaceConfigurationChanged(fromCache).then(() => {
|
|
- this.workspace.initialized = this.workspaceConfiguration.initialized;
|
|
- this.checkAndMarkWorkspaceComplete(fromCache);
|
|
+ if (this.workspace) { // The workspace may not have been created yet.
|
|
+ this.workspace.initialized = this.workspaceConfiguration.initialized;
|
|
+ this.checkAndMarkWorkspaceComplete(fromCache);
|
|
+ }
|
|
});
|
|
}));
|
|
|
|
@@ -552,6 +554,12 @@ export class WorkspaceService extends Di
|
|
previousFolders = this.workspace.folders;
|
|
this.workspace.update(workspace);
|
|
} else {
|
|
+ // It is possible for the configuration to become initialized in between
|
|
+ // when the workspace was created and this function was called, so check
|
|
+ // the configuration again now.
|
|
+ if (!workspace.initialized && this.workspaceConfiguration.initialized) {
|
|
+ workspace.initialized = true;
|
|
+ }
|
|
this.workspace = workspace;
|
|
}
|
|
|