提交 e5f694eb 编写于 作者: M Martin Aeschlimann

Can't open workspace file with absolute paths

上级 9573a1a0
...@@ -10,6 +10,7 @@ import { IWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces'; ...@@ -10,6 +10,7 @@ import { IWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces';
import { toWorkspaceFolders } from 'vs/platform/workspace/common/workspace'; import { toWorkspaceFolders } from 'vs/platform/workspace/common/workspace';
import { URI } from 'vs/base/common/uri'; import { URI } from 'vs/base/common/uri';
import { getPathFromAmdModule } from 'vs/base/common/amd'; import { getPathFromAmdModule } from 'vs/base/common/amd';
import { dirname } from 'vs/base/common/resources';
const fixturesFolder = getPathFromAmdModule(require, './fixtures'); const fixturesFolder = getPathFromAmdModule(require, './fixtures');
...@@ -18,13 +19,15 @@ const testWorkspace: IWorkspaceIdentifier = { ...@@ -18,13 +19,15 @@ const testWorkspace: IWorkspaceIdentifier = {
configPath: URI.file(path.join(fixturesFolder, 'workspaces.json')) configPath: URI.file(path.join(fixturesFolder, 'workspaces.json'))
}; };
const testWorkspaceFolders = toWorkspaceFolders([{ path: path.join(fixturesFolder, 'vscode_workspace_1_folder') }, { path: path.join(fixturesFolder, 'vscode_workspace_2_folder') }], dirname(testWorkspace.configPath));
function options(custom?: Partial<IBestWindowOrFolderOptions<ISimpleWindow>>): IBestWindowOrFolderOptions<ISimpleWindow> { function options(custom?: Partial<IBestWindowOrFolderOptions<ISimpleWindow>>): IBestWindowOrFolderOptions<ISimpleWindow> {
return { return {
windows: [], windows: [],
newWindow: false, newWindow: false,
context: OpenContext.CLI, context: OpenContext.CLI,
codeSettingsFolder: '_vscode', codeSettingsFolder: '_vscode',
localWorkspaceResolver: workspace => { return workspace === testWorkspace ? { id: testWorkspace.id, configPath: workspace.configPath, folders: toWorkspaceFolders([{ path: path.join(fixturesFolder, 'vscode_workspace_1_folder') }, { path: path.join(fixturesFolder, 'vscode_workspace_2_folder') }]) } : null!; }, localWorkspaceResolver: workspace => { return workspace === testWorkspace ? { id: testWorkspace.id, configPath: workspace.configPath, folders: testWorkspaceFolders } : null; },
...custom ...custom
}; };
} }
......
...@@ -10,7 +10,7 @@ import { SelectionBasedVariableResolver, CompositeSnippetVariableResolver, Model ...@@ -10,7 +10,7 @@ import { SelectionBasedVariableResolver, CompositeSnippetVariableResolver, Model
import { SnippetParser, Variable, VariableResolver } from 'vs/editor/contrib/snippet/snippetParser'; import { SnippetParser, Variable, VariableResolver } from 'vs/editor/contrib/snippet/snippetParser';
import { TextModel } from 'vs/editor/common/model/textModel'; import { TextModel } from 'vs/editor/common/model/textModel';
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
import { Workspace, toWorkspaceFolders, IWorkspace, IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { Workspace, toWorkspaceFolders, IWorkspace, IWorkspaceContextService, toWorkspaceFolder } from 'vs/platform/workspace/common/workspace';
suite('Snippet Variables Resolver', function () { suite('Snippet Variables Resolver', function () {
...@@ -328,11 +328,13 @@ suite('Snippet Variables Resolver', function () { ...@@ -328,11 +328,13 @@ suite('Snippet Variables Resolver', function () {
assertVariableResolve(resolver, 'WORKSPACE_NAME', undefined); assertVariableResolve(resolver, 'WORKSPACE_NAME', undefined);
// single folder workspace without config // single folder workspace without config
workspace = new Workspace('', toWorkspaceFolders([{ path: '/folderName' }])); workspace = new Workspace('', [toWorkspaceFolder(URI.file('/folderName'))]);
assertVariableResolve(resolver, 'WORKSPACE_NAME', 'folderName'); assertVariableResolve(resolver, 'WORKSPACE_NAME', 'folderName');
// workspace with config // workspace with config
workspace = new Workspace('', toWorkspaceFolders([{ path: 'folderName' }]), URI.file('testWorkspace.code-workspace')); const workspaceFile = URI.file('testWorkspace.code-workspace');
const workspaceDir = URI.file('workspace');
workspace = new Workspace('', toWorkspaceFolders([{ path: 'folderName' }], workspaceDir), workspaceFile);
assertVariableResolve(resolver, 'WORKSPACE_NAME', 'testWorkspace'); assertVariableResolve(resolver, 'WORKSPACE_NAME', 'testWorkspace');
}); });
}); });
\ No newline at end of file
...@@ -4,14 +4,11 @@ ...@@ -4,14 +4,11 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { URI } from 'vs/base/common/uri'; import { URI } from 'vs/base/common/uri';
import { isAbsolute } from 'vs/base/common/path';
import * as resources from 'vs/base/common/resources'; import * as resources from 'vs/base/common/resources';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
import { TernarySearchTree } from 'vs/base/common/map'; import { TernarySearchTree } from 'vs/base/common/map';
import { Event } from 'vs/base/common/event'; import { Event } from 'vs/base/common/event';
import { IWorkspaceIdentifier, IStoredWorkspaceFolder, isRawFileWorkspaceFolder, isRawUriWorkspaceFolder, ISingleFolderWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces'; import { IWorkspaceIdentifier, IStoredWorkspaceFolder, isRawFileWorkspaceFolder, isRawUriWorkspaceFolder, ISingleFolderWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces';
import { coalesce, distinct } from 'vs/base/common/arrays';
import { isLinux } from 'vs/base/common/platform';
export const IWorkspaceContextService = createDecorator<IWorkspaceContextService>('contextService'); export const IWorkspaceContextService = createDecorator<IWorkspaceContextService>('contextService');
...@@ -225,17 +222,20 @@ export class WorkspaceFolder implements IWorkspaceFolder { ...@@ -225,17 +222,20 @@ export class WorkspaceFolder implements IWorkspaceFolder {
} }
} }
export function toWorkspaceFolders(configuredFolders: IStoredWorkspaceFolder[], relativeTo?: URI): WorkspaceFolder[] { export function toWorkspaceFolder(resource: URI): WorkspaceFolder {
let workspaceFolders = parseWorkspaceFolders(configuredFolders, relativeTo); return new WorkspaceFolder({ uri: resource, index: 0, name: resources.basenameOrAuthority(resource) }, { uri: resource.toString() });
return ensureUnique(coalesce(workspaceFolders))
.map(({ uri, raw, name }, index) => new WorkspaceFolder({ uri, name: name || resources.basenameOrAuthority(uri), index }, raw));
} }
function parseWorkspaceFolders(configuredFolders: IStoredWorkspaceFolder[], relativeTo: URI | undefined): Array<WorkspaceFolder | undefined> { export function toWorkspaceFolders(configuredFolders: IStoredWorkspaceFolder[], relativeTo: URI): WorkspaceFolder[] {
return configuredFolders.map((configuredFolder, index) => { let result: WorkspaceFolder[] = [];
let seen: { [uri: string]: boolean } = Object.create(null);
for (let configuredFolder of configuredFolders) {
let uri: URI | null = null; let uri: URI | null = null;
if (isRawFileWorkspaceFolder(configuredFolder)) { if (isRawFileWorkspaceFolder(configuredFolder)) {
uri = toUri(configuredFolder.path, relativeTo); if (configuredFolder.path) {
uri = resources.resolvePath(relativeTo, configuredFolder.path);
}
} else if (isRawUriWorkspaceFolder(configuredFolder)) { } else if (isRawUriWorkspaceFolder(configuredFolder)) {
try { try {
uri = URI.parse(configuredFolder.uri); uri = URI.parse(configuredFolder.uri);
...@@ -248,25 +248,16 @@ function parseWorkspaceFolders(configuredFolders: IStoredWorkspaceFolder[], rela ...@@ -248,25 +248,16 @@ function parseWorkspaceFolders(configuredFolders: IStoredWorkspaceFolder[], rela
// ignore // ignore
} }
} }
if (!uri) { if (uri) {
return undefined; // remove duplicates
} let comparisonKey = resources.getComparisonKey(uri);
return new WorkspaceFolder({ uri, name: configuredFolder.name! /*is ensured in caller*/, index }, configuredFolder); if (!seen[comparisonKey]) {
}); seen[comparisonKey] = true;
}
const name = configuredFolder.name || resources.basenameOrAuthority(uri);
function toUri(path: string, relativeTo: URI | undefined): URI | null { result.push(new WorkspaceFolder({ uri, name, index: result.length }, configuredFolder));
if (path) { }
if (isAbsolute(path)) {
return URI.file(path);
}
if (relativeTo) {
return resources.joinPath(relativeTo, path);
} }
} }
return null; return result;
} }
\ No newline at end of file
function ensureUnique(folders: WorkspaceFolder[]): WorkspaceFolder[] {
return distinct(folders, folder => isLinux ? folder.uri.toString() : folder.uri.toString().toLowerCase());
}
...@@ -4,15 +4,12 @@ ...@@ -4,15 +4,12 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { URI } from 'vs/base/common/uri'; import { URI } from 'vs/base/common/uri';
import { Workspace, toWorkspaceFolders } from 'vs/platform/workspace/common/workspace'; import { Workspace, toWorkspaceFolder } from 'vs/platform/workspace/common/workspace';
import { isWindows } from 'vs/base/common/platform'; import { isWindows } from 'vs/base/common/platform';
const wsUri = URI.file(isWindows ? 'C:\\testWorkspace' : '/testWorkspace'); const wsUri = URI.file(isWindows ? 'C:\\testWorkspace' : '/testWorkspace');
export const TestWorkspace = testWorkspace(wsUri); export const TestWorkspace = testWorkspace(wsUri);
export function testWorkspace(resource: URI): Workspace { export function testWorkspace(resource: URI): Workspace {
return new Workspace( return new Workspace(resource.toString(), [toWorkspaceFolder(resource)]);
resource.toString(),
toWorkspaceFolders([{ path: resource.fsPath }])
);
} }
...@@ -46,7 +46,7 @@ suite('Workspace', () => { ...@@ -46,7 +46,7 @@ suite('Workspace', () => {
}); });
test('toWorkspaceFolders with single absolute folder', () => { test('toWorkspaceFolders with single absolute folder', () => {
const actual = toWorkspaceFolders([{ path: '/src/test' }]); const actual = toWorkspaceFolders([{ path: '/src/test' }], URI.file('/workspaces'));
assert.equal(actual.length, 1); assert.equal(actual.length, 1);
assert.equal(actual[0].uri.fsPath, URI.file('/src/test').fsPath); assert.equal(actual[0].uri.fsPath, URI.file('/src/test').fsPath);
...@@ -66,7 +66,7 @@ suite('Workspace', () => { ...@@ -66,7 +66,7 @@ suite('Workspace', () => {
}); });
test('toWorkspaceFolders with single absolute folder with name', () => { test('toWorkspaceFolders with single absolute folder with name', () => {
const actual = toWorkspaceFolders([{ path: '/src/test', name: 'hello' }]); const actual = toWorkspaceFolders([{ path: '/src/test', name: 'hello' }], URI.file('/workspaces'));
assert.equal(actual.length, 1); assert.equal(actual.length, 1);
...@@ -77,7 +77,7 @@ suite('Workspace', () => { ...@@ -77,7 +77,7 @@ suite('Workspace', () => {
}); });
test('toWorkspaceFolders with multiple unique absolute folders', () => { test('toWorkspaceFolders with multiple unique absolute folders', () => {
const actual = toWorkspaceFolders([{ path: '/src/test2' }, { path: '/src/test3' }, { path: '/src/test1' }]); const actual = toWorkspaceFolders([{ path: '/src/test2' }, { path: '/src/test3' }, { path: '/src/test1' }], URI.file('/workspaces'));
assert.equal(actual.length, 3); assert.equal(actual.length, 3);
assert.equal(actual[0].uri.fsPath, URI.file('/src/test2').fsPath); assert.equal(actual[0].uri.fsPath, URI.file('/src/test2').fsPath);
...@@ -97,7 +97,7 @@ suite('Workspace', () => { ...@@ -97,7 +97,7 @@ suite('Workspace', () => {
}); });
test('toWorkspaceFolders with multiple unique absolute folders with names', () => { test('toWorkspaceFolders with multiple unique absolute folders with names', () => {
const actual = toWorkspaceFolders([{ path: '/src/test2' }, { path: '/src/test3', name: 'noName' }, { path: '/src/test1' }]); const actual = toWorkspaceFolders([{ path: '/src/test2' }, { path: '/src/test3', name: 'noName' }, { path: '/src/test1' }], URI.file('/workspaces'));
assert.equal(actual.length, 3); assert.equal(actual.length, 3);
assert.equal(actual[0].uri.fsPath, URI.file('/src/test2').fsPath); assert.equal(actual[0].uri.fsPath, URI.file('/src/test2').fsPath);
...@@ -137,7 +137,7 @@ suite('Workspace', () => { ...@@ -137,7 +137,7 @@ suite('Workspace', () => {
}); });
test('toWorkspaceFolders with multiple absolute folders with duplicates', () => { test('toWorkspaceFolders with multiple absolute folders with duplicates', () => {
const actual = toWorkspaceFolders([{ path: '/src/test2' }, { path: '/src/test2', name: 'noName' }, { path: '/src/test1' }]); const actual = toWorkspaceFolders([{ path: '/src/test2' }, { path: '/src/test2', name: 'noName' }, { path: '/src/test1' }], URI.file('/workspaces'));
assert.equal(actual.length, 2); assert.equal(actual.length, 2);
assert.equal(actual[0].uri.fsPath, URI.file('/src/test2').fsPath); assert.equal(actual[0].uri.fsPath, URI.file('/src/test2').fsPath);
......
...@@ -51,7 +51,7 @@ import { ExportData } from 'vs/base/common/performance'; ...@@ -51,7 +51,7 @@ import { ExportData } from 'vs/base/common/performance';
import { IRecentlyOpened, IRecent } from 'vs/platform/history/common/history'; import { IRecentlyOpened, IRecent } from 'vs/platform/history/common/history';
import { ISerializableCommandAction } from 'vs/platform/actions/common/actions'; import { ISerializableCommandAction } from 'vs/platform/actions/common/actions';
import { IWorkspaceEditingService } from 'vs/workbench/services/workspace/common/workspaceEditing'; import { IWorkspaceEditingService } from 'vs/workbench/services/workspace/common/workspaceEditing';
import { IWorkspaceContextService, Workspace, toWorkspaceFolders, IWorkspaceFolder, WorkbenchState, IWorkspace } from 'vs/platform/workspace/common/workspace'; import { IWorkspaceContextService, Workspace, toWorkspaceFolder, IWorkspaceFolder, WorkbenchState, IWorkspace } from 'vs/platform/workspace/common/workspace';
import { ITextResourcePropertiesService } from 'vs/editor/common/services/resourceConfiguration'; import { ITextResourcePropertiesService } from 'vs/editor/common/services/resourceConfiguration';
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
...@@ -1365,10 +1365,7 @@ export class SimpleWorkspaceService implements IWorkspaceContextService { ...@@ -1365,10 +1365,7 @@ export class SimpleWorkspaceService implements IWorkspaceContextService {
readonly onDidChangeWorkbenchState = Event.None; readonly onDidChangeWorkbenchState = Event.None;
constructor() { constructor() {
this.workspace = new Workspace( this.workspace = new Workspace(workspaceResource.toString(), [toWorkspaceFolder(workspaceResource)]);
workspaceResource.toString(),
toWorkspaceFolders([{ uri: workspaceResource.toString() }])
);
} }
getFolders(): IWorkspaceFolder[] { getFolders(): IWorkspaceFolder[] {
......
...@@ -11,7 +11,7 @@ import { TestConfigurationService } from 'vs/platform/configuration/test/common/ ...@@ -11,7 +11,7 @@ import { TestConfigurationService } from 'vs/platform/configuration/test/common/
import { IEnvironmentService } from 'vs/platform/environment/common/environment'; import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock';
import { IFolderQuery, IPatternInfo, QueryType, ITextQuery, IFileQuery } from 'vs/workbench/services/search/common/search'; import { IFolderQuery, IPatternInfo, QueryType, ITextQuery, IFileQuery } from 'vs/workbench/services/search/common/search';
import { IWorkspaceContextService, toWorkspaceFolders, Workspace } from 'vs/platform/workspace/common/workspace'; import { IWorkspaceContextService, toWorkspaceFolder, Workspace, toWorkspaceFolders } from 'vs/platform/workspace/common/workspace';
import { ISearchPathsInfo, QueryBuilder } from 'vs/workbench/contrib/search/common/queryBuilder'; import { ISearchPathsInfo, QueryBuilder } from 'vs/workbench/contrib/search/common/queryBuilder';
import { TestContextService, TestEnvironmentService } from 'vs/workbench/test/workbenchTestServices'; import { TestContextService, TestEnvironmentService } from 'vs/workbench/test/workbenchTestServices';
...@@ -24,6 +24,7 @@ suite('QueryBuilder', () => { ...@@ -24,6 +24,7 @@ suite('QueryBuilder', () => {
const PATTERN_INFO: IPatternInfo = { pattern: 'a' }; const PATTERN_INFO: IPatternInfo = { pattern: 'a' };
const ROOT_1 = fixPath('/foo/root1'); const ROOT_1 = fixPath('/foo/root1');
const ROOT_1_URI = getUri(ROOT_1); const ROOT_1_URI = getUri(ROOT_1);
const WS_FOLDER = getUri('/bar'); // location of the workspace file (not important except that it is a file URI)
let instantiationService: TestInstantiationService; let instantiationService: TestInstantiationService;
let queryBuilder: QueryBuilder; let queryBuilder: QueryBuilder;
...@@ -40,7 +41,7 @@ suite('QueryBuilder', () => { ...@@ -40,7 +41,7 @@ suite('QueryBuilder', () => {
instantiationService.stub(IConfigurationService, mockConfigService); instantiationService.stub(IConfigurationService, mockConfigService);
mockContextService = new TestContextService(); mockContextService = new TestContextService();
mockWorkspace = new Workspace('workspace', toWorkspaceFolders([{ path: ROOT_1_URI.fsPath }])); mockWorkspace = new Workspace('workspace', [toWorkspaceFolder(ROOT_1_URI)]);
mockContextService.setWorkspace(mockWorkspace); mockContextService.setWorkspace(mockWorkspace);
instantiationService.stub(IWorkspaceContextService, mockContextService); instantiationService.stub(IWorkspaceContextService, mockContextService);
...@@ -277,7 +278,7 @@ suite('QueryBuilder', () => { ...@@ -277,7 +278,7 @@ suite('QueryBuilder', () => {
const ROOT_2_URI = getUri(ROOT_2); const ROOT_2_URI = getUri(ROOT_2);
const ROOT_3 = fixPath('/project/root3'); const ROOT_3 = fixPath('/project/root3');
const ROOT_3_URI = getUri(ROOT_3); const ROOT_3_URI = getUri(ROOT_3);
mockWorkspace.folders = toWorkspaceFolders([{ path: ROOT_1_URI.fsPath }, { path: ROOT_2_URI.fsPath }, { path: ROOT_3_URI.fsPath }]); mockWorkspace.folders = toWorkspaceFolders([{ path: ROOT_1_URI.fsPath }, { path: ROOT_2_URI.fsPath }, { path: ROOT_3_URI.fsPath }], WS_FOLDER);
mockWorkspace.configuration = uri.file(fixPath('/config')); mockWorkspace.configuration = uri.file(fixPath('/config'));
mockConfigService.setUserConfiguration('search', { mockConfigService.setUserConfiguration('search', {
...@@ -689,7 +690,7 @@ suite('QueryBuilder', () => { ...@@ -689,7 +690,7 @@ suite('QueryBuilder', () => {
test('relative includes w/two root folders', () => { test('relative includes w/two root folders', () => {
const ROOT_2 = '/project/root2'; const ROOT_2 = '/project/root2';
mockWorkspace.folders = toWorkspaceFolders([{ path: ROOT_1_URI.fsPath }, { path: getUri(ROOT_2).fsPath }]); mockWorkspace.folders = toWorkspaceFolders([{ path: ROOT_1_URI.fsPath }, { path: getUri(ROOT_2).fsPath }], WS_FOLDER);
mockWorkspace.configuration = uri.file(fixPath('config')); mockWorkspace.configuration = uri.file(fixPath('config'));
const cases: [string, ISearchPathsInfo][] = [ const cases: [string, ISearchPathsInfo][] = [
...@@ -730,7 +731,7 @@ suite('QueryBuilder', () => { ...@@ -730,7 +731,7 @@ suite('QueryBuilder', () => {
test('include ./foldername', () => { test('include ./foldername', () => {
const ROOT_2 = '/project/root2'; const ROOT_2 = '/project/root2';
const ROOT_1_FOLDERNAME = 'foldername'; const ROOT_1_FOLDERNAME = 'foldername';
mockWorkspace.folders = toWorkspaceFolders([{ path: ROOT_1_URI.fsPath, name: ROOT_1_FOLDERNAME }, { path: getUri(ROOT_2).fsPath }]); mockWorkspace.folders = toWorkspaceFolders([{ path: ROOT_1_URI.fsPath, name: ROOT_1_FOLDERNAME }, { path: getUri(ROOT_2).fsPath }], WS_FOLDER);
mockWorkspace.configuration = uri.file(fixPath('config')); mockWorkspace.configuration = uri.file(fixPath('config'));
const cases: [string, ISearchPathsInfo][] = [ const cases: [string, ISearchPathsInfo][] = [
...@@ -758,7 +759,7 @@ suite('QueryBuilder', () => { ...@@ -758,7 +759,7 @@ suite('QueryBuilder', () => {
test('relative includes w/multiple ambiguous root folders', () => { test('relative includes w/multiple ambiguous root folders', () => {
const ROOT_2 = '/project/rootB'; const ROOT_2 = '/project/rootB';
const ROOT_3 = '/otherproject/rootB'; const ROOT_3 = '/otherproject/rootB';
mockWorkspace.folders = toWorkspaceFolders([{ path: ROOT_1_URI.fsPath }, { path: getUri(ROOT_2).fsPath }, { path: getUri(ROOT_3).fsPath }]); mockWorkspace.folders = toWorkspaceFolders([{ path: ROOT_1_URI.fsPath }, { path: getUri(ROOT_2).fsPath }, { path: getUri(ROOT_3).fsPath }], WS_FOLDER);
mockWorkspace.configuration = uri.file(fixPath('/config')); mockWorkspace.configuration = uri.file(fixPath('/config'));
const cases: [string, ISearchPathsInfo][] = [ const cases: [string, ISearchPathsInfo][] = [
......
...@@ -57,7 +57,6 @@ class TestBackupFileService extends BackupFileService { ...@@ -57,7 +57,6 @@ class TestBackupFileService extends BackupFileService {
constructor(workspace: Uri, backupHome: string, workspacesJsonPath: string) { constructor(workspace: Uri, backupHome: string, workspacesJsonPath: string) {
const fileService = new FileService(new NullLogService()); const fileService = new FileService(new NullLogService());
fileService.registerProvider(Schemas.file, new DiskFileSystemProvider(new NullLogService())); fileService.registerProvider(Schemas.file, new DiskFileSystemProvider(new NullLogService()));
const environmentService = new TestBackupEnvironmentService(workspaceBackupPath); const environmentService = new TestBackupEnvironmentService(workspaceBackupPath);
super(environmentService, fileService); super(environmentService, fileService);
......
...@@ -10,7 +10,7 @@ import { equals, deepClone } from 'vs/base/common/objects'; ...@@ -10,7 +10,7 @@ import { equals, deepClone } from 'vs/base/common/objects';
import { Disposable } from 'vs/base/common/lifecycle'; import { Disposable } from 'vs/base/common/lifecycle';
import { Queue, Barrier } from 'vs/base/common/async'; import { Queue, Barrier } from 'vs/base/common/async';
import { IJSONContributionRegistry, Extensions as JSONExtensions } from 'vs/platform/jsonschemas/common/jsonContributionRegistry'; import { IJSONContributionRegistry, Extensions as JSONExtensions } from 'vs/platform/jsonschemas/common/jsonContributionRegistry';
import { IWorkspaceContextService, Workspace, WorkbenchState, IWorkspaceFolder, toWorkspaceFolders, IWorkspaceFoldersChangeEvent, WorkspaceFolder } from 'vs/platform/workspace/common/workspace'; import { IWorkspaceContextService, Workspace, WorkbenchState, IWorkspaceFolder, toWorkspaceFolders, IWorkspaceFoldersChangeEvent, WorkspaceFolder, toWorkspaceFolder } from 'vs/platform/workspace/common/workspace';
import { isLinux } from 'vs/base/common/platform'; import { isLinux } from 'vs/base/common/platform';
import { ConfigurationChangeEvent, ConfigurationModel, DefaultConfigurationModel } from 'vs/platform/configuration/common/configurationModels'; import { ConfigurationChangeEvent, ConfigurationModel, DefaultConfigurationModel } from 'vs/platform/configuration/common/configurationModels';
import { IConfigurationChangeEvent, ConfigurationTarget, IConfigurationOverrides, keyFromOverrideIdentifier, isConfigurationOverrides, IConfigurationData, IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IConfigurationChangeEvent, ConfigurationTarget, IConfigurationOverrides, keyFromOverrideIdentifier, isConfigurationOverrides, IConfigurationData, IConfigurationService } from 'vs/platform/configuration/common/configuration';
...@@ -340,16 +340,7 @@ export class WorkspaceService extends Disposable implements IConfigurationServic ...@@ -340,16 +340,7 @@ export class WorkspaceService extends Disposable implements IConfigurationServic
} }
private createSingleFolderWorkspace(singleFolder: ISingleFolderWorkspaceInitializationPayload): Promise<Workspace> { private createSingleFolderWorkspace(singleFolder: ISingleFolderWorkspaceInitializationPayload): Promise<Workspace> {
const folder = singleFolder.folder; const workspace = new Workspace(singleFolder.id, [toWorkspaceFolder(singleFolder.folder)]);
let configuredFolders: IStoredWorkspaceFolder[];
if (folder.scheme === 'file') {
configuredFolders = [{ path: folder.fsPath }];
} else {
configuredFolders = [{ uri: folder.toString() }];
}
const workspace = new Workspace(singleFolder.id, toWorkspaceFolders(configuredFolders));
this.releaseWorkspaceBarrier(); // Release barrier as workspace is complete because it is single folder. this.releaseWorkspaceBarrier(); // Release barrier as workspace is complete because it is single folder.
return Promise.resolve(workspace); return Promise.resolve(workspace);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册