Skip to content

Commit 6c20c48

Browse files
Copilotalexr00
andcommitted
Filter out stale WorkspaceFolderNodes in refreshAllQueryResults
When a worktree is removed, the corresponding folder manager is removed from RepositoriesManager, but the WorkspaceFolderNode for it was still kept in _children. Now refreshAllQueryResults checks if each folder node's manager is still present, disposes stale nodes, and fires a root-level tree data change to rebuild the tree. Co-authored-by: alexr00 <[email protected]>
1 parent d567cc4 commit 6c20c48

1 file changed

Lines changed: 15 additions & 1 deletion

File tree

src/view/prsTreeDataProvider.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,21 @@ export class PullRequestsTreeDataProvider extends Disposable implements vscode.T
380380
}
381381

382382
if (this._children[0] instanceof WorkspaceFolderNode) {
383-
(this._children as WorkspaceFolderNode[]).forEach(folderNode => this.refreshQueryResultsForFolder(folderNode));
383+
const currentManagers = new Set(this._reposManager.folderManagers);
384+
const before = this._children.length;
385+
const validChildren = (this._children as WorkspaceFolderNode[]).filter(folderNode => {
386+
if (currentManagers.has(folderNode.folderManager)) {
387+
return true;
388+
}
389+
folderNode.dispose();
390+
return false;
391+
});
392+
if (validChildren.length !== before) {
393+
this._children = validChildren;
394+
this._onDidChangeTreeData.fire();
395+
return;
396+
}
397+
validChildren.forEach(folderNode => this.refreshQueryResultsForFolder(folderNode));
384398
return;
385399
}
386400
this.refreshQueryResultsForFolder();

0 commit comments

Comments
 (0)