Compare commits

...

3 commits

Author SHA1 Message Date
Raymond Zhao ef9e7408e6
Even with force write, keep the file dirty 2021-11-24 12:57:19 -08:00
Raymond Zhao a557a12ca9
Add ignoreDirtyFile param 2021-11-23 16:25:34 -08:00
Raymond Zhao 4ab1e77fa7
Get pencil to write new setting
Ref #129861
2021-11-23 16:02:54 -08:00
4 changed files with 20 additions and 11 deletions

View file

@ -118,7 +118,7 @@ export interface IConfigurationService {
updateValue(key: string, value: any): Promise<void>;
updateValue(key: string, value: any, overrides: IConfigurationOverrides | IConfigurationUpdateOverrides): Promise<void>;
updateValue(key: string, value: any, target: ConfigurationTarget): Promise<void>;
updateValue(key: string, value: any, overrides: IConfigurationOverrides | IConfigurationUpdateOverrides, target: ConfigurationTarget, donotNotifyError?: boolean): Promise<void>;
updateValue(key: string, value: any, overrides: IConfigurationOverrides | IConfigurationUpdateOverrides, target: ConfigurationTarget, donotNotifyError?: boolean, ignoreDirtyFile?: boolean): Promise<void>;
inspect<T>(key: string, overrides?: IConfigurationOverrides): IConfigurationValue<Readonly<T>>;

View file

@ -78,7 +78,7 @@ export class UserSettingsRenderer extends Disposable implements IPreferencesRend
updatePreference(key: string, value: any, source: IIndexedSetting): void {
const overrideIdentifiers = source.overrideOf ? overrideIdentifiersFromKey(source.overrideOf.key) : null;
const resource = this.preferencesModel.uri;
this.configurationService.updateValue(key, value, { overrideIdentifiers, resource }, this.preferencesModel.configurationTarget)
this.configurationService.updateValue(key, value, { overrideIdentifiers, resource }, this.preferencesModel.configurationTarget, undefined, true)
.then(() => this.onSettingUpdated(source));
}

View file

@ -19,7 +19,7 @@ import { Registry } from 'vs/platform/registry/common/platform';
import { IConfigurationRegistry, Extensions, allSettings, windowSettings, resourceSettings, applicationSettings, machineSettings, machineOverridableSettings, ConfigurationScope, IConfigurationPropertySchema, keyFromOverrideIdentifiers } from 'vs/platform/configuration/common/configurationRegistry';
import { IWorkspaceIdentifier, isWorkspaceIdentifier, IStoredWorkspaceFolder, isStoredWorkspaceFolder, IWorkspaceFolderCreationData, IWorkspaceInitializationPayload, IEmptyWorkspaceIdentifier, useSlashForPath, getStoredWorkspaceFolder, isSingleFolderWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier, toWorkspaceFolders } from 'vs/platform/workspaces/common/workspaces';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { ConfigurationEditingService, EditableConfigurationTarget } from 'vs/workbench/services/configuration/common/configurationEditingService';
import { ConfigurationEditingOptions, ConfigurationEditingService, EditableConfigurationTarget } from 'vs/workbench/services/configuration/common/configurationEditingService';
import { WorkspaceConfiguration, FolderConfiguration, RemoteUserConfiguration, UserConfiguration } from 'vs/workbench/services/configuration/browser/configuration';
import { JSONEditingService } from 'vs/workbench/services/configuration/common/jsonEditingService';
import { IJSONSchema, IJSONSchemaMap } from 'vs/base/common/jsonSchema';
@ -307,8 +307,8 @@ export class WorkspaceService extends Disposable implements IWorkbenchConfigurat
updateValue(key: string, value: any): Promise<void>;
updateValue(key: string, value: any, overrides: IConfigurationOverrides | IConfigurationUpdateOverrides): Promise<void>;
updateValue(key: string, value: any, target: ConfigurationTarget): Promise<void>;
updateValue(key: string, value: any, overrides: IConfigurationOverrides | IConfigurationUpdateOverrides, target: ConfigurationTarget, donotNotifyError?: boolean): Promise<void>;
async updateValue(key: string, value: any, arg3?: any, arg4?: any, donotNotifyError?: any): Promise<void> {
updateValue(key: string, value: any, overrides: IConfigurationOverrides | IConfigurationUpdateOverrides, target: ConfigurationTarget, donotNotifyError?: boolean, ignoreDirtyFile?: boolean): Promise<void>;
async updateValue(key: string, value: any, arg3?: any, arg4?: any, donotNotifyError?: any, ignoreDirtyFile?: any): Promise<void> {
await this.cyclicDependency;
const overrides: IConfigurationUpdateOverrides | undefined = isConfigurationUpdateOverrides(arg3) ? arg3
: isConfigurationOverrides(arg3) ? { resource: arg3.resource, overrideIdentifiers: arg3.overrideIdentifier ? [arg3.overrideIdentifier] : undefined } : undefined;
@ -333,7 +333,7 @@ export class WorkspaceService extends Disposable implements IWorkbenchConfigurat
}
}
await Promises.settled(targets.map(target => this.writeConfigurationValue(key, value, target, overrides, donotNotifyError)));
await Promises.settled(targets.map(target => this.writeConfigurationValue(key, value, target, overrides, donotNotifyError, ignoreDirtyFile)));
}
async reloadConfiguration(target?: ConfigurationTarget | IWorkspaceFolder): Promise<void> {
@ -864,7 +864,7 @@ export class WorkspaceService extends Disposable implements IWorkbenchConfigurat
return validWorkspaceFolders;
}
private async writeConfigurationValue(key: string, value: any, target: ConfigurationTarget, overrides: IConfigurationUpdateOverrides | undefined, donotNotifyError: boolean): Promise<void> {
private async writeConfigurationValue(key: string, value: any, target: ConfigurationTarget, overrides: IConfigurationUpdateOverrides | undefined, donotNotifyError: boolean | undefined, ignoreDirtyFile: boolean | undefined): Promise<void> {
if (target === ConfigurationTarget.DEFAULT) {
throw new Error('Invalid configuration target');
}
@ -885,7 +885,12 @@ export class WorkspaceService extends Disposable implements IWorkbenchConfigurat
throw new Error('Invalid configuration target');
}
await this.configurationEditingService.writeConfiguration(editableConfigurationTarget, { key, value }, { scopes: overrides, donotNotifyError });
const writeOptions: ConfigurationEditingOptions = {
scopes: overrides,
donotNotifyError,
ignoreDirtyFile
};
await this.configurationEditingService.writeConfiguration(editableConfigurationTarget, { key, value }, writeOptions);
switch (editableConfigurationTarget) {
case EditableConfigurationTarget.USER_LOCAL:
return this.reloadLocalUserConfiguration().then(() => undefined);

View file

@ -130,7 +130,7 @@ interface IConfigurationEditOperation extends IConfigurationValue {
workspaceStandAloneConfigurationKey?: string;
}
interface ConfigurationEditingOptions extends IConfigurationEditingOptions {
export interface ConfigurationEditingOptions extends IConfigurationEditingOptions {
ignoreDirtyFile?: boolean;
}
@ -181,7 +181,8 @@ export class ConfigurationEditingService {
const reference = await this.resolveModelReference(resource);
try {
const formattingOptions = this.getFormattingOptions(reference.object.textEditorModel);
if (this.uriIdentityService.extUri.isEqual(resource, this.environmentService.settingsResource)) {
const isDirty = this.textFileService.isDirty(resource);
if (!isDirty && this.uriIdentityService.extUri.isEqual(resource, this.environmentService.settingsResource)) {
await this.userConfigurationFileService.updateSettings({ path: operation.jsonPath, value: operation.value }, formattingOptions);
} else {
await this.updateConfiguration(operation, reference.object.textEditorModel, formattingOptions);
@ -204,9 +205,12 @@ export class ConfigurationEditingService {
throw this.toConfigurationEditingError(ConfigurationEditingErrorCode.ERROR_INVALID_CONFIGURATION, operation.target, operation);
}
const isDirty = this.textFileService.isDirty(model.uri);
const edit = this.getEdits(operation, model.getValue(), formattingOptions)[0];
if (edit && this.applyEditsToBuffer(edit, model)) {
await this.textFileService.save(model.uri);
if (!isDirty) {
await this.textFileService.save(model.uri);
}
}
}