From aff55ee5c81de6255f7921cbf0d849a37dec6f7d Mon Sep 17 00:00:00 2001 From: Eric Amodio Date: Wed, 9 Oct 2024 19:07:21 -0400 Subject: [PATCH] Avoids extra repo creation during discovery --- src/env/node/git/localGitProvider.ts | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/env/node/git/localGitProvider.ts b/src/env/node/git/localGitProvider.ts index 21c8037fee853..bd120688c5fe3 100644 --- a/src/env/node/git/localGitProvider.ts +++ b/src/env/node/git/localGitProvider.ts @@ -179,6 +179,7 @@ import type { GraphItemRefGroupContext, GraphTagContextValue, } from '../../../plus/webviews/graph/protocol'; +import { asRepoComparisonKey } from '../../../repositories'; import { countStringLength, filterMap } from '../../../system/array'; import { gate } from '../../../system/decorators/gate'; import { debug, log } from '../../../system/decorators/log'; @@ -721,6 +722,26 @@ export class LocalGitProvider implements GitProvider, Disposable { let rootPath; let canonicalRootPath; + function maybeAddRepo(this: LocalGitProvider, uri: Uri, folder: WorkspaceFolder | undefined, root: boolean) { + const comparisonId = asRepoComparisonKey(uri); + if (repositories.some(r => r.id === comparisonId)) { + Logger.log(scope, `found ${root ? 'root ' : ''}repository in '${uri.fsPath}'; skipping - duplicate`); + return; + } + + const repo = this.container.git.getRepository(uri); + if (repo != null) { + if (repo.closed && silent === false) { + repo.closed = false; + } + Logger.log(scope, `found ${root ? 'root ' : ''}repository in '${uri.fsPath}'; skipping - already open`); + return; + } + + Logger.log(scope, `found ${root ? 'root ' : ''}repository in '${uri.fsPath}'`); + repositories.push(...this.openRepository(folder, uri, root, undefined, silent)); + } + const uri = await this.findRepositoryUri(rootUri, true); if (uri != null) { rootPath = normalizePath(uri.fsPath); @@ -730,8 +751,7 @@ export class LocalGitProvider implements GitProvider, Disposable { canonicalRootPath = normalizePath(canonicalUri.fsPath); } - Logger.log(scope, `found root repository in '${uri.fsPath}'`); - repositories.push(...this.openRepository(folder, uri, true, undefined, silent)); + maybeAddRepo.call(this, uri, folder, true); } if (depth <= 0 || cancellation?.isCancellationRequested) return repositories; @@ -788,8 +808,7 @@ export class LocalGitProvider implements GitProvider, Disposable { const rp = await this.findRepositoryUri(Uri.file(p), true); if (rp == null) continue; - Logger.log(scope, `found repository in '${rp.fsPath}'`); - repositories.push(...this.openRepository(folder, rp, false, undefined, silent)); + maybeAddRepo.call(this, rp, folder, false); } return repositories;