diff --git a/src/extension.ts b/src/extension.ts index b199556..53c99d7 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,21 +1,41 @@ import * as vscode from 'vscode'; -import { GitExtension } from './git'; +import { GitExtension, Repository } from './git'; + +class UserConf { + domain: string = ""; + name: string = ""; + email:string = ""; + + valid: boolean = false; + + constructor() { + var conf = vscode.workspace.getConfiguration("gitcheck"); + const _domain = conf.get("domain"); + const _name = conf.get("name"); + const _email = conf.get("email"); + if (!(_domain && _name && _email)) { + console.log("Missing config params"); + this.valid = false; + } else { + this.domain = _domain; + this.name = _name; + this.email = _email; + this.valid = true; + } + } +} export async function activate() { - var conf = vscode.workspace.getConfiguration("gitcheck"); - const domain = conf.get("domain"); - const name = conf.get("name"); - const email = conf.get("email"); + const userConf = new UserConf(); + if (!userConf.valid) { + return; + } if (!vscode.workspace.workspaceFolders) { console.log("No opened workspace"); return; } - if (!(domain && name && email)) { - console.log("Missing config params"); - return; - } const gitExt = vscode.extensions.getExtension('vscode.git')!; const git = gitExt.exports.getAPI(1); @@ -25,16 +45,29 @@ export async function activate() { } const repository = await git.openRepository(vscode.workspace.workspaceFolders[0].uri); - if (!repository) { console.error("Cannot open git repository"); return; } - repository.state.remotes.forEach(async remote => { + let remotesLen:number = 0; + repository.state.onDidChange(() => { + if (remotesLen > 0) { + return; + } + remotesLen = repository.state.remotes.length; + + if (remotesLen > 0) { + gitCheck(repository, userConf); + } + }); +} + +function gitCheck(repo:Repository, conf:UserConf) { + repo.state.remotes.forEach(async remote => { const pushUrl = remote.pushUrl; - if (pushUrl && pushUrl.includes(domain)) { - var gitConfig = await repository.getConfigs(); + if (pushUrl && pushUrl.includes(conf.domain)) { + var gitConfig = await repo.getConfigs(); var gitName:string = ""; var gitEmail:string = ""; gitConfig = gitConfig.filter( elem => { @@ -44,8 +77,8 @@ export async function activate() { console.error("Missing user creds in git"); const option = await vscode.window.showErrorMessage("Missing user settings in git", "Overwrite"); if (option && option === "Overwrite") { - await repository.setConfig("user.name", name); - await repository.setConfig("user.email", email); + await repo.setConfig("user.name", conf.name); + await repo.setConfig("user.email", conf.email); } return; } @@ -63,12 +96,12 @@ export async function activate() { break; } }); - if (gitName !== name || gitEmail !== email) { + if (gitName !== conf.name || gitEmail !== conf.email) { console.error("Wrong user settings in git"); const option = await vscode.window.showErrorMessage("Wrong user settings in git", "Overwrite"); if (option && option === "Overwrite") { - await repository.setConfig("user.name", name); - await repository.setConfig("user.email", email); + await repo.setConfig("user.name", conf.name); + await repo.setConfig("user.email", conf.email); } } }