mirror of
https://github.com/DeusData/codebase-memory-mcp.git
synced 2026-10-23 06:19:33 +08:00
fix(mcp): force grep filename prefix in scoped search_code
build_grep_cmd's POSIX scoped path uses xargs to pass indexed files to grep. When xargs supplies a single file, BSD/GNU grep omit the filename from output by default (only added with multiple files), yielding 'linenum:content' instead of the 'path:linenum:content' that collect_grep_matches requires — matches were silently discarded and search_code returned zero results. Add -H so grep always prefixes the filename regardless of file count. Harmless for the common multi-file case (output is unchanged), fixes the single-indexed-file edge case exposed by the search_code_multi_word test fixture.
This commit is contained in:
+2
-2
@@ -3013,10 +3013,10 @@ static void build_grep_cmd(char *cmd, size_t cmd_sz, bool use_regex, bool scoped
|
||||
const char *flag = use_regex ? "-E" : "-F";
|
||||
if (scoped) {
|
||||
if (file_pattern) {
|
||||
snprintf(cmd, cmd_sz, "xargs grep -n %s --include='%s' -f '%s' < '%s' 2>/dev/null",
|
||||
snprintf(cmd, cmd_sz, "xargs grep -Hn %s --include='%s' -f '%s' < '%s' 2>/dev/null",
|
||||
flag, file_pattern, tmpfile, filelist);
|
||||
} else {
|
||||
snprintf(cmd, cmd_sz, "xargs grep -n %s -f '%s' < '%s' 2>/dev/null", flag, tmpfile,
|
||||
snprintf(cmd, cmd_sz, "xargs grep -Hn %s -f '%s' < '%s' 2>/dev/null", flag, tmpfile,
|
||||
filelist);
|
||||
}
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user