From bcd83566a19b65a920e9c12ca89f77b03cfe311c Mon Sep 17 00:00:00 2001 From: Eric Amodio Date: Sun, 27 Aug 2017 04:10:02 -0400 Subject: [PATCH] Reworks ExplorerNode base class Adds TextExplorerNode for messages --- src/views/branchHistoryNode.ts | 8 ++++---- src/views/branchesNode.ts | 6 +++--- src/views/commitFileNode.ts | 4 ++-- src/views/commitNode.ts | 7 +++---- src/views/explorerNode.ts | 27 +++++++++++++++++++++++---- src/views/fileHistoryNode.ts | 8 ++++---- src/views/repositoryNode.ts | 4 ++-- src/views/stashCommitNode.ts | 4 ++-- src/views/stashNode.ts | 6 +++--- src/views/statusNode.ts | 6 +++--- 10 files changed, 49 insertions(+), 31 deletions(-) diff --git a/src/views/branchHistoryNode.ts b/src/views/branchHistoryNode.ts index 1900317..58f4aec 100644 --- a/src/views/branchHistoryNode.ts +++ b/src/views/branchHistoryNode.ts @@ -10,15 +10,15 @@ export class BranchHistoryNode extends ExplorerNode { readonly resourceType: ResourceType = 'branch-history'; - constructor(public readonly branch: GitBranch, uri: GitUri, context: ExtensionContext, git: GitService) { - super(uri, context, git); - } + constructor(public readonly branch: GitBranch, uri: GitUri, protected readonly context: ExtensionContext, protected readonly git: GitService) { + super(uri); + } async getChildren(): Promise { const log = await this.git.getLogForRepo(this.uri.repoPath!, this.branch.name); if (log === undefined) return []; - return [...Iterables.map(log.commits.values(), c => new CommitNode(c, this.context, this.git))]; + return [...Iterables.map(log.commits.values(), c => new CommitNode(c, this.git.config.gitExplorer.commitFormat, this.context, this.git))]; } getTreeItem(): TreeItem { diff --git a/src/views/branchesNode.ts b/src/views/branchesNode.ts index 8aa1bfc..4cc3e87 100644 --- a/src/views/branchesNode.ts +++ b/src/views/branchesNode.ts @@ -9,9 +9,9 @@ export class BranchesNode extends ExplorerNode { readonly resourceType: ResourceType = 'branches'; - constructor(uri: GitUri, context: ExtensionContext, git: GitService) { - super(uri, context, git); - } + constructor(uri: GitUri, protected readonly context: ExtensionContext, protected readonly git: GitService) { + super(uri); + } async getChildren(): Promise { const branches = await this.git.getBranches(this.uri.repoPath!); diff --git a/src/views/commitFileNode.ts b/src/views/commitFileNode.ts index 3db5060..ddfba5f 100644 --- a/src/views/commitFileNode.ts +++ b/src/views/commitFileNode.ts @@ -9,8 +9,8 @@ export class CommitFileNode extends ExplorerNode { readonly resourceType: ResourceType = 'commit-file'; - constructor(public readonly status: IGitStatusFile, public commit: GitCommit, private template: string, context: ExtensionContext, git: GitService) { - super(new GitUri(Uri.file(path.resolve(commit.repoPath, status.fileName)), { repoPath: commit.repoPath, fileName: status.fileName, sha: commit.sha }), context, git); + constructor(public readonly status: IGitStatusFile, public commit: GitCommit, private template: string, protected readonly context: ExtensionContext, protected readonly git: GitService) { + super(new GitUri(Uri.file(path.resolve(commit.repoPath, status.fileName)), { repoPath: commit.repoPath, fileName: status.fileName, sha: commit.sha })); } getChildren(): Promise { diff --git a/src/views/commitNode.ts b/src/views/commitNode.ts index d970c89..3069866 100644 --- a/src/views/commitNode.ts +++ b/src/views/commitNode.ts @@ -9,9 +9,8 @@ export class CommitNode extends ExplorerNode { readonly resourceType: ResourceType = 'commit'; - constructor(public readonly commit: GitCommit, context: ExtensionContext, git: GitService) { - super(new GitUri(commit.uri, commit), context, git); - this.commit = commit; + constructor(public readonly commit: GitCommit, private template: string, protected readonly context: ExtensionContext, protected readonly git: GitService) { + super(new GitUri(commit.uri, commit)); } async getChildren(): Promise { @@ -25,7 +24,7 @@ export class CommitNode extends ExplorerNode { } getTreeItem(): TreeItem { - const label = CommitFormatter.fromTemplate(this.git.config.gitExplorer.commitFormat, this.commit, this.git.config.defaultDateFormat); + const label = CommitFormatter.fromTemplate(this.template, this.commit, this.git.config.defaultDateFormat); const item = new TreeItem(label, TreeItemCollapsibleState.Collapsed); item.contextValue = this.resourceType; diff --git a/src/views/explorerNode.ts b/src/views/explorerNode.ts index 3ea1295..8a958f0 100644 --- a/src/views/explorerNode.ts +++ b/src/views/explorerNode.ts @@ -1,14 +1,14 @@ 'use strict'; -import { Command, Event, ExtensionContext, TreeItem } from 'vscode'; -import { GitService, GitUri } from '../gitService'; +import { Command, Event, TreeItem, TreeItemCollapsibleState } from 'vscode'; +import { GitUri } from '../gitService'; -export declare type ResourceType = 'status' | 'branches' | 'repository' | 'branch-history' | 'file-history' | 'stash-history' | 'commit' | 'stash-commit' | 'commit-file'; +export declare type ResourceType = 'text' | 'status' | 'branches' | 'repository' | 'branch-history' | 'file-history' | 'stash-history' | 'commit' | 'stash-commit' | 'commit-file'; export abstract class ExplorerNode { abstract readonly resourceType: ResourceType; - constructor(public readonly uri: GitUri, protected readonly context: ExtensionContext, protected readonly git: GitService) { } + constructor(public readonly uri: GitUri) { } abstract getChildren(): ExplorerNode[] | Promise; abstract getTreeItem(): TreeItem | Promise; @@ -20,4 +20,23 @@ export abstract class ExplorerNode { onDidChangeTreeData?: Event; refresh?(): void; +} + +export class TextExplorerNode extends ExplorerNode { + + readonly resourceType: ResourceType = 'text'; + + constructor(private text: string) { + super(new GitUri()); + } + + getChildren(): ExplorerNode[] | Promise { + return []; + } + + getTreeItem(): TreeItem | Promise { + const item = new TreeItem(this.text, TreeItemCollapsibleState.None); + item.contextValue = this.resourceType; + return item; + } } \ No newline at end of file diff --git a/src/views/fileHistoryNode.ts b/src/views/fileHistoryNode.ts index 40a74ba..6a163ab 100644 --- a/src/views/fileHistoryNode.ts +++ b/src/views/fileHistoryNode.ts @@ -2,7 +2,7 @@ import { Iterables } from '../system'; import { ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode'; import { CommitNode } from './commitNode'; -import { ExplorerNode, ResourceType } from './explorerNode'; +import { ExplorerNode, ResourceType, TextExplorerNode } from './explorerNode'; import { GitService, GitUri } from '../gitService'; export class FileHistoryNode extends ExplorerNode { @@ -10,15 +10,15 @@ export class FileHistoryNode extends ExplorerNode { static readonly rootType: ResourceType = 'file-history'; readonly resourceType: ResourceType = 'file-history'; - constructor(uri: GitUri, context: ExtensionContext, git: GitService) { - super(uri, context, git); + constructor(uri: GitUri, protected readonly context: ExtensionContext, protected readonly git: GitService) { + super(uri); } async getChildren(): Promise { const log = await this.git.getLogForFile(this.uri.repoPath, this.uri.fsPath, this.uri.sha); if (log === undefined) return []; - return [...Iterables.map(log.commits.values(), c => new CommitNode(c, this.context, this.git))]; + return [...Iterables.map(log.commits.values(), c => new CommitNode(c, this.git.config.gitExplorer.commitFormat, this.context, this.git))]; } getTreeItem(): TreeItem { diff --git a/src/views/repositoryNode.ts b/src/views/repositoryNode.ts index da39339..5d6cff5 100644 --- a/src/views/repositoryNode.ts +++ b/src/views/repositoryNode.ts @@ -11,8 +11,8 @@ export class RepositoryNode extends ExplorerNode { static readonly rootType: ResourceType = 'repository'; readonly resourceType: ResourceType = 'repository'; - constructor(uri: GitUri, context: ExtensionContext, git: GitService) { - super(uri, context, git); + constructor(uri: GitUri, protected readonly context: ExtensionContext, protected readonly git: GitService) { + super(uri); } async getChildren(): Promise { diff --git a/src/views/stashCommitNode.ts b/src/views/stashCommitNode.ts index 1db86f8..5b5655c 100644 --- a/src/views/stashCommitNode.ts +++ b/src/views/stashCommitNode.ts @@ -13,8 +13,8 @@ export class StashCommitNode extends ExplorerNode { return this._onDidChangeTreeData.event; } - constructor(public readonly commit: GitStashCommit, context: ExtensionContext, git: GitService) { - super(new GitUri(commit.uri, commit), context, git); + constructor(public readonly commit: GitStashCommit, protected readonly context: ExtensionContext, protected readonly git: GitService) { + super(new GitUri(commit.uri, commit)); } async getChildren(): Promise { diff --git a/src/views/stashNode.ts b/src/views/stashNode.ts index 4a9aac4..5c57170 100644 --- a/src/views/stashNode.ts +++ b/src/views/stashNode.ts @@ -1,7 +1,7 @@ 'use strict'; import { Iterables } from '../system'; import { ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode'; -import { ExplorerNode, ResourceType } from './explorerNode'; +import { ExplorerNode, ResourceType, TextExplorerNode } from './explorerNode'; import { GitService, GitUri } from '../gitService'; import { StashCommitNode } from './stashCommitNode'; @@ -10,8 +10,8 @@ export class StashNode extends ExplorerNode { static readonly rootType: ResourceType = 'stash-history'; readonly resourceType: ResourceType = 'stash-history'; - constructor(uri: GitUri, context: ExtensionContext, git: GitService) { - super(uri, context, git); + constructor(uri: GitUri, protected readonly context: ExtensionContext, protected readonly git: GitService) { + super(uri); } async getChildren(): Promise { diff --git a/src/views/statusNode.ts b/src/views/statusNode.ts index 27021d6..e614b87 100644 --- a/src/views/statusNode.ts +++ b/src/views/statusNode.ts @@ -8,9 +8,9 @@ export class StatusNode extends ExplorerNode { readonly resourceType: ResourceType = 'status'; - constructor(uri: GitUri, context: ExtensionContext, git: GitService) { - super(uri, context, git); - } + constructor(uri: GitUri, protected readonly context: ExtensionContext, protected readonly git: GitService) { + super(uri); + } async getChildren(): Promise { return [];