diff --git a/src/views/gitExplorer.ts b/src/views/gitExplorer.ts index dbad12f..46b2ce1 100644 --- a/src/views/gitExplorer.ts +++ b/src/views/gitExplorer.ts @@ -1,8 +1,9 @@ 'use strict'; -import { Functions } from '../system'; -import { commands, Event, EventEmitter, ExtensionContext, TextDocumentShowOptions, TextEditor, TreeDataProvider, TreeItem, Uri, window } from 'vscode'; +import { Functions, Objects } from '../system'; +import { commands, Event, EventEmitter, ExtensionContext, TextDocumentShowOptions, TextEditor, TreeDataProvider, TreeItem, Uri, window, workspace } from 'vscode'; import { Commands, DiffWithPreviousCommandArgs, DiffWithWorkingCommandArgs, openEditor, OpenFileInRemoteCommandArgs } from '../commands'; import { UriComparer } from '../comparers'; +import { ExtensionKey, IConfig } from '../configuration'; import { CommandContext, setCommandContext } from '../constants'; import { CommitFileNode, CommitNode, ExplorerNode, HistoryNode, MessageNode, RepositoryNode, StashNode } from './explorerNodes'; import { GitService, GitUri, RepoChangedReasons } from '../gitService'; @@ -24,6 +25,7 @@ export interface OpenFileRevisionCommandArgs { export class GitExplorer implements TreeDataProvider { + private _config: IConfig; private _root?: ExplorerNode; private _view: GitExplorerView = GitExplorerView.Repository; @@ -49,8 +51,11 @@ export class GitExplorer implements TreeDataProvider { const fn = Functions.debounce(this.onActiveEditorChanged, 500); context.subscriptions.push(window.onDidChangeActiveTextEditor(fn, this)); + context.subscriptions.push(workspace.onDidChangeConfiguration(this.onConfigurationChanged, this)); - this._view = this.git.config.gitExplorer.view; + this.onConfigurationChanged(); + + this._view = this._config.gitExplorer.view; setCommandContext(CommandContext.GitExplorerView, this._view); this._root = this.getRootNode(); } @@ -100,6 +105,19 @@ export class GitExplorer implements TreeDataProvider { this.refresh(undefined, root); } + private onConfigurationChanged() { + const cfg = workspace.getConfiguration().get(ExtensionKey)!; + + if (!Objects.areEquivalent(cfg.gitExplorer, this._config && this._config.gitExplorer)) { + setTimeout(() => { + this._root = this.getRootNode(window.activeTextEditor); + this.refresh(); + }, 1); + } + + this._config = cfg; + } + private onRepoChanged(reasons: RepoChangedReasons[]) { if (this._view !== GitExplorerView.Repository) return;