Skip to content

Commit 4ae9ec0

Browse files
committed
1 parent 7cbfeb6 commit 4ae9ec0

4 files changed

Lines changed: 25 additions & 20 deletions

File tree

src/vs/platform/files/common/files.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -819,3 +819,18 @@ export function etag(stat: { mtime: number | undefined, size: number | undefined
819819

820820
return stat.mtime.toString(29) + stat.size.toString(31);
821821
}
822+
823+
824+
export function whenProviderRegistered(file: URI, fileService: IFileService): Promise<void> {
825+
if (fileService.canHandleResource(URI.from({ scheme: file.scheme }))) {
826+
return Promise.resolve();
827+
}
828+
return new Promise((c, e) => {
829+
const disposable = fileService.onDidChangeFileSystemProviderRegistrations(e => {
830+
if (e.scheme === file.scheme && e.added) {
831+
disposable.dispose();
832+
c();
833+
}
834+
});
835+
});
836+
}

src/vs/platform/log/common/fileLogService.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55

66
import { ILogService, LogLevel, AbstractLogService, ILoggerService, ILogger } from 'vs/platform/log/common/log';
77
import { URI } from 'vs/base/common/uri';
8-
import { IFileService } from 'vs/platform/files/common/files';
8+
import { IFileService, whenProviderRegistered } from 'vs/platform/files/common/files';
99
import { Queue } from 'vs/base/common/async';
1010
import { VSBuffer } from 'vs/base/common/buffer';
1111
import { dirname, joinPath, basename } from 'vs/base/common/resources';
1212
import { Disposable } from 'vs/base/common/lifecycle';
1313
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
14+
import { BufferLogService } from 'vs/platform/log/common/bufferLog';
1415

1516
const MAX_FILE_SIZE = 1024 * 1024 * 5;
1617

@@ -163,6 +164,7 @@ export class FileLoggerService extends Disposable implements ILoggerService {
163164
constructor(
164165
@ILogService private logService: ILogService,
165166
@IInstantiationService private instantiationService: IInstantiationService,
167+
@IFileService private fileService: IFileService,
166168
) {
167169
super();
168170
this._register(logService.onDidChangeLogLevel(level => this.loggers.forEach(logger => logger.setLevel(level))));
@@ -171,8 +173,9 @@ export class FileLoggerService extends Disposable implements ILoggerService {
171173
getLogger(resource: URI): ILogger {
172174
let logger = this.loggers.get(resource.toString());
173175
if (!logger) {
174-
logger = this.instantiationService.createInstance(FileLogService, basename(resource), resource, this.logService.getLevel());
176+
logger = new BufferLogService, this.logService.getLevel();
175177
this.loggers.set(resource.toString(), logger);
178+
whenProviderRegistered(resource, this.fileService).then(() => (<BufferLogService>logger).logger = this.instantiationService.createInstance(FileLogService, basename(resource), resource, this.logService.getLevel()));
176179
}
177180
return logger;
178181
}

src/vs/workbench/contrib/logs/common/logs.contribution.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { SetLogLevelAction, OpenWindowSessionLogFileAction } from 'vs/workbench/
1212
import * as Constants from 'vs/workbench/contrib/logs/common/logConstants';
1313
import { IWorkbenchContribution, IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
1414
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
15-
import { IFileService, FileChangeType } from 'vs/platform/files/common/files';
15+
import { IFileService, FileChangeType, whenProviderRegistered } from 'vs/platform/files/common/files';
1616
import { URI } from 'vs/base/common/uri';
1717
import { IOutputChannelRegistry, Extensions as OutputExt } from 'vs/workbench/contrib/output/common/output';
1818
import { Disposable } from 'vs/base/common/lifecycle';
@@ -71,6 +71,7 @@ class LogOutputChannels extends Disposable implements IWorkbenchContribution {
7171
}
7272

7373
private async registerLogChannel(id: string, label: string, file: URI): Promise<void> {
74+
await whenProviderRegistered(file, this.fileService);
7475
const outputChannelRegistry = Registry.as<IOutputChannelRegistry>(OutputExt.OutputChannels);
7576
const exists = await this.fileService.exists(file);
7677
if (exists) {

src/vs/workbench/services/configuration/browser/configuration.ts

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { Event, Emitter } from 'vs/base/common/event';
99
import * as errors from 'vs/base/common/errors';
1010
import { Disposable, IDisposable, dispose, toDisposable } from 'vs/base/common/lifecycle';
1111
import { RunOnceScheduler } from 'vs/base/common/async';
12-
import { FileChangeType, FileChangesEvent, IFileService } from 'vs/platform/files/common/files';
12+
import { FileChangeType, FileChangesEvent, IFileService, whenProviderRegistered } from 'vs/platform/files/common/files';
1313
import { ConfigurationModel, ConfigurationModelParser } from 'vs/platform/configuration/common/configurationModels';
1414
import { WorkspaceConfigurationModelParser, StandaloneConfigurationModelParser } from 'vs/workbench/services/configuration/common/configurationModels';
1515
import { FOLDER_SETTINGS_PATH, TASKS_CONFIGURATION_KEY, FOLDER_SETTINGS_NAME, LAUNCH_CONFIGURATION_KEY, IConfigurationCache, ConfigurationKey, REMOTE_MACHINE_SCOPES, FOLDER_SCOPES, WORKSPACE_SCOPES } from 'vs/workbench/services/configuration/common/configuration';
@@ -24,20 +24,6 @@ import { IConfigurationModel } from 'vs/platform/configuration/common/configurat
2424
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
2525
import { hash } from 'vs/base/common/hash';
2626

27-
function whenProviderRegistered(scheme: string, fileService: IFileService): Promise<void> {
28-
if (fileService.canHandleResource(URI.from({ scheme }))) {
29-
return Promise.resolve();
30-
}
31-
return new Promise((c, e) => {
32-
const disposable = fileService.onDidChangeFileSystemProviderRegistrations(e => {
33-
if (e.scheme === scheme && e.added) {
34-
disposable.dispose();
35-
c();
36-
}
37-
});
38-
});
39-
}
40-
4127
export class UserConfiguration extends Disposable {
4228

4329
private readonly parser: ConfigurationModelParser;
@@ -353,7 +339,7 @@ export class WorkspaceConfiguration extends Disposable {
353339
}
354340

355341
private async waitAndSwitch(workspaceIdentifier: IWorkspaceIdentifier): Promise<void> {
356-
await whenProviderRegistered(workspaceIdentifier.configPath.scheme, this._fileService);
342+
await whenProviderRegistered(workspaceIdentifier.configPath, this._fileService);
357343
if (!(this._workspaceConfiguration instanceof FileServiceBasedWorkspaceConfiguration)) {
358344
const fileServiceBasedWorkspaceConfiguration = this._register(new FileServiceBasedWorkspaceConfiguration(this._fileService));
359345
await fileServiceBasedWorkspaceConfiguration.load(workspaceIdentifier);
@@ -750,7 +736,7 @@ export class FolderConfiguration extends Disposable implements IFolderConfigurat
750736
if (workspaceFolder.uri.scheme === Schemas.file) {
751737
this.folderConfiguration = new FileServiceBasedFolderConfiguration(this.configurationFolder, this.workbenchState, fileService);
752738
} else {
753-
whenProviderRegistered(workspaceFolder.uri.scheme, fileService)
739+
whenProviderRegistered(workspaceFolder.uri, fileService)
754740
.then(() => {
755741
this.folderConfiguration.dispose();
756742
this.folderConfigurationDisposable.dispose();

0 commit comments

Comments
 (0)