#134909 queue writes and fix tests

This commit is contained in:
Sandeep Somavarapu
2021-10-25 15:31:58 +02:00
parent 9a3bcbe4f7
commit 51f636f90c
2 changed files with 7 additions and 2 deletions
@@ -66,7 +66,7 @@ export class UserConfigurationFileService implements IUserConfigurationFileServi
if (edit) {
content = content.substring(0, edit.offset) + edit.content + content.substring(edit.offset + edit.length);
try {
await this.write(VSBuffer.fromString(content), { etag, mtime });
await this.fileService.writeFile(this.environmentService.settingsResource, VSBuffer.fromString(content), { etag, mtime });
} catch (error) {
if ((<FileOperationError>error).fileOperationResult === FileOperationResult.FILE_MODIFIED_SINCE) {
throw new Error(UserConfigurationErrorCode.ERROR_FILE_MODIFIED_SINCE);
@@ -76,7 +76,10 @@ export class UserConfigurationFileService implements IUserConfigurationFileServi
}
async write(content: VSBuffer, options?: IWriteFileOptions): Promise<void> {
await this.fileService.writeFile(this.environmentService.settingsResource, content, options);
// queue up writes to prevent race conditions
return this.queue.queue(async () => {
await this.fileService.writeFile(this.environmentService.settingsResource, content, options);
});
}
private getEdits({ value, path }: IJSONValue, modelContent: string, formattingOptions: FormattingOptions): Edit[] {
@@ -16,6 +16,7 @@ import { generateUuid } from 'vs/base/common/uuid';
import { IHeaders, IRequestContext, IRequestOptions } from 'vs/base/parts/request/common/request';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { ConfigurationService } from 'vs/platform/configuration/common/configurationService';
import { IUserConfigurationFileService, UserConfigurationFileService } from 'vs/platform/configuration/common/userConfigurationFileService';
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { GlobalExtensionEnablementService } from 'vs/platform/extensionManagement/common/extensionEnablementService';
import { DidUninstallExtensionEvent, IExtensionGalleryService, IExtensionManagementService, IGlobalExtensionEnablementService, InstallExtensionResult } from 'vs/platform/extensionManagement/common/extensionManagement';
@@ -88,6 +89,7 @@ export class UserDataSyncClient extends Disposable {
const configurationService = this._register(new ConfigurationService(environmentService.settingsResource, fileService));
await configurationService.initialize();
this.instantiationService.stub(IConfigurationService, configurationService);
this.instantiationService.stub(IUserConfigurationFileService, this.instantiationService.createInstance(UserConfigurationFileService));
this.instantiationService.stub(IRequestService, this.testServer);