From 9786509ede64ef6c542ea73a8d9f9184668d0ab1 Mon Sep 17 00:00:00 2001 From: Alex Ross Date: Thu, 25 Apr 2024 12:24:43 +0200 Subject: [PATCH] Comment error on submodule repository (Creating comment failed: Error: File has been deleted.) Fixes #5784 --- src/test/view/reviewCommentController.test.ts | 6 ++++-- src/view/reviewCommentController.ts | 6 +++++- src/view/reviewManager.ts | 5 +++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/test/view/reviewCommentController.test.ts b/src/test/view/reviewCommentController.test.ts index c336935049..09a1d07e1a 100644 --- a/src/test/view/reviewCommentController.test.ts +++ b/src/test/view/reviewCommentController.test.ts @@ -59,6 +59,7 @@ describe('ReviewCommentController', function () { let githubRepo: MockGitHubRepository; let reviewManager: ReviewManager; let reposManager: RepositoriesManager; + let gitApiImpl: GitApiImpl; beforeEach(async function () { sinon = createSandbox(); @@ -75,7 +76,7 @@ describe('ReviewCommentController', function () { const activePrViewCoordinator = new WebviewViewCoordinator(context); const createPrHelper = new CreatePullRequestHelper(); Resource.initialize(context); - const gitApiImpl = new GitApiImpl(); + gitApiImpl = new GitApiImpl(); manager = new FolderRepositoryManager(0, context, repository, telemetry, gitApiImpl, credentialStore); reposManager.insertFolderManager(manager); const tree = new PullRequestChangesTreeDataProvider(context, gitApiImpl, reposManager); @@ -169,7 +170,7 @@ describe('ReviewCommentController', function () { const localFileChanges = [createLocalFileChange(uri, fileName, repository.rootUri)]; const reviewModel = new ReviewModel(); reviewModel.localFileChanges = localFileChanges; - const reviewCommentController = new TestReviewCommentController(reviewManager, manager, repository, reviewModel); + const reviewCommentController = new TestReviewCommentController(reviewManager, manager, repository, reviewModel, gitApiImpl); sinon.stub(activePullRequest, 'validateDraftMode').returns(Promise.resolve(false)); sinon.stub(activePullRequest, 'getReviewThreads').returns( @@ -234,6 +235,7 @@ describe('ReviewCommentController', function () { manager, repository, reviewModel, + gitApiImpl ); const thread = createGHPRCommentThread('review-1.1', uri); diff --git a/src/view/reviewCommentController.ts b/src/view/reviewCommentController.ts index a4b9f304c7..18726cf454 100644 --- a/src/view/reviewCommentController.ts +++ b/src/view/reviewCommentController.ts @@ -7,6 +7,7 @@ import * as nodePath from 'path'; import { v4 as uuid } from 'uuid'; import * as vscode from 'vscode'; import { Repository } from '../api/api'; +import { GitApiImpl } from '../api/api1'; import { CommentHandler, registerCommentHandler, unregisterCommentHandler } from '../commentHandlerResolver'; import { DiffSide, IReviewThread, SubjectType } from '../common/comment'; import { getCommentingRanges } from '../common/commentingRanges'; @@ -22,6 +23,7 @@ import { PullRequestOverviewPanel } from '../github/pullRequestOverview'; import { CommentReactionHandler, createVSCodeCommentThreadForReviewThread, + getRepositoryForFile, isFileInRepo, threadRange, updateCommentReviewState, @@ -57,6 +59,7 @@ export class ReviewCommentController extends CommentControllerBase folderRepoManager: FolderRepositoryManager, private _repository: Repository, private _reviewModel: ReviewModel, + private _gitApi: GitApiImpl ) { super(folderRepoManager); this._context = this._folderRepoManager.context; @@ -443,7 +446,8 @@ export class ReviewCommentController extends CommentControllerBase } } - if (!isFileInRepo(this._repository, document.uri)) { + const bestRepoForFile = getRepositoryForFile(this._gitApi, document.uri); + if (bestRepoForFile?.rootUri.toString() !== this._repository.rootUri.toString()) { if (document.uri.scheme !== 'output') { Logger.debug('No commenting ranges: File is not in the current repository.', ReviewCommentController.ID); } diff --git a/src/view/reviewManager.ts b/src/view/reviewManager.ts index 4fe49f3060..b30f1e10ea 100644 --- a/src/view/reviewManager.ts +++ b/src/view/reviewManager.ts @@ -103,7 +103,7 @@ export class ReviewManager { private _showPullRequest: ShowPullRequest, private readonly _activePrViewCoordinator: WebviewViewCoordinator, private _createPullRequestHelper: CreatePullRequestHelper, - gitApi: GitApiImpl + private _gitApi: GitApiImpl ) { this._switchingToReviewMode = false; this._disposables = []; @@ -115,7 +115,7 @@ export class ReviewManager { this.registerListeners(); - if (gitApi.state === 'initialized') { + if (_gitApi.state === 'initialized') { this.updateState(true); } this.pollForStatusChange(); @@ -906,6 +906,7 @@ export class ReviewManager { this._folderRepoManager, this._repository, this._reviewModel, + this._gitApi ); await this._reviewCommentController.initialize();