Преглед на файлове

Defers command construction until later

Gets a properly constructed commit to improve performance of opening the diff
main
Eric Amodio преди 7 години
родител
ревизия
bc21272409
променени са 3 файла, в които са добавени 32 реда и са изтрити 48 реда
  1. +18
    -14
      src/views/commitFileNode.ts
  2. +1
    -18
      src/views/commitNode.ts
  3. +13
    -16
      src/views/stashCommitNode.ts

+ 18
- 14
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<ExplorerNode[]> {
return Promise.resolve([]);
}
async getTreeItem(): Promise<TreeItem> {
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<ExplorerNode[]> {
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;
}
}

+ 1
- 18
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<ExplorerNode[]> {
@ -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;
}
}

+ 13
- 16
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<CommitFileNode[]> {
async getChildren(): Promise<CommitFileNode[]> {
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;
}
}

Зареждане…
Отказ
Запис