Skip to content

Commit

Permalink
Don't return incorrect files when there's a file whose name matches a…
Browse files Browse the repository at this point in the history
… dir
  • Loading branch information
ghiculescu committed Dec 21, 2020
1 parent 573aaf0 commit 834e38c
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 7 deletions.
14 changes: 7 additions & 7 deletions lib/listen/record.rb
Expand Up @@ -59,13 +59,13 @@ def dir_entries(rel_path)

def _sub_tree(rel_path)
@tree.each_with_object({}) do |(path, meta), result|
next unless path.start_with?(rel_path)

if path == rel_path
result.merge!(meta)
else
sub_path = path.sub(%r{\A#{rel_path}/?}, '')
result[sub_path] = meta
parts = path.split(::File::SEPARATOR)
if parts.shift == rel_path
if parts.empty?
result.merge!(meta)
else
result[parts.join(::File::SEPARATOR)] = meta
end
end
end
end
Expand Down
23 changes: 23 additions & 0 deletions spec/lib/listen/record_spec.rb
Expand Up @@ -208,6 +208,29 @@ def record_tree(record)
end
end

context 'when there is a file with the same name as a dir' do
subject { record.dir_entries('cypress') }

before do
record.update_file('cypress.json', mtime: 1.1)
record.update_file('cypress/README.md', mtime: 1.2)
record.update_file('a/b/cypress/d', mtime: 1.3)
record.update_file('a/b/c/cypress', mtime: 1.3)
end
it { should eq('README.md' => { mtime: 1.2 }) }
end

context 'when there is a file with a similar name to a dir' do
subject { record.dir_entries('app') }

before do
record.update_file('appspec.yml', mtime: 1.1)
record.update_file('app/README.md', mtime: 1.2)
record.update_file('spec/app/foo', mtime: 1.3)
end
it { should eq('README.md' => { mtime: 1.2 }) }
end

context 'in subdir /path' do
subject { record.dir_entries('path') }

Expand Down

0 comments on commit 834e38c

Please sign in to comment.