diff --git a/extensions/git/package.json b/extensions/git/package.json index 0bf5d9afd34555564cb8fce7fb29a32237443c9f..92453166d8ab38f9e26845b152eba780642fa346 100644 --- a/extensions/git/package.json +++ b/extensions/git/package.json @@ -59,6 +59,11 @@ "dark": "resources/icons/dark/open-file.svg" } }, + { + "command": "git.openHEADFile", + "title": "%command.openHEADFile%", + "category": "Git" + }, { "command": "git.stage", "title": "%command.stage%", @@ -246,6 +251,10 @@ "command": "git.openFile", "when": "config.git.enabled && scmProvider == git && gitState == idle" }, + { + "command": "git.openHEADFile", + "when": "config.git.enabled && scmProvider == git && gitState == idle" + }, { "command": "git.openChange", "when": "config.git.enabled && scmProvider == git && gitState == idle" @@ -513,6 +522,11 @@ "when": "config.git.enabled && scmProvider == git && gitState == idle && scmResourceGroup == index", "group": "navigation" }, + { + "command": "git.openHEADFile", + "when": "config.git.enabled && scmProvider == git && gitState == idle && scmResourceGroup == index", + "group": "navigation" + }, { "command": "git.unstage", "when": "config.git.enabled && scmProvider == git && gitState == idle && scmResourceGroup == index", @@ -528,6 +542,11 @@ "when": "config.git.enabled && scmProvider == git && gitState == idle && scmResourceGroup == workingTree", "group": "navigation" }, + { + "command": "git.openHEADFile", + "when": "config.git.enabled && scmProvider == git && gitState == idle && scmResourceGroup == workingTree", + "group": "navigation" + }, { "command": "git.openFile", "when": "config.git.enabled && scmProvider == git && gitState == idle && scmResourceGroup == workingTree", diff --git a/extensions/git/package.nls.json b/extensions/git/package.nls.json index 199338a68e6cb180449ea24d2a66de495856e7e6..bc8bc381786fa65bc60fd765d7710dfb61af40c9 100644 --- a/extensions/git/package.nls.json +++ b/extensions/git/package.nls.json @@ -4,6 +4,7 @@ "command.refresh": "Refresh", "command.openChange": "Open Changes", "command.openFile": "Open File", + "command.openHEADFile": "Open File (HEAD)", "command.stage": "Stage Changes", "command.stageAll": "Stage All Changes", "command.stageSelectedRanges": "Stage Selected Ranges", diff --git a/extensions/git/src/commands.ts b/extensions/git/src/commands.ts index c1615041dd361cc5852d19db920bae10c1912a77..f71e3b723f082e1ebb809c595aea6d7a8b1552c8 100644 --- a/extensions/git/src/commands.ts +++ b/extensions/git/src/commands.ts @@ -313,6 +313,32 @@ export class CommandCenter { return await commands.executeCommand('vscode.open', uri, viewColumn); } + @command('git.openHEADFile') + async openHEADFile(arg?: Resource | Uri): Promise { + let resource: Resource | undefined = undefined; + + if (arg instanceof Resource) { + resource = arg; + } else if (arg instanceof Uri) { + resource = this.getSCMResource(arg); + } else { + resource = this.getSCMResource(); + } + + if (!resource) { + return; + } + + const HEAD = this.getLeftResource(resource); + + if (!HEAD) { + window.showWarningMessage(localize('HEAD not available', "HEAD version of '{0}' is not available.", path.basename(resource.resourceUri.fsPath))); + return; + } + + return await commands.executeCommand('vscode.open', HEAD); + } + @command('git.openChange') async openChange(arg?: Resource | Uri): Promise { let resource: Resource | undefined = undefined; @@ -328,7 +354,6 @@ export class CommandCenter { if (!resource) { return; } - return await this._openResource(resource); }