gitcommitfilter/src/extension.ts

60 lines
1.9 KiB
TypeScript

import * as vscode from 'vscode';
import { GitService } from './GitService';
import { GViewProvider } from './view.provider';
function getGitApi(){
const gitExtension = vscode.extensions.getExtension<'vscode.git'>('vscode.git');
if(gitExtension && gitExtension.isActive){
const api = (gitExtension.exports as any).getAPI(1);
return api.git.path;
}else{
throw new Error('Git extension is not active');
}
}
export async function activate(context: vscode.ExtensionContext) {
const gitPath = getGitApi();
if(!gitPath){
vscode.window.showErrorMessage('No Git avaliable');
return;
}
const logger = vscode.window.createOutputChannel('GitCommitFilter',{log: true});
const gitService = new GitService(gitPath,logger);
const viewProvider = new GViewProvider(context, gitService,logger);
const activityBarIcon = vscode.window.registerWebviewViewProvider(GViewProvider.viewType, viewProvider);
context.subscriptions.push(activityBarIcon);
}
export function deactivate() {}
// 实现TreeDataProvider接口
class CommitTreeDataProvider implements vscode.TreeDataProvider<vscode.TreeItem> {
private _onDidChangeTreeData: vscode.EventEmitter<vscode.TreeItem | undefined | void> = new vscode.EventEmitter<vscode.TreeItem | undefined | void>();
readonly onDidChangeTreeData: vscode.Event<vscode.TreeItem | undefined | void> = this._onDidChangeTreeData.event;
private gitService: GitService;
constructor(gitService: GitService) {
this.gitService = gitService;
}
refresh(): void {
this._onDidChangeTreeData.fire();
}
getTreeItem(element: vscode.TreeItem): vscode.TreeItem {
return element;
}
getChildren(element?: vscode.TreeItem): vscode.ProviderResult<vscode.TreeItem[]> {
if (element) {
return [];
}
}
}