Project

General

Profile

Bug #16391 ยป dlbdirbug.rb

Demonstration script - dbuck (Dave Buck), 12/02/2019 06:32 PM

 
# vim: ts=2 sw=2 et ai
#
# Version:
# ruby 2.6.5p114 (2019-10-01 revision 67812) [x64-mingw32]
#
# Summary: Dir globbing case sensitivity inconsistencies
#
# Details: directory globbing case sensitivity is os-dependent
# (https://ruby-doc.org/core-2.6.5/Dir.html, glob,
# "Case sensitivity depends on your system");
# On Windows 10, directory globbing is case insensitive,
# and may return glob matches that do
# not match the case of the query.
# Unfortunately, File.fnmatch seems to be case sensitive,
# so this is not a workaround.
#
# Expected:
# If Dir.pwd => 'C:/users/dave/Documents' (lower case for users)
# then Dir[Dir.pwd+'/*'] => ['C:/users/dave/Documents/...',...]
# (lower case for users), not [C:/Users/dave/Documents/...',...]
#
#
# Impact:
# Rails 6.0 Activeview implementation has an assumption that
# case is sensitive.
#
# Demonstration:
# The below script yields the following output. Note that
# Dir.pwd yields C:/users..., where a Dir glob of files in
# that directory is prefixed with C:/Users...

cd = Dir.pwd
puts "Dir.pwd => '#{cd}'"
cds = cd + '/*'
fm0 = Dir[cds][0]
puts "Dir['#{cds}'][0] => '#{fm0}'"
puts "Does the first matching entry match the base path of the query?"
m = fm0.start_with? cd
p m
# How about File.fnmatch?
m2 = File.fnmatch cds,fm0
puts "fnmatch: #{m2}"

#=> Dir.pwd => 'C:/users/dave/Documents/rails'
#=> Dir['C:/users/dave/Documents/rails/*'][0] => 'C:/Users/dave/Documents/rails/blog'
#=> Does the first matching entry match the base path of the query?
#=> false
#=> fnmatch: false
    (1-1/1)