Skip to content

Commit a2a90a4

Browse files
authored
add 'don't ask again' to close with with conflicts modal (microsoft#167258)
fixes microsoft#159024
1 parent 337fd85 commit a2a90a4

File tree

4 files changed

+40
-4
lines changed

4 files changed

+40
-4
lines changed

src/vs/workbench/contrib/mergeEditor/browser/commands/commands.ts

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@ import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
1414
import { ITextEditorOptions } from 'vs/platform/editor/common/editor';
1515
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
1616
import { IOpenerService } from 'vs/platform/opener/common/opener';
17+
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
1718
import { IEditorIdentifier, IResourceMergeEditorInput } from 'vs/workbench/common/editor';
1819
import { MergeEditorInput, MergeEditorInputData } from 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInput';
1920
import { IMergeEditorInputModel } from 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel';
2021
import { MergeEditor } from 'vs/workbench/contrib/mergeEditor/browser/view/mergeEditor';
2122
import { MergeEditorViewModel } from 'vs/workbench/contrib/mergeEditor/browser/view/viewModel';
22-
import { ctxIsMergeEditor, ctxMergeEditorLayout, ctxMergeEditorShowBase, ctxMergeEditorShowBaseAtTop, ctxMergeEditorShowNonConflictingChanges } from 'vs/workbench/contrib/mergeEditor/common/mergeEditor';
23+
import { ctxIsMergeEditor, ctxMergeEditorLayout, ctxMergeEditorShowBase, ctxMergeEditorShowBaseAtTop, ctxMergeEditorShowNonConflictingChanges, StorageCloseWithConflicts } from 'vs/workbench/contrib/mergeEditor/common/mergeEditor';
2324
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
2425

2526
abstract class MergeEditorAction extends Action2 {
@@ -636,6 +637,26 @@ export class ResetToBaseAndAutoMergeCommand extends MergeEditorAction {
636637
}
637638
}
638639

