From b45531fd9c625c9bcd3185e0d420c72f76c4fa2b Mon Sep 17 00:00:00 2001 From: kuiwu Date: Fri, 24 Dec 2021 17:17:20 +0800 Subject: [PATCH] fix: use temp uri to build storage path while workspace is undefined --- .../src/browser/storage-path.ts | 36 +++++++++---------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/packages/extension-storage/src/browser/storage-path.ts b/packages/extension-storage/src/browser/storage-path.ts index 22a7f8a4e2..4a4f018607 100644 --- a/packages/extension-storage/src/browser/storage-path.ts +++ b/packages/extension-storage/src/browser/storage-path.ts @@ -67,15 +67,6 @@ export class ExtensionStoragePathServer implements IExtensionStoragePathServer { throw new Error('Unable to get parent storage directory'); } - if (!workspace) { - if (!this.storagePathInitialized) { - this.deferredWorkspaceStoragePath.resolve(undefined); - this.deferredStoragePath.resolve(undefined); - this.storagePathInitialized = true; - } - return (this.cachedStoragePath = undefined); - } - if (!(await this.fileSystem.access(URI.file(parentStorageDir).toString()))) { await this.fileSystem.createFolder(URI.file(parentStorageDir).toString()); } @@ -121,18 +112,31 @@ export class ExtensionStoragePathServer implements IExtensionStoragePathServer { * @returns {Promise} * @memberof ExtensionStoragePathImpl */ - async buildWorkspaceId(workspace: FileStat, roots: FileStat[], extensionStorageDirName: string): Promise { + async buildWorkspaceId( + workspace: FileStat | undefined, + roots: FileStat[], + extensionStorageDirName: string, + ): Promise { const homeDir = await this.getUserHomeDir(); const getTemporaryWorkspaceFileUri = (home: URI): URI => home .resolve(extensionStorageDirName || WORKSPACE_USER_STORAGE_FOLDER_NAME) .resolve(`${UNTITLED_WORKSPACE}.${this.workspaceSuffixName}`) .withScheme('file'); + const getTemporaryWorkspaceUri = (home: URI): URI => + home + .resolve(extensionStorageDirName || WORKSPACE_USER_STORAGE_FOLDER_NAME) + .resolve(`${UNTITLED_WORKSPACE}`) + .withScheme('file'); + if (!workspace) { + const untitled = getTemporaryWorkspaceUri(new URI(homeDir)); + // 当不存在工作区信息时,使用 `UNTITLED_WORKSPACE` 作为工作区 + return crypto.createHash('md5').update(untitled.toString()).digest('hex'); + } const untitledWorkspace = getTemporaryWorkspaceFileUri(new URI(homeDir)); - if (untitledWorkspace.toString() === workspace.uri) { - // 当workspace为临时工作区时 - // 为每个workspace root创建一个临时存储路径 + // 当 workspace 为临时工作区时 + // 为每个 workspace root 创建一个临时存储路径 // 服务.code-workspace, 及.sumi-workspace这种多工作区模式 const rootsStr = roots .map((root) => root.uri) @@ -141,12 +145,6 @@ export class ExtensionStoragePathServer implements IExtensionStoragePathServer { return crypto.createHash('md5').update(rootsStr).digest('hex'); } else { const uri = new URI(workspace.uri); - let displayName = uri.displayName; - - if ((!workspace || !workspace.isDirectory) && displayName.endsWith(`.${this.workspaceSuffixName}`)) { - displayName = displayName.slice(0, displayName.lastIndexOf('.')); - } - return crypto.createHash('md5').update(uri.toString()).digest('hex'); } }