From 1cefe21d2a4829170a9cb91274bdfd414c952e7b Mon Sep 17 00:00:00 2001 From: "Anas H. Sulaiman" Date: Fri, 13 Jun 2025 14:57:03 -0400 Subject: [PATCH] reuse filtering service in `bfsFileSearch` (#1018) --- packages/core/src/utils/bfsFileSearch.test.ts | 5 ++++- packages/core/src/utils/bfsFileSearch.ts | 18 ++++-------------- packages/core/src/utils/memoryDiscovery.ts | 6 ++++-- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/packages/core/src/utils/bfsFileSearch.test.ts b/packages/core/src/utils/bfsFileSearch.test.ts index 679700ca..f313c427 100644 --- a/packages/core/src/utils/bfsFileSearch.test.ts +++ b/packages/core/src/utils/bfsFileSearch.test.ts @@ -9,6 +9,7 @@ import { vi, describe, it, expect, beforeEach } from 'vitest'; import * as fs from 'fs/promises'; import * as gitUtils from './gitUtils.js'; import { bfsFileSearch } from './bfsFileSearch.js'; +import { FileDiscoveryService } from '../services/fileDiscoveryService.js'; vi.mock('fs/promises'); vi.mock('./gitUtils.js'); @@ -136,9 +137,11 @@ describe('bfsFileSearch', () => { }); mockFs.readFile.mockResolvedValue('subdir2'); + const fileService = new FileDiscoveryService('/test'); + await fileService.initialize(); const result = await bfsFileSearch('/test', { fileName: 'file1.txt', - respectGitIgnore: true, + fileService, }); expect(result).toEqual(['/test/subdir1/file1.txt']); }); diff --git a/packages/core/src/utils/bfsFileSearch.ts b/packages/core/src/utils/bfsFileSearch.ts index 6b05526f..7cd33c03 100644 --- a/packages/core/src/utils/bfsFileSearch.ts +++ b/packages/core/src/utils/bfsFileSearch.ts @@ -4,11 +4,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { GitIgnoreParser, GitIgnoreFilter } from './gitIgnoreParser.js'; -import { isGitRepository } from './gitUtils.js'; import * as fs from 'fs/promises'; import * as path from 'path'; import { Dirent } from 'fs'; +import { FileDiscoveryService } from '../services/fileDiscoveryService.js'; // Simple console logger for now. // TODO: Integrate with a more robust server-side logger. @@ -22,8 +21,7 @@ interface BfsFileSearchOptions { ignoreDirs?: string[]; maxDirs?: number; debug?: boolean; - respectGitIgnore?: boolean; - projectRoot?: string; + fileService?: FileDiscoveryService; } /** @@ -42,21 +40,13 @@ export async function bfsFileSearch( ignoreDirs = [], maxDirs = Infinity, debug = false, - respectGitIgnore = true, - projectRoot = rootDir, + fileService, } = options; const foundFiles: string[] = []; const queue: string[] = [rootDir]; const visited = new Set(); let scannedDirCount = 0; - let gitIgnoreFilter: GitIgnoreFilter | null = null; - if (respectGitIgnore && isGitRepository(projectRoot)) { - const parser = new GitIgnoreParser(projectRoot); - await parser.initialize(); - gitIgnoreFilter = parser; - } - while (queue.length > 0 && scannedDirCount < maxDirs) { const currentDir = queue.shift()!; if (visited.has(currentDir)) { @@ -79,7 +69,7 @@ export async function bfsFileSearch( for (const entry of entries) { const fullPath = path.join(currentDir, entry.name); - if (gitIgnoreFilter?.isIgnored(fullPath)) { + if (fileService?.shouldIgnoreFile(fullPath)) { continue; } diff --git a/packages/core/src/utils/memoryDiscovery.ts b/packages/core/src/utils/memoryDiscovery.ts index 2180b7a3..66f7f5ac 100644 --- a/packages/core/src/utils/memoryDiscovery.ts +++ b/packages/core/src/utils/memoryDiscovery.ts @@ -13,6 +13,7 @@ import { GEMINI_CONFIG_DIR, getAllGeminiMdFilenames, } from '../tools/memoryTool.js'; +import { FileDiscoveryService } from '../services/fileDiscoveryService.js'; // Simple console logger, similar to the one previously in CLI's config.ts // TODO: Integrate with a more robust server-side logger if available/appropriate. @@ -178,12 +179,13 @@ async function getGeminiMdFilePathsInternal( } upwardPaths.forEach((p) => allPaths.add(p)); + const fileService = new FileDiscoveryService(projectRoot || resolvedCwd); + await fileService.initialize(); const downwardPaths = await bfsFileSearch(resolvedCwd, { fileName: geminiMdFilename, maxDirs: MAX_DIRECTORIES_TO_SCAN_FOR_MEMORY, debug: debugMode, - respectGitIgnore: true, - projectRoot: projectRoot || resolvedCwd, + fileService, }); downwardPaths.sort(); // Sort for consistent ordering, though hierarchy might be more complex if (debugMode && downwardPaths.length > 0)