Skip to content

Commit 4b01d01

Browse files
authored
Git - add git blame status bar item command (microsoft#234307)
1 parent b61c0f1 commit 4b01d01

File tree

2 files changed

+29
-7
lines changed

2 files changed

+29
-7
lines changed

extensions/git/src/blame.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { DecorationOptions, l10n, Position, Range, TextEditor, TextEditorChange, TextEditorDecorationType, TextEditorChangeKind, ThemeColor, Uri, window, workspace, EventEmitter, ConfigurationChangeEvent, StatusBarItem, StatusBarAlignment } from 'vscode';
6+
import { DecorationOptions, l10n, Position, Range, TextEditor, TextEditorChange, TextEditorDecorationType, TextEditorChangeKind, ThemeColor, Uri, window, workspace, EventEmitter, ConfigurationChangeEvent, StatusBarItem, StatusBarAlignment, Command } from 'vscode';
77
import { Model } from './model';
88
import { dispose, fromNow, IDisposable, pathEquals } from './util';
99
import { Repository } from './repository';
@@ -398,13 +398,17 @@ class GitBlameStatusBarItem {
398398
return;
399399
}
400400

401-
const statueBarItemText = blameInformation[0]
402-
? typeof blameInformation[0].blameInformation === 'string'
403-
? ` ${blameInformation[0].blameInformation}`
404-
: ` ${blameInformation[0].blameInformation.authorName ?? ''} (${fromNow(blameInformation[0].blameInformation.date ?? new Date(), true, true)})`
405-
: '';
401+
if (typeof blameInformation[0].blameInformation === 'string') {
402+
this._statusBarItem.text = `$(git-commit) ${blameInformation[0].blameInformation}`;
403+
} else {
404+
this._statusBarItem.text = `$(git-commit) ${blameInformation[0].blameInformation.authorName ?? ''} (${fromNow(blameInformation[0].blameInformation.date ?? new Date(), true, true)})`;
405+
this._statusBarItem.command = {
406+
title: l10n.t('View Commit'),
407+
command: 'git.statusBar.viewCommit',
408+
arguments: [textEditor.document.uri, blameInformation[0].blameInformation.id]
409+
} satisfies Command;
410+
}
406411

407-
this._statusBarItem.text = `$(git-commit)${statueBarItemText}`;
408412
this._statusBarItem.show();
409413
}
410414

extensions/git/src/commands.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4307,6 +4307,24 @@ export class CommandCenter {
43074307
env.clipboard.writeText(historyItem.message);
43084308
}
43094309

4310+
@command('git.statusBar.viewCommit', { repository: true })
4311+
async viewStatusBarCommit(repository: Repository, historyItemId: string): Promise<void> {
4312+
if (!repository || !historyItemId) {
4313+
return;
4314+
}
4315+
4316+
const commit = await repository.getCommit(historyItemId);
4317+
const title = `${historyItemId.substring(0, 8)} - ${commit.message}`;
4318+
const historyItemParentId = commit.parents.length > 0 ? commit.parents[0] : `${historyItemId}^`;
4319+
4320+
const multiDiffSourceUri = toGitUri(Uri.file(repository.root), `${historyItemParentId}..${historyItemId}`, { scheme: 'git-commit', });
4321+
4322+
const changes = await repository.diffBetween(historyItemParentId, historyItemId);
4323+
const resources = changes.map(c => toMultiFileDiffEditorUris(c, historyItemParentId, historyItemId));
4324+
4325+
await commands.executeCommand('_workbench.openMultiDiffEditor', { multiDiffSourceUri, title, resources });
4326+
}
4327+
43104328
private createCommand(id: string, key: string, method: Function, options: ScmCommandOptions): (...args: any[]) => any {
43114329
const result = (...args: any[]) => {
43124330
let result: Promise<any>;

0 commit comments

Comments
 (0)