Skip to content

Commit e733521

Browse files
Follow symlinks during file search (openai#4453)
I have read the CLA Document and I hereby sign the CLA Closes openai#4452 This fixes a usability issue where users with symlinked folders in their working directory couldn't search those files using the `@` file search feature. ## Rationale The "bug" was in the file search implementation in `codex-rs/file-search/src/lib.rs`. The `WalkBuilder` was using default settings which don't follow symlinks, causing two related issues: 1. Partial search results: The `@` search would find symlinked directories but couldn't find files inside them 2. Inconsistent behavior: Users expect symlinked folders to behave like regular folders in search results. ## Root cause The `ignore` crate's `WalkBuilder` defaults to `.follow_links(false)` [[source](https://github.com/BurntSushi/ripgrep/blob/9802945e6342ec284633924cb7d8d3ce67204995/crates/ignore/src/walk.rs#L532)], so when traversing the file system, it would: - Detect symlinked directories as directory entries - But not traverse into them to index their contents - The `get_file_path` function would then filter out actual directories, leaving only the symlinked folder itself as a result Fix: Added `.follow_links(true)` to the `WalkBuilder` configuration, making the file search follow symlinks and index their contents just like regular directories. This change maintains backward compatibility since symlink following is generally expected behavior for file search tools, and it aligns with how users expect the `@` search feature to work. Co-authored-by: Eric Traut <[email protected]>
1 parent 02e560b commit e733521

File tree

1 file changed

+2
-0
lines changed
  • codex-rs/file-search/src

1 file changed

+2
-0
lines changed

codex-rs/file-search/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,8 @@ pub fn run(
159159
.threads(num_walk_builder_threads)
160160
// Allow hidden entries.
161161
.hidden(false)
162+
// Follow symlinks to search their contents.
163+
.follow_links(true)
162164
// Don't require git to be present to apply to apply git-related ignore rules.
163165
.require_git(false);
164166
if !respect_gitignore {

0 commit comments

Comments
 (0)