2022-03-22 21:07:14 +01:00
|
|
|
Make storage local to the remote server
|
|
|
|
|
|
|
|
This solves two problems:
|
|
|
|
1. Extensions running in the browser (like Vim) might use these paths
|
|
|
|
directly instead of using the file service and most likely can't write
|
|
|
|
to `/User` on disk.
|
|
|
|
2. Settings will be stored in the file system instead of in browser
|
|
|
|
storage. Using browser storage makes sharing or seeding settings
|
|
|
|
between browsers difficult. We may want to revisit this once/if we get
|
|
|
|
settings sync.
|
|
|
|
|
|
|
|
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 install the Vim extension and make sure something that uses file storage
|
|
|
|
works (history recall for example) and change settings from the UI and on disk
|
|
|
|
while making sure they appear on the other side.
|
|
|
|
|
|
|
|
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
|
2022-06-21 23:51:46 +02:00
|
|
|
@@ -299,6 +299,7 @@ export class WebClientServer {
|
|
|
|
const workbenchWebConfiguration = {
|
|
|
|
remoteAuthority,
|
|
|
|
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,
|
2022-03-22 21:07:14 +01:00
|
|
|
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
|
2022-06-21 23:51:46 +02:00
|
|
|
@@ -245,6 +245,11 @@ export interface IWorkbenchConstructionO
|
2022-03-22 21:07:14 +01:00
|
|
|
*/
|
|
|
|
readonly configurationDefaults?: Record<string, any>;
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * Path to the user data directory.
|
|
|
|
+ */
|
|
|
|
+ readonly userDataPath?: string
|
|
|
|
+
|
|
|
|
//#endregion
|
|
|
|
|
|
|
|
|
|
|
|
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
|
2022-06-21 23:51:46 +02:00
|
|
|
@@ -53,7 +53,14 @@ export class BrowserWorkbenchEnvironment
|
2022-03-22 21:07:14 +01:00
|
|
|
get logFile(): URI { return joinPath(this.logsHome, 'window.log'); }
|
|
|
|
|
|
|
|
@memoize
|
2022-05-04 23:58:49 +02:00
|
|
|
- get userRoamingDataHome(): URI { return URI.file('/User').with({ scheme: Schemas.vscodeUserData }); }
|
2022-03-22 21:07:14 +01:00
|
|
|
+ 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 settingsResource(): URI { return joinPath(this.userRoamingDataHome, 'settings.json'); }
|