|
3 | 3 | * Licensed under the MIT License. See License.txt in the project root for license information. |
4 | 4 | *--------------------------------------------------------------------------------------------*/ |
5 | 5 |
|
6 | | -import * as vscode from 'vscode'; |
| 6 | +import { Disposable, ExtensionContext, extensions } from 'vscode'; |
7 | 7 | import { GithubRemoteSourceProvider } from './remoteSourceProvider'; |
8 | 8 | import { GitExtension } from './typings/git'; |
9 | 9 | import { registerCommands } from './commands'; |
10 | 10 | import { GithubCredentialProviderManager } from './credentialProvider'; |
| 11 | +import { dispose, combinedDisposable } from './util'; |
11 | 12 |
|
12 | | -export async function activate(context: vscode.ExtensionContext) { |
13 | | - const gitExtension = vscode.extensions.getExtension<GitExtension>('vscode.git')!.exports; |
| 13 | +export function activate(context: ExtensionContext): void { |
| 14 | + const disposables = new Set<Disposable>(); |
| 15 | + context.subscriptions.push(combinedDisposable(disposables)); |
14 | 16 |
|
15 | | - try { |
16 | | - const gitAPI = gitExtension.getAPI(1); |
| 17 | + const init = () => { |
| 18 | + try { |
| 19 | + const gitAPI = gitExtension.getAPI(1); |
17 | 20 |
|
18 | | - context.subscriptions.push(...registerCommands(gitAPI)); |
19 | | - context.subscriptions.push(gitAPI.registerRemoteSourceProvider(new GithubRemoteSourceProvider(gitAPI))); |
20 | | - context.subscriptions.push(new GithubCredentialProviderManager(gitAPI)); |
21 | | - } catch (err) { |
22 | | - console.error('Could not initialize GitHub extension'); |
23 | | - console.warn(err); |
24 | | - } |
| 21 | + disposables.add(registerCommands(gitAPI)); |
| 22 | + disposables.add(gitAPI.registerRemoteSourceProvider(new GithubRemoteSourceProvider(gitAPI))); |
| 23 | + disposables.add(new GithubCredentialProviderManager(gitAPI)); |
| 24 | + } catch (err) { |
| 25 | + console.error('Could not initialize GitHub extension'); |
| 26 | + console.warn(err); |
| 27 | + } |
| 28 | + }; |
| 29 | + |
| 30 | + const onDidChangeGitExtensionEnablement = (enabled: boolean) => { |
| 31 | + if (!enabled) { |
| 32 | + dispose(disposables); |
| 33 | + disposables.clear(); |
| 34 | + } else { |
| 35 | + init(); |
| 36 | + } |
| 37 | + }; |
| 38 | + |
| 39 | + |
| 40 | + const gitExtension = extensions.getExtension<GitExtension>('vscode.git')!.exports; |
| 41 | + context.subscriptions.push(gitExtension.onDidChangeEnablement(onDidChangeGitExtensionEnablement)); |
| 42 | + onDidChangeGitExtensionEnablement(gitExtension.enabled); |
25 | 43 | } |
0 commit comments