Skip to content

Commit a7d0bc8

Browse files
authored
Auto close Git multi-diff editor when all files staged or comitted (microsoft#210327)
* auto close multi-diff editor when all files staged or comitted * remove unused vars
1 parent 4226440 commit a7d0bc8

File tree

3 files changed

+23
-14
lines changed

3 files changed

+23
-14
lines changed

extensions/git/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"scmSelectedProvider",
3232
"scmTextDocument",
3333
"scmValidation",
34+
"tabInputMultiDiff",
3435
"tabInputTextMerge",
3536
"timeline"
3637
],

extensions/git/src/repository.ts

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import * as fs from 'fs';
77
import * as path from 'path';
88
import * as picomatch from 'picomatch';
9-
import { CancellationToken, Command, Disposable, Event, EventEmitter, Memento, ProgressLocation, ProgressOptions, scm, SourceControl, SourceControlInputBox, SourceControlInputBoxValidation, SourceControlInputBoxValidationType, SourceControlResourceDecorations, SourceControlResourceGroup, SourceControlResourceState, ThemeColor, Uri, window, workspace, WorkspaceEdit, FileDecoration, commands, Tab, TabInputTextDiff, TabInputNotebookDiff, RelativePattern, CancellationTokenSource, LogOutputChannel, LogLevel, CancellationError, l10n } from 'vscode';
9+
import { CancellationToken, Command, Disposable, Event, EventEmitter, Memento, ProgressLocation, ProgressOptions, scm, SourceControl, SourceControlInputBox, SourceControlInputBoxValidation, SourceControlInputBoxValidationType, SourceControlResourceDecorations, SourceControlResourceGroup, SourceControlResourceState, ThemeColor, Uri, window, workspace, WorkspaceEdit, FileDecoration, commands, TabInputTextDiff, TabInputNotebookDiff, TabInputTextMultiDiff, RelativePattern, CancellationTokenSource, LogOutputChannel, LogLevel, CancellationError, l10n } from 'vscode';
1010
import TelemetryReporter from '@vscode/extension-telemetry';
1111
import { Branch, Change, ForcePushMode, GitErrorCodes, LogOptions, Ref, Remote, Status, CommitOptions, BranchQuery, FetchOptions, RefQuery, RefType } from './api/git';
1212
import { AutoFetcher } from './autofetch';
@@ -1358,22 +1358,29 @@ export class Repository implements Disposable {
13581358
const config = workspace.getConfiguration('git', Uri.file(this.root));
13591359
if (!config.get<boolean>('closeDiffOnOperation', false) && !ignoreSetting) { return; }
13601360

1361-
const diffEditorTabsToClose: Tab[] = [];
1362-
1363-
for (const tab of window.tabGroups.all.map(g => g.tabs).flat()) {
1364-
const { input } = tab;
1365-
if (input instanceof TabInputTextDiff || input instanceof TabInputNotebookDiff) {
1366-
if (input.modified.scheme === 'git' && (indexResources === undefined || indexResources.some(r => pathEquals(r, input.modified.fsPath)))) {
1367-
// Index
1368-
diffEditorTabsToClose.push(tab);
1369-
}
1370-
if (input.modified.scheme === 'file' && input.original.scheme === 'git' && (workingTreeResources === undefined || workingTreeResources.some(r => pathEquals(r, input.modified.fsPath)))) {
1371-
// Working Tree
1372-
diffEditorTabsToClose.push(tab);
1373-
}
1361+
function checkTabShouldClose(input: TabInputTextDiff | TabInputNotebookDiff) {
1362+
if (input.modified.scheme === 'git' && (indexResources === undefined || indexResources.some(r => pathEquals(r, input.modified.fsPath)))) {
1363+
// Index
1364+
return true;
1365+
}
1366+
if (input.modified.scheme === 'file' && input.original.scheme === 'git' && (workingTreeResources === undefined || workingTreeResources.some(r => pathEquals(r, input.modified.fsPath)))) {
1367+
// Working Tree
1368+
return true;
13741369
}
1370+
return false;
13751371
}
13761372

1373+
const diffEditorTabsToClose = window.tabGroups.all
1374+
.flatMap(g => g.tabs)
1375+
.filter(({ input }) => {
1376+
if (input instanceof TabInputTextDiff || input instanceof TabInputNotebookDiff) {
1377+
return checkTabShouldClose(input);
1378+
} else if (input instanceof TabInputTextMultiDiff) {
1379+
return input.textDiffs.every(checkTabShouldClose);
1380+
}
1381+
return false;
1382+
});
1383+
13771384
// Close editors
13781385
window.tabGroups.close(diffEditorTabsToClose, true);
13791386
}

extensions/git/tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"../../src/vscode-dts/vscode.proposed.scmValidation.d.ts",
1919
"../../src/vscode-dts/vscode.proposed.scmMultiDiffEditor.d.ts",
2020
"../../src/vscode-dts/vscode.proposed.scmTextDocument.d.ts",
21+
"../../src/vscode-dts/vscode.proposed.tabInputMultiDiff.d.ts",
2122
"../../src/vscode-dts/vscode.proposed.tabInputTextMerge.d.ts",
2223
"../../src/vscode-dts/vscode.proposed.timeline.d.ts",
2324
"../types/lib.textEncoder.d.ts"

0 commit comments

Comments
 (0)