diff --git a/package.json b/package.json index d96768b..5a21d3a 100644 --- a/package.json +++ b/package.json @@ -1611,6 +1611,11 @@ "command": "gitlens.showQuickFileHistory", "when": "gitlens:isTracked && view == gitlens.gitExplorer && viewItem == gitlens:stash-file", "group": "5_gitlens@1" + }, + { + "command": "gitlens.gitExplorer.refresh", + "when": "gitlens:enabled && view == gitlens.gitExplorer && viewItem != gitlens:commit-file && viewItem != gitlens:stash-file", + "group": "9_gitlens@1" } ] }, diff --git a/src/gitService.ts b/src/gitService.ts index 9252e07..c942ba9 100644 --- a/src/gitService.ts +++ b/src/gitService.ts @@ -64,7 +64,11 @@ export const GitRepoSearchBy = { Sha: 'sha' as GitRepoSearchBy }; -type RepoChangedReasons = 'stash' | 'unknown'; +export type RepoChangedReasons = 'stash' | 'unknown'; +export const RepoChangedReasons = { + Stash: 'stash' as RepoChangedReasons, + Unknown: 'unknown' as RepoChangedReasons +}; export class GitService extends Disposable { diff --git a/src/views/gitExplorer.ts b/src/views/gitExplorer.ts index 8975805..dbad12f 100644 --- a/src/views/gitExplorer.ts +++ b/src/views/gitExplorer.ts @@ -5,7 +5,7 @@ import { Commands, DiffWithPreviousCommandArgs, DiffWithWorkingCommandArgs, open import { UriComparer } from '../comparers'; import { CommandContext, setCommandContext } from '../constants'; import { CommitFileNode, CommitNode, ExplorerNode, HistoryNode, MessageNode, RepositoryNode, StashNode } from './explorerNodes'; -import { GitService, GitUri } from '../gitService'; +import { GitService, GitUri, RepoChangedReasons } from '../gitService'; export * from './explorerNodes'; @@ -45,6 +45,8 @@ export class GitExplorer implements TreeDataProvider { commands.registerCommand('gitlens.gitExplorer.openChangedFileRevisions', this.openChangedFileRevisions, this); commands.registerCommand('gitlens.gitExplorer.applyChanges', this.applyChanges, this); + context.subscriptions.push(this.git.onDidChangeRepo(this.onRepoChanged, this)); + const fn = Functions.debounce(this.onActiveEditorChanged, 500); context.subscriptions.push(window.onDidChangeActiveTextEditor(fn, this)); @@ -90,15 +92,26 @@ export class GitExplorer implements TreeDataProvider { private onActiveEditorChanged(editor: TextEditor | undefined) { if (this._view !== GitExplorerView.History) return; + const root = this.getRootNode(editor); if (root === this._root) return; - this.refresh(root); + this._root = root; + this.refresh(undefined, root); } - refresh(root?: ExplorerNode) { - this._root = root || this.getRootNode(); - this._onDidChangeTreeData.fire(); + private onRepoChanged(reasons: RepoChangedReasons[]) { + if (this._view !== GitExplorerView.Repository) return; + + this.refresh(); + } + + refresh(node?: ExplorerNode, root?: ExplorerNode) { + if (root === undefined && this._view === GitExplorerView.History) { + this._root = this.getRootNode(window.activeTextEditor); + } + + this._onDidChangeTreeData.fire(node); } switchTo(view: GitExplorerView) { @@ -107,7 +120,7 @@ export class GitExplorer implements TreeDataProvider { this._view = view; setCommandContext(CommandContext.GitExplorerView, this._view); - this._root = undefined; + this._root = this.getRootNode(window.activeTextEditor); this.refresh(); }