From 7fbee675f00d403f3347fc40d4864d6427f2c093 Mon Sep 17 00:00:00 2001 From: Eric Amodio Date: Sun, 25 Jun 2017 23:29:54 -0400 Subject: [PATCH] Spits branch and status nodes into separate files Removes status node for now --- src/views/branchHistoryNode.ts | 29 ++++++++++++ src/views/branchesNode.ts | 28 ++++++++++++ src/views/explorerNodes.ts | 5 +- src/views/repositoryNode.ts | 83 ++-------------------------------- src/views/statusNode.ts | 34 ++++++++++++++ 5 files changed, 100 insertions(+), 79 deletions(-) create mode 100644 src/views/branchHistoryNode.ts create mode 100644 src/views/branchesNode.ts create mode 100644 src/views/statusNode.ts diff --git a/src/views/branchHistoryNode.ts b/src/views/branchHistoryNode.ts new file mode 100644 index 0000000..02924e1 --- /dev/null +++ b/src/views/branchHistoryNode.ts @@ -0,0 +1,29 @@ +'use strict'; +import { Iterables } from '../system'; +import { ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode'; +import { CommitNode } from './commitNode'; +import { GlyphChars } from '../constants'; +import { ExplorerNode, ResourceType } from './explorerNode'; +import { GitBranch, GitService, GitUri } from '../gitService'; + +export class BranchHistoryNode extends ExplorerNode { + + readonly resourceType: ResourceType = 'branch-history'; + + constructor(public branch: GitBranch, uri: GitUri, context: ExtensionContext, git: GitService) { + super(uri, context, git); + } + + 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.uri, this.context, this.git))]; + } + + getTreeItem(): TreeItem { + const item = new TreeItem(`${this.branch.name}${this.branch.current ? ` ${GlyphChars.Dash} current` : ''}`, TreeItemCollapsibleState.Collapsed); + item.contextValue = this.resourceType; + return item; + } + } diff --git a/src/views/branchesNode.ts b/src/views/branchesNode.ts new file mode 100644 index 0000000..8aa1bfc --- /dev/null +++ b/src/views/branchesNode.ts @@ -0,0 +1,28 @@ +'use strict'; +import { Iterables } from '../system'; +import { ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode'; +import { BranchHistoryNode } from './branchHistoryNode'; +import { ExplorerNode, ResourceType } from './explorerNode'; +import { GitService, GitUri } from '../gitService'; + +export class BranchesNode extends ExplorerNode { + + readonly resourceType: ResourceType = 'branches'; + + constructor(uri: GitUri, context: ExtensionContext, git: GitService) { + super(uri, context, git); + } + + async getChildren(): Promise { + const branches = await this.git.getBranches(this.uri.repoPath!); + if (branches === undefined) return []; + + return [...Iterables.filterMap(branches.sort(_ => _.current ? 0 : 1), b => b.remote ? undefined : new BranchHistoryNode(b, this.uri, this.context, this.git))]; + } + + getTreeItem(): TreeItem { + const item = new TreeItem(`Branches`, TreeItemCollapsibleState.Collapsed); + item.contextValue = this.resourceType; + return item; + } + } diff --git a/src/views/explorerNodes.ts b/src/views/explorerNodes.ts index 49a3806..e715c08 100644 --- a/src/views/explorerNodes.ts +++ b/src/views/explorerNodes.ts @@ -1,9 +1,12 @@ 'use strict'; export * from './explorerNode'; +export * from './branchesNode'; +export * from './branchHistoryNode'; export * from './commitFileNode'; export * from './commitNode'; export * from './fileHistoryNode'; export * from './repositoryNode'; export * from './stashCommitNode'; -export * from './stashNode'; \ No newline at end of file +export * from './stashNode'; +export * from './statusNode'; \ No newline at end of file diff --git a/src/views/repositoryNode.ts b/src/views/repositoryNode.ts index 62f4d9b..da39339 100644 --- a/src/views/repositoryNode.ts +++ b/src/views/repositoryNode.ts @@ -1,10 +1,10 @@ 'use strict'; -import { Iterables, Strings } from '../system'; import { ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode'; -import { CommitNode } from './commitNode'; +import { BranchesNode } from './branchesNode'; import { GlyphChars } from '../constants'; import { ExplorerNode, ResourceType } from './explorerNode'; -import { GitBranch, GitService, GitUri } from '../gitService'; +import { GitService, GitUri } from '../gitService'; +// import { StatusNode } from './statusNode'; export class RepositoryNode extends ExplorerNode { @@ -17,7 +17,7 @@ export class RepositoryNode extends ExplorerNode { async getChildren(): Promise { return [ - new StatusNode(this.uri, this.context, this.git), + // new StatusNode(this.uri, this.context, this.git), new BranchesNode(this.uri, this.context, this.git) ]; } @@ -27,77 +27,4 @@ export class RepositoryNode extends ExplorerNode { item.contextValue = this.resourceType; return item; } -} - -export class BranchesNode extends ExplorerNode { - - readonly resourceType: ResourceType = 'branches'; - - constructor(uri: GitUri, context: ExtensionContext, git: GitService) { - super(uri, context, git); - } - - async getChildren(): Promise { - const branches = await this.git.getBranches(this.uri.repoPath!); - if (branches === undefined) return []; - - return [...Iterables.filterMap(branches.sort(_ => _.current ? 0 : 1), b => b.remote ? undefined : new BranchHistoryNode(b, this.uri, this.context, this.git))]; - } - - getTreeItem(): TreeItem { - const item = new TreeItem(`Branches`, TreeItemCollapsibleState.Collapsed); - item.contextValue = this.resourceType; - return item; - } -} - -export class BranchHistoryNode extends ExplorerNode { - - readonly resourceType: ResourceType = 'branch-history'; - - constructor(public branch: GitBranch, uri: GitUri, context: ExtensionContext, git: GitService) { - super(uri, context, git); - } - - 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.uri, this.context, this.git))]; - } - - getTreeItem(): TreeItem { - const item = new TreeItem(`${this.branch.name}${this.branch.current ? ` ${GlyphChars.Dash} current` : ''}`, TreeItemCollapsibleState.Collapsed); - item.contextValue = this.resourceType; - return item; - } -} - -export class StatusNode extends ExplorerNode { - - readonly resourceType: ResourceType = 'status'; - - constructor(uri: GitUri, context: ExtensionContext, git: GitService) { - super(uri, context, git); - } - - async getChildren(): Promise { - return []; - // const status = await this.git.getStatusForRepo(this.uri.repoPath!); - // if (status === undefined) return []; - - // return [...Iterables.map(status.files, b => new CommitFile(b, this.uri, this.context, this.git))]; - } - - async getTreeItem(): Promise { - const status = await this.git.getStatusForRepo(this.uri.repoPath!); - let suffix = ''; - if (status !== undefined) { - suffix = ` ${GlyphChars.Dash} ${GlyphChars.ArrowUp} ${status.state.ahead} ${GlyphChars.ArrowDown} ${status.state.behind} ${Strings.pad(GlyphChars.Dot, 1, 1)} ${status.branch} ${GlyphChars.ArrowLeftRight} ${status.upstream}`; - } - - const item = new TreeItem(`Status${suffix}`, TreeItemCollapsibleState.Collapsed); - item.contextValue = this.resourceType; - return item; - } -} +} \ No newline at end of file diff --git a/src/views/statusNode.ts b/src/views/statusNode.ts new file mode 100644 index 0000000..27021d6 --- /dev/null +++ b/src/views/statusNode.ts @@ -0,0 +1,34 @@ +import { Strings } from '../system'; +import { ExtensionContext, TreeItem, TreeItemCollapsibleState } from 'vscode'; +import { GlyphChars } from '../constants'; +import { ExplorerNode, ResourceType } from './explorerNode'; +import { GitService, GitUri } from '../gitService'; + +export class StatusNode extends ExplorerNode { + + readonly resourceType: ResourceType = 'status'; + + constructor(uri: GitUri, context: ExtensionContext, git: GitService) { + super(uri, context, git); + } + + async getChildren(): Promise { + return []; + // const status = await this.git.getStatusForRepo(this.uri.repoPath!); + // if (status === undefined) return []; + + // return [...Iterables.map(status.files, b => new CommitFile(b, this.uri, this.context, this.git))]; + } + + async getTreeItem(): Promise { + const status = await this.git.getStatusForRepo(this.uri.repoPath!); + let suffix = ''; + if (status !== undefined) { + suffix = ` ${GlyphChars.Dash} ${GlyphChars.ArrowUp} ${status.state.ahead} ${GlyphChars.ArrowDown} ${status.state.behind} ${Strings.pad(GlyphChars.Dot, 1, 1)} ${status.branch} ${GlyphChars.ArrowLeftRight} ${status.upstream}`; + } + + const item = new TreeItem(`Status${suffix}`, TreeItemCollapsibleState.Collapsed); + item.contextValue = this.resourceType; + return item; + } +} \ No newline at end of file