mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-21 17:19:01 +01:00
fixes #139631
This commit is contained in:
@@ -6,12 +6,12 @@
|
||||
import * as vscode from 'vscode';
|
||||
import { API as GitAPI } from './typings/git';
|
||||
import { publishRepository } from './publish';
|
||||
import { combinedDisposable } from './util';
|
||||
import { DisposableStore } from './util';
|
||||
|
||||
export function registerCommands(gitAPI: GitAPI): vscode.Disposable {
|
||||
const disposables: vscode.Disposable[] = [];
|
||||
const disposables = new DisposableStore();
|
||||
|
||||
disposables.push(vscode.commands.registerCommand('github.publish', async () => {
|
||||
disposables.add(vscode.commands.registerCommand('github.publish', async () => {
|
||||
try {
|
||||
publishRepository(gitAPI);
|
||||
} catch (err) {
|
||||
@@ -19,5 +19,5 @@ export function registerCommands(gitAPI: GitAPI): vscode.Disposable {
|
||||
}
|
||||
}));
|
||||
|
||||
return combinedDisposable(disposables);
|
||||
return disposables;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ import { GithubRemoteSourceProvider } from './remoteSourceProvider';
|
||||
import { GitExtension } from './typings/git';
|
||||
import { registerCommands } from './commands';
|
||||
import { GithubCredentialProviderManager } from './credentialProvider';
|
||||
import { dispose, combinedDisposable } from './util';
|
||||
import { DisposableStore } from './util';
|
||||
import { GithubPushErrorHandler } from './pushErrorHandler';
|
||||
import { GitBaseExtension } from './typings/git-base';
|
||||
import { GithubRemoteSourcePublisher } from './remoteSourcePublisher';
|
||||
@@ -19,7 +19,7 @@ export function activate(context: ExtensionContext): void {
|
||||
}
|
||||
|
||||
function initializeGitBaseExtension(): Disposable {
|
||||
const disposables = new Set<Disposable>();
|
||||
const disposables = new DisposableStore();
|
||||
|
||||
const initialize = () => {
|
||||
try {
|
||||
@@ -35,8 +35,7 @@ function initializeGitBaseExtension(): Disposable {
|
||||
|
||||
const onDidChangeGitBaseExtensionEnablement = (enabled: boolean) => {
|
||||
if (!enabled) {
|
||||
dispose(disposables);
|
||||
disposables.clear();
|
||||
disposables.dispose();
|
||||
} else {
|
||||
initialize();
|
||||
}
|
||||
@@ -46,11 +45,11 @@ function initializeGitBaseExtension(): Disposable {
|
||||
disposables.add(gitBaseExtension.onDidChangeEnablement(onDidChangeGitBaseExtensionEnablement));
|
||||
onDidChangeGitBaseExtensionEnablement(gitBaseExtension.enabled);
|
||||
|
||||
return combinedDisposable(disposables);
|
||||
return disposables;
|
||||
}
|
||||
|
||||
function initializeGitExtension(): Disposable {
|
||||
const disposables = new Set<Disposable>();
|
||||
const disposables = new DisposableStore();
|
||||
|
||||
let gitExtension = extensions.getExtension<GitExtension>('vscode.git');
|
||||
|
||||
@@ -68,8 +67,7 @@ function initializeGitExtension(): Disposable {
|
||||
|
||||
commands.executeCommand('setContext', 'git-base.gitEnabled', true);
|
||||
} else {
|
||||
dispose(disposables);
|
||||
disposables.clear();
|
||||
disposables.dispose();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -81,16 +79,15 @@ function initializeGitExtension(): Disposable {
|
||||
if (gitExtension) {
|
||||
initialize();
|
||||
} else {
|
||||
const disposable = extensions.onDidChange(() => {
|
||||
const listener = extensions.onDidChange(() => {
|
||||
if (!gitExtension && extensions.getExtension<GitExtension>('vscode.git')) {
|
||||
gitExtension = extensions.getExtension<GitExtension>('vscode.git');
|
||||
initialize();
|
||||
|
||||
dispose(disposable);
|
||||
listener.dispose();
|
||||
}
|
||||
});
|
||||
disposables.add(disposable);
|
||||
disposables.add(listener);
|
||||
}
|
||||
|
||||
return combinedDisposable(disposables);
|
||||
return disposables;
|
||||
}
|
||||
|
||||
@@ -5,20 +5,19 @@
|
||||
|
||||
import * as vscode from 'vscode';
|
||||
|
||||
export function dispose(arg: vscode.Disposable | Iterable<vscode.Disposable>): void {
|
||||
if (arg instanceof vscode.Disposable) {
|
||||
arg.dispose();
|
||||
} else {
|
||||
for (const disposable of arg) {
|
||||
export class DisposableStore {
|
||||
|
||||
private disposables = new Set<vscode.Disposable>();
|
||||
|
||||
add(disposable: vscode.Disposable): void {
|
||||
this.disposables.add(disposable);
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
for (const disposable of this.disposables) {
|
||||
disposable.dispose();
|
||||
}
|
||||
|
||||
this.disposables.clear();
|
||||
}
|
||||
}
|
||||
|
||||
export function combinedDisposable(disposables: Iterable<vscode.Disposable>): vscode.Disposable {
|
||||
return {
|
||||
dispose() {
|
||||
dispose(disposables);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user