From 2ae7367e8a42bfd26e44cdf3ecd5647024142e8b Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Wed, 18 Mar 2026 18:57:40 +0900 Subject: [PATCH] Revert "Use IgnoreDuplicateDirs to prevent duplicate directory traversal" This reverts commit 6f33df755ed8ace0fe078827ba12298af73c72cc. --- CHANGELOG.md | 1 - src/reader.go | 10 ++-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a00f450a..ed7df1fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,7 +27,6 @@ CHANGELOG - With the reduced per-entry cost, the cache now has broader coverage. - fish: Improved command history (CTRL-R) (#4703) (@bitraid) - Bug fixes - - `--walker=follow` no longer visits the same directory more than once. This avoids effectively infinite traversal when a symlink points outside the walker root (#4710) - Fixed AWK tokenizer not treating a new line character as whitespace - Fixed `--{accept,with}-nth` removing trailing whitespaces with a non-default `--delimiter` - Fixed OSC8 hyperlinks being mangled when the URL contains unicode characters (#4707) diff --git a/src/reader.go b/src/reader.go index 105cb093..76df4a5a 100644 --- a/src/reader.go +++ b/src/reader.go @@ -269,9 +269,7 @@ func trimPath(path string) string { func (r *Reader) readFiles(roots []string, opts walkerOpts, ignores []string) bool { conf := fastwalk.Config{ - // When opts.follow is true, symlink following and loop/duplicate - // detection is handled by IgnoreDuplicateDirs below. - Follow: false, + Follow: opts.follow, // Use forward slashes when running a Windows binary under WSL or MSYS ToSlash: fastwalk.DefaultToSlash(), Sort: fastwalk.SortFilesFirst, @@ -341,13 +339,9 @@ func (r *Reader) readFiles(roots []string, opts walkerOpts, ignores []string) bo } return nil } - var walkFn fs.WalkDirFunc = fn - if opts.follow { - walkFn = fastwalk.IgnoreDuplicateDirs(fn) - } noerr := true for _, root := range roots { - noerr = noerr && (fastwalk.Walk(&conf, root, walkFn) == nil) + noerr = noerr && (fastwalk.Walk(&conf, root, fn) == nil) } return noerr }