diff --git a/src/webviews/home/homeWebview.ts b/src/webviews/home/homeWebview.ts index e164e3b330e83..504ae3b47e9af 100644 --- a/src/webviews/home/homeWebview.ts +++ b/src/webviews/home/homeWebview.ts @@ -25,7 +25,7 @@ import type { Issue } from '../../git/models/issue'; import type { GitPausedOperationStatus } from '../../git/models/pausedOperationStatus'; import type { PullRequest } from '../../git/models/pullRequest'; import { RemoteResourceType } from '../../git/models/remoteResource'; -import type { Repository } from '../../git/models/repository'; +import type { Repository, RepositoryFileSystemChangeEvent } from '../../git/models/repository'; import { RepositoryChange, RepositoryChangeComparisonMode } from '../../git/models/repository'; import { uncommitted } from '../../git/models/revision'; import type { GitStatus } from '../../git/models/status'; @@ -141,6 +141,8 @@ export class HomeWebviewProvider implements WebviewProvider | undefined; private _etag?: number; + private _etagFileSystem?: number; + private _etagRepository?: number; private _etagSubscription?: number; private _pendingFocusAccount = false; @@ -396,6 +398,21 @@ export class HomeWebviewProvider implements WebviewProvider this.onOverviewRepoChanged('wip')), + repo.onDidChangeFileSystem(e => this.onOverviewWipChanged(e, repo)), repo.onDidChange(e => { if ( e.changed( @@ -895,26 +916,42 @@ export class HomeWebviewProvider implements WebviewProvider = new Map(); private async getBranchesData(repo: Repository, force = false) { - if (force || !this._repositoryBranches.has(repo.path)) { + if (force || !this._repositoryBranches.has(repo.path) || repo.etag !== this._etagRepository) { const worktrees = (await repo.git.worktrees()?.getWorktrees()) ?? []; const worktreesByBranch = groupWorktreesByBranch(worktrees, { includeDefault: true }); const [branchesResult] = await Promise.allSettled([ @@ -939,6 +976,7 @@ export class HomeWebviewProvider implements WebviewProvider