vscode 扩展:使用新的分支名称调用 git.branch 并避免 inputBox

Vei*_*off 0 git vscode-extensions

我正在尝试编写一个小助手扩展来简化功能分支的创建。我已经有了最近活动的工作项目的视图和一个用于从特定项目创建功能分支的按钮。名称的格式已经正确,但当功能已内置到 vscode 中时,我不想负责分支创建逻辑。

我的第一次尝试是简单地调用executeCommand并传递命令和请求的分支名称,如下所示:

vscode.commands.executeCommand("git.branch", branchName);
Run Code Online (Sandbox Code Playgroud)

遗憾的是,该branchName参数只是被忽略,文本输入的显示就像通过命令选项板执行命令时一样。简单的解决方案是简单地窃取借用分支创建逻辑或进行 cli 调用,但我很顽固,希望尽可能避免这样做。

我几乎无法在任何地方找到有关此主题的任何信息。

https://code.visualstudio.com/api/references/commands不涵盖 git 命令

https://code.visualstudio.com/api/extension-guides/command#command-uris涵盖了通过 uris 将参数传递给命令,但这对我来说也不起作用

我将不胜感激任何线索。

Mar*_*ark 5

您可以使用 git 扩展公开的 API 来避免打开输入框,请参阅git 扩展 api

Git 扩展公开了一个可由任何其他扩展访问的 API。

复制src/api/git.d.ts到您的扩展程序的源;

包含git.d.ts在您的扩展的编译中。

使用以下代码片段获取 API:

const gitExtension = vscode.extensions.getExtension('vscode.git').exports;
const git = gitExtension.getAPI(1);
Run Code Online (Sandbox Code Playgroud)

以上来自于@builtingit扩展描述的扩展描述。

所以你可以使用:

const branchName = 'test';

try {
  const extension = vscode.extensions.getExtension('vscode.git');

  if (extension !== undefined) {
    const gitExtension = extension.isActive ? extension.exports : await extension.activate();
    const gitAPI = gitExtension.getAPI(1);

    const activeEditorUri = vscode.window.activeTextEditor.document.uri;
    const wsFolderUri = vscode.workspace.getWorkspaceFolder(activeEditorUri).uri;

    const theRepository = gitAPI.getRepository(wsFolderUri);
    await theRepository.createBranch('test', true);
  }
} catch (error) {}  // log error
Run Code Online (Sandbox Code Playgroud)