diff --git a/src/views/commitFileNode.ts b/src/views/commitFileNode.ts index 1eead62..2b5694d 100644 --- a/src/views/commitFileNode.ts +++ b/src/views/commitFileNode.ts @@ -1,5 +1,5 @@ 'use strict'; -import { Command, ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode'; +import { ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode'; import { Commands, DiffWithPreviousCommandArgs } from '../commands'; import { ExplorerNode, ResourceType } from './explorerNode'; import { GitCommit, GitService, GitUri, IGitStatusFile } from '../gitService'; @@ -7,18 +7,32 @@ import { GitCommit, GitService, GitUri, IGitStatusFile } from '../gitService'; export class CommitFileNode extends ExplorerNode { readonly resourceType: ResourceType = 'commit-file'; - command: Command; constructor(public status: IGitStatusFile, public commit: GitCommit, uri: GitUri, context: ExtensionContext, git: GitService) { super(uri, context, git); + } + + getChildren(): Promise { + return Promise.resolve([]); + } + + async getTreeItem(): Promise { + if (this.commit.type !== 'file') { + const log = await this.git.getLogForFile(this.commit.repoPath, this.status.fileName, this.commit.sha, { maxCount: 2 }); + if (log !== undefined) { + this.commit = log.commits.get(this.commit.sha) || this.commit; + } + } - this.command = { + const item = new TreeItem(`${GitUri.getFormattedPath(this.status.fileName)}`, TreeItemCollapsibleState.None); + item.contextValue = this.resourceType; + item.command = { title: 'Compare File with Previous', command: Commands.DiffWithPrevious, arguments: [ GitUri.fromFileStatus(this.status, this.commit.repoPath), { - commit: commit, + commit: this.commit, showOptions: { preserveFocus: true, preview: true @@ -26,16 +40,6 @@ export class CommitFileNode extends ExplorerNode { } as DiffWithPreviousCommandArgs ] }; - } - - getChildren(): Promise { - return Promise.resolve([]); - } - - getTreeItem(): TreeItem { - const item = new TreeItem(`${GitUri.getFormattedPath(this.status.fileName)}`, TreeItemCollapsibleState.None); - item.contextValue = this.resourceType; - item.command = this.command; return item; } } \ No newline at end of file diff --git a/src/views/commitNode.ts b/src/views/commitNode.ts index ed17d32..6511fe1 100644 --- a/src/views/commitNode.ts +++ b/src/views/commitNode.ts @@ -1,6 +1,6 @@ 'use strict'; import { Iterables } from '../system'; -import { Command, ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode'; +import { ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode'; import { CommitFileNode } from './commitFileNode'; import { ExplorerNode, ResourceType } from './explorerNode'; import { CommitFormatter, GitCommit, GitService, GitUri } from '../gitService'; @@ -8,25 +8,9 @@ import { CommitFormatter, GitCommit, GitService, GitUri } from '../gitService'; export class CommitNode extends ExplorerNode { readonly resourceType: ResourceType = 'commit'; - command: Command; constructor(public commit: GitCommit, uri: GitUri, context: ExtensionContext, git: GitService) { super(uri, context, git); - - // this.command = { - // title: 'Compare File with Previous', - // command: Commands.DiffWithPrevious, - // arguments: [ - // Uri.file(commit.uri.fsPath), - // { - // commit: commit, - // showOptions: { - // preserveFocus: true, - // preview: true - // } - // } as DiffWithPreviousCommandArgs - // ] - // }; } async getChildren(): Promise { @@ -48,7 +32,6 @@ export class CommitNode extends ExplorerNode { dark: this.context.asAbsolutePath('images/dark/icon-commit.svg'), light: this.context.asAbsolutePath('images/light/icon-commit.svg') }; - item.command = this.command; return item; } } \ No newline at end of file diff --git a/src/views/stashCommitNode.ts b/src/views/stashCommitNode.ts index 89b19f9..31e861a 100644 --- a/src/views/stashCommitNode.ts +++ b/src/views/stashCommitNode.ts @@ -1,5 +1,5 @@ 'use strict'; -import { Command, ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode'; +import { ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode'; import { CommitFileNode } from './commitFileNode'; import { ExplorerNode, ResourceType } from './explorerNode'; import { CommitFormatter, GitService, GitStashCommit, GitUri } from '../gitService'; @@ -7,25 +7,12 @@ import { CommitFormatter, GitService, GitStashCommit, GitUri } from '../gitServi export class StashCommitNode extends ExplorerNode { readonly resourceType: ResourceType = 'stash-commit'; - command: Command; constructor(public commit: GitStashCommit, uri: GitUri, context: ExtensionContext, git: GitService) { super(uri, context, git); - - // this.command = { - // title: 'Show Stash Details', - // command: Commands.ShowQuickCommitDetails, - // arguments: [ - // new GitUri(commit.uri, commit), - // { - // commit: commit, - // sha: commit.sha - // } as ShowQuickCommitDetailsCommandArgs - // ] - // }; } - getChildren(): Promise { + async getChildren(): Promise { return Promise.resolve((this.commit as GitStashCommit).fileStatuses.map(_ => new CommitFileNode(_, this.commit, this.uri, this.context, this.git))); } @@ -34,7 +21,17 @@ export class StashCommitNode extends ExplorerNode { const item = new TreeItem(label, TreeItemCollapsibleState.Collapsed); item.contextValue = this.resourceType; - item.command = this.command; + // item.command = { + // title: 'Show Stash Details', + // command: Commands.ShowQuickCommitDetails, + // arguments: [ + // new GitUri(commit.uri, commit), + // { + // commit: this.commit, + // sha: this.commit.sha + // } as ShowQuickCommitDetailsCommandArgs + // ] + // }; return item; } } \ No newline at end of file