2022-03-23 04:07:14 +08:00
|
|
|
Prevent state collisions
|
|
|
|
|
|
|
|
Previously if you opened different workspaces that had the same filesystem path
|
|
|
|
(for example if you have /home/coder on two different machines that are both
|
|
|
|
accessed through the same host) they would conflict with each other. This
|
|
|
|
ensures that different browser paths will be unique (for example /workspace1 and
|
|
|
|
/workspace2).
|
|
|
|
|
|
|
|
The easiest way to test is to open files in the same workspace using both / and
|
|
|
|
/vscode and make sure they are not interacting with each other.
|
|
|
|
|
2022-08-17 09:26:19 +08:00
|
|
|
Index: code-server/lib/vscode/src/vs/workbench/services/storage/browser/storageService.ts
|
2022-03-23 04:07:14 +08:00
|
|
|
===================================================================
|
2022-08-17 09:26:19 +08:00
|
|
|
--- code-server.orig/lib/vscode/src/vs/workbench/services/storage/browser/storageService.ts
|
|
|
|
+++ code-server/lib/vscode/src/vs/workbench/services/storage/browser/storageService.ts
|
|
|
|
@@ -17,6 +17,7 @@ import { AbstractStorageService, isProfi
|
|
|
|
import { IUserDataProfile } from 'vs/platform/userDataProfile/common/userDataProfile';
|
2022-03-31 07:33:58 +08:00
|
|
|
import { IAnyWorkspaceIdentifier } from 'vs/platform/workspace/common/workspace';
|
2022-08-17 09:26:19 +08:00
|
|
|
import { IUserDataProfileService } from 'vs/workbench/services/userDataProfile/common/userDataProfile';
|
2022-03-23 04:07:14 +08:00
|
|
|
+import { hash } from 'vs/base/common/hash';
|
|
|
|
|
|
|
|
export class BrowserStorageService extends AbstractStorageService {
|
|
|
|
|
2022-08-17 09:26:19 +08:00
|
|
|
@@ -67,7 +68,11 @@ export class BrowserStorageService exten
|
|
|
|
return `global-${this.profileStorageProfile.id}`;
|
|
|
|
}
|
|
|
|
case StorageScope.WORKSPACE:
|
|
|
|
- return this.payload.id;
|
|
|
|
+ // Add a unique ID based on the current path for per-workspace databases.
|
|
|
|
+ // This prevents workspaces on different machines that share the same domain
|
|
|
|
+ // and file path from colliding (since it does not appear IndexedDB can be
|
|
|
|
+ // scoped to a path) as long as they are hosted on different paths.
|
|
|
|
+ return this.payload.id + '-' + hash(location.pathname.toString().replace(/\/$/, "")).toString(16);
|
|
|
|
}
|
2022-03-23 04:07:14 +08:00
|
|
|
}
|
|
|
|
|