Search code examples
visual-studio-codevscode-extensions

Unable to write to commit message inputBox


So I have the below code, which has been working fine for several months, but at some point it stopped working, and I simply can't figure out why it isn't working anymore.

I did some debugging and for some reason the repository is undefined.

import * as vscode from 'vscode';
import { Repository } from './git';

export function activate(context: vscode.ExtensionContext) {
    context.subscriptions.push(vscode.commands.registerCommand("my_extension.my_command",
        (repository: Repository) => {
            repository.inputBox.value = "commit message goes here";
        }));
}

Solution

  • Apparently if you have more than one repository open, my original code worked just fine, but if you only had one repository open, then repository was undefined and I had to use the GetRepo function to get the repository.

    So my final code ended up looking like this:

    import * as vscode from 'vscode';
    import { Repository } from './git';
    
    export function activate(context: vscode.ExtensionContext) {
        context.subscriptions.push(vscode.commands.registerCommand("my_extension.my_command",
            (repository: Repository) => {
                repository = GetRepo(repository);
    
                repository.inputBox.value = "commit message goes here";
            }, { repository: true }));
    }
    
    function GetRepo(repository: Repository | undefined): Repository {
        if (repository === undefined) {
            let gitExtension = vscode.extensions.getExtension<GitExtension>('vscode.git').exports;
            let api = gitExtension.getAPI(1);
            repository = api.repositories[0];
        }
    
        return repository;
    }