mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-30 23:14:32 -07:00
# Fix: Inconsistent Case-Sensitivity in GrepTool (#26235)
Co-authored-by: gemini-cli[bot] <gemini-cli[bot]@users.noreply.github.com>
This commit is contained in:
@@ -314,6 +314,34 @@ describe('GrepTool', () => {
|
||||
);
|
||||
}, 30000);
|
||||
|
||||
it('should pass -i flag to system grep for case-insensitivity', async () => {
|
||||
vi.mocked(execStreaming).mockImplementationOnce(() =>
|
||||
createLineGenerator(['fileA.txt:1:hello world']),
|
||||
);
|
||||
|
||||
const params: GrepToolParams = { pattern: 'HELLO' };
|
||||
const invocation = grepTool.build(params) as unknown as {
|
||||
isCommandAvailable: (command: string) => Promise<boolean>;
|
||||
execute: (options: ExecuteOptions) => Promise<ToolResult>;
|
||||
};
|
||||
// Force system grep strategy by mocking isCommandAvailable and ensuring git grep is not used
|
||||
invocation.isCommandAvailable = vi.fn(async (command: string) => {
|
||||
if (command === 'git') return false;
|
||||
if (command === 'grep') return true;
|
||||
return false;
|
||||
});
|
||||
|
||||
await invocation.execute({ abortSignal });
|
||||
|
||||
expect(execStreaming).toHaveBeenCalledWith(
|
||||
'grep',
|
||||
expect.arrayContaining(['-i']),
|
||||
expect.objectContaining({
|
||||
cwd: expect.any(String),
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
it('should throw an error if params are invalid', async () => {
|
||||
const params = { dir_path: '.' } as unknown as GrepToolParams; // Invalid: pattern missing
|
||||
expect(() => grepTool.build(params)).toThrow(
|
||||
|
||||
@@ -465,7 +465,7 @@ class GrepToolInvocation extends BaseToolInvocation<
|
||||
const grepAvailable = await this.isCommandAvailable('grep');
|
||||
if (grepAvailable) {
|
||||
strategyUsed = 'system grep';
|
||||
const grepArgs = ['-r', '-n', '-H', '-E', '-I'];
|
||||
const grepArgs = ['-r', '-n', '-H', '-E', '-I', '-i'];
|
||||
// Extract directory names from exclusion patterns for grep --exclude-dir
|
||||
const globExcludes = this.fileExclusions.getGlobExcludes();
|
||||
const commonExcludes = globExcludes
|
||||
|
||||
Reference in New Issue
Block a user