From dd0a7a2a8b655892238d331c5ea7c14c84df374b Mon Sep 17 00:00:00 2001 From: Eiji <50960409+Eiji-Kudo@users.noreply.github.com> Date: Wed, 15 Jul 2026 14:42:35 +0900 Subject: [PATCH 1/4] Fix Files node parent in PR changes tree --- .../treeNodes/repositoryChangesNode.test.ts | 64 +++++++++++++++++++ src/view/treeNodes/repositoryChangesNode.ts | 2 +- 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 src/test/view/treeNodes/repositoryChangesNode.test.ts diff --git a/src/test/view/treeNodes/repositoryChangesNode.test.ts b/src/test/view/treeNodes/repositoryChangesNode.test.ts new file mode 100644 index 0000000000..d07a8d8c37 --- /dev/null +++ b/src/test/view/treeNodes/repositoryChangesNode.test.ts @@ -0,0 +1,64 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { default as assert } from 'assert'; +import * as vscode from 'vscode'; +import { BaseTreeNode, TreeNode } from '../../../view/treeNodes/treeNode'; +import { RepositoryChangesNode } from '../../../view/treeNodes/repositoryChangesNode'; + +function disposable(): vscode.Disposable { + return { dispose: () => { } }; +} + +describe('RepositoryChangesNode', function () { + // Verifies that VS Code can resolve the visible Files node through its rendered parent chain. + it('parents the Files node to the repository changes node', async function () { + const parent: BaseTreeNode = { + reveal: async () => { }, + refresh: () => { }, + children: undefined, + view: { + visible: true, + onDidChangeVisibility: () => disposable(), + } as unknown as vscode.TreeView, + }; + const pullRequestModel = { + title: 'Pull request title', + number: 1, + author: { avatarUrl: '' }, + remote: { owner: 'owner', repositoryName: 'repository' }, + item: { isRemoteHeadDeleted: false }, + hasChangesSinceLastReview: false, + showChangesSinceReview: false, + onDidChange: () => disposable(), + onDidChangeReviewThreads: () => disposable(), + onDidChangeFileViewedState: () => disposable(), + equals: () => true, + }; + const folderRepositoryManager = { + repository: {}, + context: {}, + activePullRequest: pullRequestModel, + isPullRequestAssociatedWithOpenRepository: () => true, + }; + const reviewModel = { + onDidChangeLocalFileChanges: () => disposable(), + }; + const node = new RepositoryChangesNode( + parent, + pullRequestModel as any, + folderRepositoryManager as any, + reviewModel as any, + { progress: Promise.resolve() } as any, + ); + + try { + const [filesNode] = await node.getChildren(); + assert.strictEqual(filesNode.getParent(), node); + } finally { + node.dispose(); + } + }); +}); diff --git a/src/view/treeNodes/repositoryChangesNode.ts b/src/view/treeNodes/repositoryChangesNode.ts index df232a6bd6..ff0ccb5cec 100644 --- a/src/view/treeNodes/repositoryChangesNode.ts +++ b/src/view/treeNodes/repositoryChangesNode.ts @@ -109,7 +109,7 @@ export class RepositoryChangesNode extends TreeNode implements vscode.TreeItem { await this._progress.progress; if (!this._filesCategoryNode || !this._commitsCategoryNode) { Logger.appendLine(`Creating file and commit nodes for PR #${this.pullRequestModel.number}`, PR_TREE); - this._filesCategoryNode = new FilesCategoryNode(this.parent, this._reviewModel, this.pullRequestModel); + this._filesCategoryNode = new FilesCategoryNode(this, this._reviewModel, this.pullRequestModel); this._commitsCategoryNode = new CommitsNode( this.parent, this._pullRequestManager, From 73973ebe96be3d50127b2aec593dd23c14d44c3b Mon Sep 17 00:00:00 2001 From: Eiji <50960409+Eiji-Kudo@users.noreply.github.com> Date: Wed, 15 Jul 2026 15:22:33 +0900 Subject: [PATCH 2/4] Fix Commits node parent in PR changes tree --- src/test/view/treeNodes/repositoryChangesNode.test.ts | 7 ++++--- src/view/treeNodes/repositoryChangesNode.ts | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/test/view/treeNodes/repositoryChangesNode.test.ts b/src/test/view/treeNodes/repositoryChangesNode.test.ts index d07a8d8c37..bf16fcc84b 100644 --- a/src/test/view/treeNodes/repositoryChangesNode.test.ts +++ b/src/test/view/treeNodes/repositoryChangesNode.test.ts @@ -13,8 +13,8 @@ function disposable(): vscode.Disposable { } describe('RepositoryChangesNode', function () { - // Verifies that VS Code can resolve the visible Files node through its rendered parent chain. - it('parents the Files node to the repository changes node', async function () { + // Verifies that VS Code can resolve the visible category nodes through their rendered parent chain. + it('parents the category nodes to the repository changes node', async function () { const parent: BaseTreeNode = { reveal: async () => { }, refresh: () => { }, @@ -55,8 +55,9 @@ describe('RepositoryChangesNode', function () { ); try { - const [filesNode] = await node.getChildren(); + const [filesNode, commitsNode] = await node.getChildren(); assert.strictEqual(filesNode.getParent(), node); + assert.strictEqual(commitsNode.getParent(), node); } finally { node.dispose(); } diff --git a/src/view/treeNodes/repositoryChangesNode.ts b/src/view/treeNodes/repositoryChangesNode.ts index ff0ccb5cec..3d3e440265 100644 --- a/src/view/treeNodes/repositoryChangesNode.ts +++ b/src/view/treeNodes/repositoryChangesNode.ts @@ -111,7 +111,7 @@ export class RepositoryChangesNode extends TreeNode implements vscode.TreeItem { Logger.appendLine(`Creating file and commit nodes for PR #${this.pullRequestModel.number}`, PR_TREE); this._filesCategoryNode = new FilesCategoryNode(this, this._reviewModel, this.pullRequestModel); this._commitsCategoryNode = new CommitsNode( - this.parent, + this, this._pullRequestManager, this.pullRequestModel, ); From 71362c22e310230908b4a477251f108ecd165f59 Mon Sep 17 00:00:00 2001 From: Eiji <50960409+Eiji-Kudo@users.noreply.github.com> Date: Wed, 15 Jul 2026 15:32:45 +0900 Subject: [PATCH 3/4] Dispose category nodes in parent-chain test --- src/test/view/treeNodes/repositoryChangesNode.test.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/test/view/treeNodes/repositoryChangesNode.test.ts b/src/test/view/treeNodes/repositoryChangesNode.test.ts index bf16fcc84b..820fa99235 100644 --- a/src/test/view/treeNodes/repositoryChangesNode.test.ts +++ b/src/test/view/treeNodes/repositoryChangesNode.test.ts @@ -53,12 +53,15 @@ describe('RepositoryChangesNode', function () { reviewModel as any, { progress: Promise.resolve() } as any, ); + let children: TreeNode[] = []; try { - const [filesNode, commitsNode] = await node.getChildren(); + children = await node.getChildren(); + const [filesNode, commitsNode] = children; assert.strictEqual(filesNode.getParent(), node); assert.strictEqual(commitsNode.getParent(), node); } finally { + children.forEach(child => child.dispose()); node.dispose(); } }); From dcf2b4bc8f55a40aab7a14bb1f81a80923eae0f3 Mon Sep 17 00:00:00 2001 From: Alex Ross <38270282+alexr00@users.noreply.github.com> Date: Thu, 16 Jul 2026 11:50:45 +0200 Subject: [PATCH 4/4] Attestation commit