Bug #10700
closedOn case-sensitive filesystem on OS X, Dir.glob("*.TXT") matches case-insensitively
Description
My Mac has the disk reformatted so that it is case-sensitive (HFS+):
$ touch foo.txt foo.TXT FOO.txt FOO.TXT
$ ls -li foo.* FOO.*
286444732 -rw-r--r-- 1 asari staff 0 Jan 6 08:00 FOO.TXT
286444731 -rw-r--r-- 1 asari staff 0 Jan 6 08:00 FOO.txt
286444729 -rw-r--r-- 1 asari staff 0 Jan 6 08:00 foo.TXT
286444728 -rw-r--r-- 1 asari staff 0 Jan 6 08:00 foo.txt
You notice that they are all different files.
In Ruby 2.1.5, Dir.glob("*.TxT") returns an empty array, but in 2.2.0, all of these files are returned:
$ rvm 2.1.5 do ruby -v -e 'p Dir.glob("*.TxT")'
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin14.0]
[]
$ rvm 2.2.0 do ruby -v -e 'p Dir.glob("*.TxT")'
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin13]
["FOO.TXT", "FOO.txt", "foo.TXT", "foo.txt"]
This is unexpected and incorrect. This does not happen on Linux.
Updated by enebo (Thomas Enebo) almost 10 years ago
I just told @arsarih some of the horrific details of an environment I worked where they had case-insensitity built into a forked SVN client on a case sensitive filesystem. When people do not expect this behavior it leads to really confusing situations. The most obvious one is a winner is picked (in my example SVN but in this case by Ruby), like FOO.TXT, but that is the not file the user thinks is being loaded, like foo.txt.
Updated by nobu (Nobuyoshi Nakada) almost 10 years ago
- Category set to platform/darwin
- Status changed from Open to Feedback
- Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN to 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: REQUIRED
Updated by hasari (Hiro Asari) almost 10 years ago
Nobuyoshi Nakada wrote:
Can you try https://github.com/nobu/ruby/compare/Bug%2310700-OSX-case-folding ?
Confirmed that it works.
$ touch foo.txt foo.TXT FOO.txt FOO.TXT
$ ls -l foo* FOO*
-rw-r--r-- 1 asari staff 0 Jan 7 22:09 FOO.TXT
-rw-r--r-- 1 asari staff 0 Jan 7 22:09 FOO.txt
-rw-r--r-- 1 asari staff 0 Jan 7 22:09 foo.TXT
-rw-r--r-- 1 asari staff 0 Jan 7 22:09 foo.txt
$ ./ruby --disable-gems -v -e 'p Dir.glob("*.TxT")'
ruby 2.3.0dev (2015-01-07 trunk 49171) [x86_64-darwin13]
[]
Updated by nobu (Nobuyoshi Nakada) almost 10 years ago
- Status changed from Feedback to Closed
- % Done changed from 0 to 100
Applied in changeset r49178.
dir.c: OSX case-folding
- dir.c (glob_helper): match in case-folding only if the directory
resides on a case-insensitve file system, on OSX.
[ruby-core:67364] [Bug #10700]
Updated by naruse (Yui NARUSE) almost 10 years ago
- Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: REQUIRED to 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: DONE
ruby_2_2 r49296 merged revision(s) 49178.