From e39c18126bb896bf9a148caff7695711fef26ef6 Mon Sep 17 00:00:00 2001 From: Alex Ross <38270282+alexr00@users.noreply.github.com> Date: Mon, 7 Sep 2026 10:37:06 +0200 Subject: [PATCH] Don't show incorrect "cant find commit" error (especially in agents window) --- src/test/view/gitContentProvider.test.ts | 71 ++++++++++++++++++++++++ src/view/gitContentProvider.ts | 6 +- 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 src/test/view/gitContentProvider.test.ts diff --git a/src/test/view/gitContentProvider.test.ts b/src/test/view/gitContentProvider.test.ts new file mode 100644 index 0000000000..dfb5ac761b --- /dev/null +++ b/src/test/view/gitContentProvider.test.ts @@ -0,0 +1,71 @@ +/*--------------------------------------------------------------------------------------------- + * 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 { createSandbox, SinonSandbox, SinonStub } from 'sinon'; +import * as vscode from 'vscode'; +import { GitApiImpl } from '../../api/api1'; +import { toReviewUri } from '../../common/uri'; +import { CredentialStore } from '../../github/credentials'; +import { GitContentFileSystemProvider } from '../../view/gitContentProvider'; +import { MockRepository } from '../mocks/mockRepository'; + +describe('GitContentFileSystemProvider', function () { + let sandbox: SinonSandbox; + let provider: GitContentFileSystemProvider; + let showErrorMessage: SinonStub; + + beforeEach(function () { + sandbox = createSandbox(); + const gitApi = { + state: 'initialized', + repositories: [new MockRepository()], + } as unknown as GitApiImpl; + const credentialStore = { + isAnyAuthenticated: () => true, + } as unknown as CredentialStore; + provider = new GitContentFileSystemProvider(gitApi, credentialStore, () => []); + provider.registerTextDocumentContentFallback(async () => ''); + showErrorMessage = sandbox.stub(vscode.window, 'showErrorMessage').resolves(undefined); + }); + + afterEach(function () { + sandbox.restore(); + }); + + it('does not show an error for a repository from a previous workspace', async function () { + sandbox.stub(vscode.workspace, 'getWorkspaceFolder').returns(undefined); + + await provider.readFile(createReviewUri('/previous-workspace')); + + assert.strictEqual(showErrorMessage.called, false); + }); + + it('shows an error when the repository belongs to the current workspace', async function () { + const rootUri = vscode.Uri.file('/current-workspace'); + sandbox.stub(vscode.workspace, 'getWorkspaceFolder').returns({ + uri: rootUri, + name: 'current-workspace', + index: 0, + }); + + await provider.readFile(createReviewUri(rootUri.path)); + + assert.strictEqual(showErrorMessage.calledOnce, true); + }); +}); + +function createReviewUri(rootPath: string): vscode.Uri { + const rootUri = vscode.Uri.file(rootPath); + return toReviewUri( + vscode.Uri.joinPath(rootUri, 'file.ts'), + 'file.ts', + undefined, + 'commit', + false, + { base: true }, + rootUri, + ); +} diff --git a/src/view/gitContentProvider.ts b/src/view/gitContentProvider.ts index be99f25a92..24b028411e 100644 --- a/src/view/gitContentProvider.ts +++ b/src/view/gitContentProvider.ts @@ -66,7 +66,11 @@ export class GitContentFileSystemProvider extends RepositoryFileSystemProvider { const repository = await this.getRepositoryForFile(vscode.Uri.file(rootPath)); if (!repository) { - vscode.window.showErrorMessage(`We couldn't find an open repository for ${commit} locally.`); + if (vscode.workspace.getWorkspaceFolder(vscode.Uri.file(rootPath))) { + vscode.window.showErrorMessage(`We couldn't find an open repository for ${commit} locally.`); + } else { + Logger.debug(`Skipping content for commit ${commit} because ${rootPath} is no longer in the workspace.`, GitContentFileSystemProvider.ID); + } return new TextEncoder().encode(''); }