mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-10 22:21:22 -07:00
fix(core) Path reader method readPathFromWorkspace does not respect git/gemini ignore config. (#10073)
Co-authored-by: Tommaso Sciortino <sciortino@gmail.com>
This commit is contained in:
@@ -20,7 +20,12 @@ const createMockConfig = (
|
||||
cwd: string,
|
||||
otherDirs: string[] = [],
|
||||
mockFileService?: FileDiscoveryService,
|
||||
fileFiltering: {
|
||||
respectGitIgnore?: boolean;
|
||||
respectGeminiIgnore?: boolean;
|
||||
} = {},
|
||||
): Config => {
|
||||
const { respectGitIgnore = true, respectGeminiIgnore = true } = fileFiltering;
|
||||
const workspace = new WorkspaceContext(cwd, otherDirs);
|
||||
const fileSystemService = new StandardFileSystemService();
|
||||
return {
|
||||
@@ -29,6 +34,8 @@ const createMockConfig = (
|
||||
getTargetDir: () => cwd,
|
||||
getFileSystemService: () => fileSystemService,
|
||||
getFileService: () => mockFileService,
|
||||
getFileFilteringRespectGitIgnore: () => respectGitIgnore,
|
||||
getFileFilteringRespectGeminiIgnore: () => respectGeminiIgnore,
|
||||
} as unknown as Config;
|
||||
};
|
||||
|
||||
@@ -333,6 +340,51 @@ describe('readPathFromWorkspace', () => {
|
||||
expect(resultText).not.toContain('invisible');
|
||||
expect(mockFileService.filterFiles).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should pass correct ignore flags to file service for a single file', async () => {
|
||||
mock({
|
||||
[CWD]: {
|
||||
'file.txt': 'content',
|
||||
},
|
||||
});
|
||||
const mockFileService = {
|
||||
filterFiles: vi.fn(() => []),
|
||||
} as unknown as FileDiscoveryService;
|
||||
const config = createMockConfig(CWD, [], mockFileService, {
|
||||
respectGitIgnore: false,
|
||||
respectGeminiIgnore: true,
|
||||
});
|
||||
await readPathFromWorkspace('file.txt', config);
|
||||
expect(mockFileService.filterFiles).toHaveBeenCalledWith(['file.txt'], {
|
||||
respectGitIgnore: false,
|
||||
respectGeminiIgnore: true,
|
||||
});
|
||||
});
|
||||
|
||||
it('should pass correct ignore flags to file service for a directory', async () => {
|
||||
mock({
|
||||
[CWD]: {
|
||||
'my-dir': {
|
||||
'file.txt': 'content',
|
||||
},
|
||||
},
|
||||
});
|
||||
const mockFileService = {
|
||||
filterFiles: vi.fn((files) => files),
|
||||
} as unknown as FileDiscoveryService;
|
||||
const config = createMockConfig(CWD, [], mockFileService, {
|
||||
respectGitIgnore: true,
|
||||
respectGeminiIgnore: false,
|
||||
});
|
||||
await readPathFromWorkspace('my-dir', config);
|
||||
expect(mockFileService.filterFiles).toHaveBeenCalledWith(
|
||||
[path.join('my-dir', 'file.txt')],
|
||||
{
|
||||
respectGitIgnore: true,
|
||||
respectGeminiIgnore: false,
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
it('should throw an error for an absolute path outside the workspace', async () => {
|
||||
|
||||
@@ -73,8 +73,8 @@ export async function readPathFromWorkspace(
|
||||
path.relative(config.getTargetDir(), p),
|
||||
);
|
||||
const filteredFiles = fileService.filterFiles(relativeFiles, {
|
||||
respectGitIgnore: true,
|
||||
respectGeminiIgnore: true,
|
||||
respectGitIgnore: config.getFileFilteringRespectGitIgnore(),
|
||||
respectGeminiIgnore: config.getFileFilteringRespectGeminiIgnore(),
|
||||
});
|
||||
const finalFiles = filteredFiles.map((p) =>
|
||||
path.resolve(config.getTargetDir(), p),
|
||||
@@ -98,8 +98,8 @@ export async function readPathFromWorkspace(
|
||||
// It's a single file, check if it's ignored.
|
||||
const relativePath = path.relative(config.getTargetDir(), absolutePath);
|
||||
const filtered = fileService.filterFiles([relativePath], {
|
||||
respectGitIgnore: true,
|
||||
respectGeminiIgnore: true,
|
||||
respectGitIgnore: config.getFileFilteringRespectGitIgnore(),
|
||||
respectGeminiIgnore: config.getFileFilteringRespectGeminiIgnore(),
|
||||
});
|
||||
|
||||
if (filtered.length === 0) {
|
||||
|
||||
Reference in New Issue
Block a user