Inform user which directories are contributing to overloading the fuzzy file finder

This commit is contained in:
Pistos 2022-09-15 13:37:07 -05:00
parent 8a69715313
commit 43a7a2de36
2 changed files with 27 additions and 3 deletions

View File

@ -128,6 +128,7 @@ class FuzzyFileFinder
@files = []
@directories = {} # To detect link cycles
@dirs_with_many = []
rescan!
end
@ -222,9 +223,22 @@ class FuzzyFileFinder
if ! @directories[real_dir]
@directories[real_dir] = true
Dir.entries(directory.name).each do |entry|
Dir.entries(directory.name)
.tap { |_entries|
if _entries.length > ceiling/10
@dirs_with_many << [_entries.length, directory.name]
$diakonos.log "[#{self.class}] Many dir entries: #{_entries.length} in #{directory.name}"
end
}.each do |entry|
next if entry[0,1] == "."
raise TooManyEntries if files.length > ceiling
if files.length > ceiling
raise TooManyEntries.new(%{
Directories with many entries:
#{@dirs_with_many.map { |d| d.join("\t") }.join("\n")}
})
end
full = File.join(directory.name, entry)
next if ignore?(full)

View File

@ -12,7 +12,8 @@ RSpec.describe FuzzyFileFinder do
let(:finder) { described_class.new(params) }
let(:ceiling) { nil }
let(:directories) { ['spec/test-files'] }
let(:root_dir) { "spec/test-files" }
let(:directories) { [root_dir] }
let(:ignores) { [] }
let(:recursive) { nil }
@ -33,5 +34,14 @@ RSpec.describe FuzzyFileFinder do
]
end
end
context "when the ceiling is less than the number of entries searched" do
let(:ceiling) { 5 }
it "raises a TooManyEntries exception" do
expect { finder.find(input) }
.to raise_exception(FuzzyFileFinder::TooManyEntries, %r[14.*#{root_dir}])
end
end
end
end