Feature #5994
closedDir.glob without wildcards returns pattern, not filename
Description
This is Windows specific, I guess, as filename case doesn't matter there.
Ruby version is not specific to 1.9.3p0 (ruby 1.8.7p334 gives the same).
The script below produces results that seem inconsistent.
Using special characters (wildcards) in the glob pattern returns the
actual filename on disk but a plain pattern (no wildcards) returns the
pattern itself. This means I have to use another method for producing
a file with the same name or else override the users case-style
preference (which is not my intention).
daz
#======================
puts 'ruby %sp%d (%s) [%s]' % [RUBY_VERSION, RUBY_PATCHLEVEL, RUBY_RELEASE_DATE, RUBY_PLATFORM]
# ruby 1.9.3p0 (2011-10-30) [i386-mingw32]
Dir.chdir ENV['TEMP']
TMPDIR = Time.now.strftime('%Y%m%d_%H%M%S_delete')
Dir.mkdir(TMPDIR)
Dir.chdir(TMPDIR)
TMPFN = 'Foo'
File.open(TMPFN, 'w') {}
#----------------------------------------------
p Dir.glob('*') #=> ["Foo"] ok
p Dir.glob('f?O') #=> ["Foo"] ok
# But a glob without special characters returns
# the glob pattern instead of the filename
p Dir.glob('foO') #=> ["foO"] not wanted
p Dir['foO'] #=> ["foO"] same as above
p Dir.glob('foO', File::FNM_CASEFOLD)
# casefold ignored, as docs say
#----------------------------------------------
File.delete(TMPFN)
Dir.delete(File.join('..', TMPDIR))
#+++++
# Same incorrect results from:
# ruby 1.8.7p334 (2011-02-18) [i386-mingw32]
Updated by daz (Dave B) almost 13 years ago
This *nix behaviour would be fine, for me.
# ruby 1.8.7p302 (2010-08-16) [i486-linux]
#-----------------------------------------------------
p Dir.glob('*') #=> ["Foo"] ok
p Dir.glob('f?O') #=> [] ok
p Dir.glob('foO') #=> [] ok
p Dir.glob('foO', File::FNM_CASEFOLD) #=> ["Foo"] ok
#-----------------------------------------------------
( Couldn't find an ENV['TEMP']
.. used ENV['HOME']
)
daz
Updated by nobu (Nobuyoshi Nakada) almost 13 years ago
- Category set to core
- Status changed from Open to Feedback
- Target version set to 2.0.0
Dave B wrote:
p Dir.glob('foO') #=> ["foO"] not wanted
What do you want, an empty array same as case-sensitive systems?
Updated by daz (Dave B) almost 13 years ago
Hi Nobu,
I expected:
p Dir.glob('foO') #=> ["Foo"]
The current behaviour would be difficult to justify.
The doc string says ...
"Returns the filenames found by expanding pattern ..."
There is no filename "foO"; it exists only as a glob pattern.
Instead of answering the question "Are there files which match this
pattern", it has answered an artificial question "What glob pattern
did I use to search for files"; I already knew the answer to that. ;)
Background:
I'm doing a Windows System Restore from Linux and the registry databases
are not things I want to make subtle changes to.
WINDIR = '/media/XYSRES/WINDOWS'
CONFIG = File.join( WINDIR, 'system32', 'config' )
Dir.chdir CONFIG
hives = %w{ system software sam security default }
# Can't do this ...
p HIVES_NO = hives.map {|vn| Dir[vn][0] }
#=> ["system", "software", "sam", "security", "default"]
# Have to do this, instead ...
p HIVES_OK = Dir['*'].delete_if {|fn| !hives.include?(fn.downcase)}
#=> ["default", "SAM", "SECURITY", "software", "system"]
Cheers,
daz
Updated by ko1 (Koichi Sasada) about 12 years ago
- Status changed from Feedback to Assigned
- Assignee set to nobu (Nobuyoshi Nakada)
nobu, could you reply to it?
Updated by nobu (Nobuyoshi Nakada) about 12 years ago
- Tracker changed from Bug to Feature
Updated by ko1 (Koichi Sasada) almost 12 years ago
- Target version changed from 2.0.0 to 2.1.0
ping -> nobu
Updated by hsbt (Hiroshi SHIBATA) almost 11 years ago
- Target version changed from 2.1.0 to 2.2.0
Updated by nobu (Nobuyoshi Nakada) almost 11 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
Applied in changeset r44796.
dir.c: glob cases on case-insensitive system
- dir.c (glob_helper): return the filename with actual cases on
the filesystem if it is case-insensitive. [ruby-core:42469]
[Feature #5994]
Updated by nobu (Nobuyoshi Nakada) over 10 years ago
- Description updated (diff)
Updated by nobu (Nobuyoshi Nakada) over 8 years ago
- Related to Bug #10015: Performance regression in Dir#[] added