提交 1324dcf0 编写于 作者: B Benjamin Pasero

fix #110982

上级 63d49f6a
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
import * as fs from 'fs'; import * as fs from 'fs';
import * as gracefulFs from 'graceful-fs'; import * as gracefulFs from 'graceful-fs';
import { createHash } from 'crypto'; import { createHash } from 'crypto';
import { stat } from 'vs/base/node/pfs'; import { exists, stat } from 'vs/base/node/pfs';
import { isLinux, isMacintosh, isWindows } from 'vs/base/common/platform'; import { isLinux, isMacintosh, isWindows } from 'vs/base/common/platform';
import { zoomLevelToZoomFactor } from 'vs/platform/windows/common/windows'; import { zoomLevelToZoomFactor } from 'vs/platform/windows/common/windows';
import { mark } from 'vs/base/common/performance'; import { mark } from 'vs/base/common/performance';
...@@ -21,7 +21,7 @@ import { NativeWorkbenchEnvironmentService } from 'vs/workbench/services/environ ...@@ -21,7 +21,7 @@ import { NativeWorkbenchEnvironmentService } from 'vs/workbench/services/environ
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService'; import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
import { INativeWorkbenchConfiguration, INativeWorkbenchEnvironmentService } from 'vs/workbench/services/environment/electron-sandbox/environmentService'; import { INativeWorkbenchConfiguration, INativeWorkbenchEnvironmentService } from 'vs/workbench/services/environment/electron-sandbox/environmentService';
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
import { ISingleFolderWorkspaceIdentifier, IWorkspaceInitializationPayload, ISingleFolderWorkspaceInitializationPayload, reviveWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces'; import { ISingleFolderWorkspaceIdentifier, IWorkspaceInitializationPayload, ISingleFolderWorkspaceInitializationPayload, reviveWorkspaceIdentifier, IWorkspaceIdentifier, IMultiFolderWorkspaceInitializationPayload } from 'vs/platform/workspaces/common/workspaces';
import { ILogService } from 'vs/platform/log/common/log'; import { ILogService } from 'vs/platform/log/common/log';
import { NativeStorageService } from 'vs/platform/storage/node/storageService'; import { NativeStorageService } from 'vs/platform/storage/node/storageService';
import { Schemas } from 'vs/base/common/network'; import { Schemas } from 'vs/base/common/network';
...@@ -280,7 +280,7 @@ class DesktopMain extends Disposable { ...@@ -280,7 +280,7 @@ class DesktopMain extends Disposable {
return service; return service;
}), }),
this.createKeyboardLayoutService(logService, mainProcessService).then(service => { this.createKeyboardLayoutService(mainProcessService).then(service => {
// KeyboardLayout // KeyboardLayout
serviceCollection.set(IKeyboardLayoutService, service); serviceCollection.set(IKeyboardLayoutService, service);
...@@ -307,15 +307,15 @@ class DesktopMain extends Disposable { ...@@ -307,15 +307,15 @@ class DesktopMain extends Disposable {
} }
private async resolveWorkspaceInitializationPayload(): Promise<IWorkspaceInitializationPayload> { private async resolveWorkspaceInitializationPayload(): Promise<IWorkspaceInitializationPayload> {
let workspaceInitializationPayload: IWorkspaceInitializationPayload | undefined;
// Multi-root workspace // Multi-root workspace
if (this.configuration.workspace) { if (this.configuration.workspace) {
return this.configuration.workspace; workspaceInitializationPayload = await this.resolveMultiFolderWorkspaceInitializationPayload(this.configuration.workspace);
} }
// Single-folder workspace // Single-folder workspace
let workspaceInitializationPayload: IWorkspaceInitializationPayload | undefined; else if (this.configuration.folderUri) {
if (this.configuration.folderUri) {
workspaceInitializationPayload = await this.resolveSingleFolderWorkspaceInitializationPayload(this.configuration.folderUri); workspaceInitializationPayload = await this.resolveSingleFolderWorkspaceInitializationPayload(this.configuration.folderUri);
} }
...@@ -336,6 +336,18 @@ class DesktopMain extends Disposable { ...@@ -336,6 +336,18 @@ class DesktopMain extends Disposable {
return workspaceInitializationPayload; return workspaceInitializationPayload;
} }
private async resolveMultiFolderWorkspaceInitializationPayload(workspace: IWorkspaceIdentifier): Promise<IMultiFolderWorkspaceInitializationPayload | undefined> {
// It is possible that the workspace file does not exist
// on disk anymore, so we return `undefined` in that case
// (https://github.com/microsoft/vscode/issues/110982)
if (workspace.configPath.scheme === Schemas.file && !await exists(workspace.configPath.fsPath)) {
return undefined;
}
return workspace;
}
private async resolveSingleFolderWorkspaceInitializationPayload(folderUri: ISingleFolderWorkspaceIdentifier): Promise<ISingleFolderWorkspaceInitializationPayload | undefined> { private async resolveSingleFolderWorkspaceInitializationPayload(folderUri: ISingleFolderWorkspaceIdentifier): Promise<ISingleFolderWorkspaceInitializationPayload | undefined> {
try { try {
const folder = folderUri.scheme === Schemas.file const folder = folderUri.scheme === Schemas.file
...@@ -388,7 +400,6 @@ class DesktopMain extends Disposable { ...@@ -388,7 +400,6 @@ class DesktopMain extends Disposable {
return workspaceService; return workspaceService;
} catch (error) { } catch (error) {
onUnexpectedError(error); onUnexpectedError(error);
logService.error(error);
return workspaceService; return workspaceService;
} }
...@@ -404,13 +415,12 @@ class DesktopMain extends Disposable { ...@@ -404,13 +415,12 @@ class DesktopMain extends Disposable {
return storageService; return storageService;
} catch (error) { } catch (error) {
onUnexpectedError(error); onUnexpectedError(error);
logService.error(error);
return storageService; return storageService;
} }
} }
private async createKeyboardLayoutService(logService: ILogService, mainProcessService: IMainProcessService): Promise<KeyboardLayoutService> { private async createKeyboardLayoutService(mainProcessService: IMainProcessService): Promise<KeyboardLayoutService> {
const keyboardLayoutService = new KeyboardLayoutService(mainProcessService); const keyboardLayoutService = new KeyboardLayoutService(mainProcessService);
try { try {
...@@ -419,7 +429,6 @@ class DesktopMain extends Disposable { ...@@ -419,7 +429,6 @@ class DesktopMain extends Disposable {
return keyboardLayoutService; return keyboardLayoutService;
} catch (error) { } catch (error) {
onUnexpectedError(error); onUnexpectedError(error);
logService.error(error);
return keyboardLayoutService; return keyboardLayoutService;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册