640+
export class ResetCloseWithConflictsChoice extends Action2 {
641+
constructor() {
642+
super({
643+
id: 'mergeEditor.resetCloseWithConflictsChoice',
644+
category: mergeEditorCategory,
645+
title: {
646+
value: localize(
647+
'mergeEditor.resetChoice',
648+
'Reset Choice for \'Close with Conflicts\''
649+
),
650+
original: 'Reset Choice for \'Close with Conflicts\'',
651+
},
652+
f1: true,
653+
});
654+
}
655+
run(accessor: ServicesAccessor): void {
656+
accessor.get(IStorageService).remove(StorageCloseWithConflicts, StorageScope.PROFILE);
657+
}
658+
}
659+
639660
// this is an API command
640661
export class AcceptMerge extends MergeEditorAction2 {
641662
constructor() {

src/vs/workbench/contrib/mergeEditor/browser/mergeEditor.contribution.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
AcceptAllInput1, AcceptAllInput2, AcceptMerge, CompareInput1WithBaseCommand,
1616
CompareInput2WithBaseCommand, GoToNextUnhandledConflict, GoToPreviousUnhandledConflict, OpenBaseFile, OpenMergeEditor,
1717
OpenResultResource, ResetToBaseAndAutoMergeCommand, SetColumnLayout, SetMixedLayout, ShowHideTopBase, ShowHideCenterBase, ShowHideBase,
18-
ShowNonConflictingChanges, ToggleActiveConflictInput1, ToggleActiveConflictInput2
18+
ShowNonConflictingChanges, ToggleActiveConflictInput1, ToggleActiveConflictInput2, ResetCloseWithConflictsChoice
1919
} from 'vs/workbench/contrib/mergeEditor/browser/commands/commands';
2020
import { MergeEditorCopyContentsToJSON, MergeEditorLoadContentsFromFolder, MergeEditorSaveContentsToFolder } from 'vs/workbench/contrib/mergeEditor/browser/commands/devCommands';
2121
import { MergeEditorInput } from 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInput';
@@ -83,6 +83,7 @@ registerAction2(AcceptAllInput2);
8383
registerAction2(ResetToBaseAndAutoMergeCommand);
8484

8585
registerAction2(AcceptMerge);
86+
registerAction2(ResetCloseWithConflictsChoice);
8687

8788
// Dev Commands
8889
registerAction2(MergeEditorCopyContentsToJSON);

src/vs/workbench/contrib/mergeEditor/browser/mergeEditorInputModel.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@ import { localize } from 'vs/nls';
1717
import { ConfirmResult, IDialogOptions, IDialogService } from 'vs/platform/dialogs/common/dialogs';
1818
import { IEditorModel } from 'vs/platform/editor/common/editor';
1919
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
20+
import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage';
2021
import { IRevertOptions, SaveSourceRegistry } from 'vs/workbench/common/editor';
2122
import { EditorModel } from 'vs/workbench/common/editor/editorModel';
2223
import { MergeEditorInputData } from 'vs/workbench/contrib/mergeEditor/browser/mergeEditorInput';
2324
import { conflictMarkers } from 'vs/workbench/contrib/mergeEditor/browser/mergeMarkers/mergeMarkersController';
2425
import { MergeDiffComputer } from 'vs/workbench/contrib/mergeEditor/browser/model/diffComputer';
2526
import { InputData, MergeEditorModel } from 'vs/workbench/contrib/mergeEditor/browser/model/mergeEditorModel';
2627
import { MergeEditorTelemetry } from 'vs/workbench/contrib/mergeEditor/browser/telemetry';
28+
import { StorageCloseWithConflicts } from 'vs/workbench/contrib/mergeEditor/common/mergeEditor';
2729
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
2830
import { ITextFileEditorModel, ITextFileSaveOptions, ITextFileService } from 'vs/workbench/services/textfile/common/textfiles';
2931

@@ -349,6 +351,7 @@ class WorkspaceMergeEditorInputModel extends EditorModel implements IMergeEditor
349351
private readonly resultTextFileModel: ITextFileEditorModel,
350352
private readonly telemetry: MergeEditorTelemetry,
351353
@IDialogService private readonly _dialogService: IDialogService,
354+
@IStorageService private readonly _storageService: IStorageService,
352355
) {
353356
super();
354357
}
@@ -449,7 +452,7 @@ class WorkspaceMergeEditorInputModel extends EditorModel implements IMergeEditor
449452
const { choice } = await this._dialogService.show(Severity.Info, message, actions.map(a => a[0]), { ...options, cancelId: actions.length - 1 });
450453
return actions[choice][1];
451454

452-
} else if (someUnhandledConflicts) {
455+
} else if (someUnhandledConflicts && !this._storageService.getBoolean(StorageCloseWithConflicts, StorageScope.PROFILE, false)) {
453456
const message = isMany
454457
? localize('workspace.messageN.nonDirty', 'Do you want to close {0} merge editors?', inputModels.length)
455458
: localize('workspace.message1.nonDirty', 'Do you want to close the merge editor for {0}?', basename(inputModels[0].resultUri));
@@ -471,7 +474,16 @@ class WorkspaceMergeEditorInputModel extends EditorModel implements IMergeEditor
471474
[localize('workspace.cancel', 'Cancel'), ConfirmResult.CANCEL],
472475
];
473476

474-
const { choice } = await this._dialogService.show(Severity.Info, message, actions.map(a => a[0]), { ...options, cancelId: actions.length - 1 });
477+
const { choice, checkboxChecked } = await this._dialogService.show(Severity.Info, message, actions.map(a => a[0]), {
478+
...options,
479+
cancelId: actions.length - 1,
480+
checkbox: { label: localize('noMoreWarn', "Don't ask again") }
481+
});
482+
483+
if (checkboxChecked) {
484+
this._storageService.store(StorageCloseWithConflicts, true, StorageScope.PROFILE, StorageTarget.USER);
485+
}
486+
475487
return actions[choice][1];
476488
} else {
477489
// This shouldn't do anything

src/vs/workbench/contrib/mergeEditor/common/mergeEditor.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,5 @@ export interface MergeEditorContents {
2626
result: string;
2727
initialResult?: string;
2828
}
29+
30+
export const StorageCloseWithConflicts = 'mergeEditorCloseWithConflicts';

0 commit comments

Comments
 (0)