diff --git a/extensions/git/package.json b/extensions/git/package.json index 6aab9275429..c0768e78a54 100644 --- a/extensions/git/package.json +++ b/extensions/git/package.json @@ -117,6 +117,18 @@ "category": "Git", "enablement": "!operationInProgress" }, + { + "command": "git.openWorktree", + "title": "%command.openWorktree%", + "category": "Git", + "enablement": "!operationInProgress" + }, + { + "command": "git.openWorktreeInNewWindow", + "title": "%command.openWorktreeInNewWindow%", + "category": "Git", + "enablement": "!operationInProgress" + }, { "command": "git.refresh", "title": "%command.refresh%", @@ -1035,6 +1047,14 @@ "command": "git.closeOtherRepositories", "when": "config.git.enabled && !git.missing && gitOpenRepositoryCount > 1" }, + { + "command": "git.openWorktree", + "when": "config.git.enabled && !git.missing && gitOpenRepositoryCount > 1" + }, + { + "command": "git.openWorktreeInNewWindow", + "when": "config.git.enabled && !git.missing && gitOpenRepositoryCount > 1" + }, { "command": "git.refresh", "when": "config.git.enabled && !git.missing && gitOpenRepositoryCount != 0" @@ -1667,6 +1687,16 @@ "command": "git.closeOtherRepositories", "group": "navigation@2", "when": "scmProvider == git && gitOpenRepositoryCount > 1" + }, + { + "command": "git.openWorktree", + "group": "worktree@1", + "when": "scmProvider == git && gitOpenRepositoryCount > 1" + }, + { + "command": "git.openWorktreeInNewWindow", + "group": "worktree@2", + "when": "scmProvider == git && gitOpenRepositoryCount > 1" } ], "scm/resourceGroup/context": [ @@ -2575,6 +2605,16 @@ } ], "git.worktrees": [ + { + "when": "scmProviderContext == worktree", + "command": "git.openWorktree", + "group": "openWorktrees@1" + }, + { + "when": "scmProviderContext == worktree", + "command": "git.openWorktreeInNewWindow", + "group": "openWorktrees@2" + }, { "when": "scmProviderContext == repository", "command": "git.createWorktree", diff --git a/extensions/git/package.nls.json b/extensions/git/package.nls.json index 2f27e793f62..07204a1dd34 100644 --- a/extensions/git/package.nls.json +++ b/extensions/git/package.nls.json @@ -10,6 +10,8 @@ "command.reopenClosedRepositories": "Reopen Closed Repositories...", "command.close": "Close Repository", "command.closeOtherRepositories": "Close Other Repositories", + "command.openWorktree": "Open Worktree in Current Window", + "command.openWorktreeInNewWindow": "Open Worktree in New Window", "command.refresh": "Refresh", "command.openChange": "Open Changes", "command.openAllChanges": "Open All Changes", diff --git a/extensions/git/src/commands.ts b/extensions/git/src/commands.ts index 1b95a5c9007..7d0790d6e83 100644 --- a/extensions/git/src/commands.ts +++ b/extensions/git/src/commands.ts @@ -3481,6 +3481,27 @@ export class CommandCenter { } } + @command('git.openWorktree', { repository: true }) + async openWorktreeInCurrentWindow(repository: Repository, ...args: SourceControl[]): Promise { + // If multiple repositories are selected, no action is taken + if (args.length > 0) { + return; + } + + const uri = Uri.file(repository.root); + await commands.executeCommand('vscode.openFolder', uri, { forceReuseWindow: true }); + } + + @command('git.openWorktreeInNewWindow', { repository: true }) + async openWorktreeInNewWindow(repository: Repository, ...args: SourceControl[]): Promise { + // If multiple repositories are selected, no action is taken + if (args.length > 0) { + return; + } + + const uri = Uri.file(repository.root); + await commands.executeCommand('vscode.openFolder', uri, { forceNewWindow: true }); + } @command('git.graph.deleteTag', { repository: true }) async deleteTag2(repository: Repository, historyItem?: SourceControlHistoryItem, historyItemRefId?: string): Promise {