This commit is contained in:
Joao Moreno
2022-01-11 20:59:44 +01:00
parent 49d54c9d9a
commit 06e1a2d4e0
3 changed files with 26 additions and 30 deletions

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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);
}
};
}