Bug #15649
closedDir.glob regression with braces and Windows drive letters
Description
I noticed that certain glob patterns involving braces and drive letters, which did work in Ruby 2.5.3, no longer work in Ruby 2.6.1.
Assume I have a directory C:\Projects
and my current directory is C:\Windows
. Using IRB I can observe the following results of Dir.glob
:
Patterns working in 2.6.1 and 2.5.3:
Dir['c:'] => ['c:']
Dir['c:/'] => ['c:/']
Dir['c:/projects'] => ['c:/Projects']
Patterns broken in 2.6.1 (but working in 2.5.3)
Dir['{c:}'] => ['Windows']
Dir['{c:/}'] => ['Windows/']
Dir['{c:/projects}'] => []
Some background:
I noticed this problem first in Rails, where the file modification watcher tries to glob a pattern like {c:/dir1/**/*.{rb},c:/dir2/**/*.{rb},c:/dir3/**/*.{rb}}
Due to the bug above, the code reloading feature of Rails is broken using Ruby 2.6.1 on Windows. (Because the pattern is always resolved to an empty array)
Rubies tested:
- ruby 2.5.3p105 (2018-10-18 revision 65156) [x64-mingw32]
- ruby 2.6.1p33 (2019-01-30 revision 66950) [x64-mingw32]
Files
Updated by cfis (Charlie Savage) over 5 years ago
Seeing the same here. Seems like its the braces that are broken on Windows in Ruby 2.6. Rails autoloading feature combines a number of glob patterns into a string for reason, instead of passing in an array.
Note I also submitted to Rails - https://github.com/rails/rails/issues/35609.
Updated by h.shirosaki (Hiroshi Shirosaki) over 5 years ago
- File 0001-dir.c-fix-Dir.glob-starts-with-brace.patch 0001-dir.c-fix-Dir.glob-starts-with-brace.patch added
- Backport changed from 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN to 2.4: DONTNEED, 2.5: DONTNEED, 2.6: REQUIRED
I created a patch for the bug.
Updated by Anonymous over 5 years ago
- Status changed from Open to Closed
Applied in changeset trunk|r67332.
dir.c: fix Dir.glob starts with brace
- dir.c (ruby_glob0): expand braces if a glob pattern starts with
brace.
[ruby-core:91728] [Bug #15649]
Updated by naruse (Yui NARUSE) over 5 years ago
- Backport changed from 2.4: DONTNEED, 2.5: DONTNEED, 2.6: REQUIRED to 2.4: DONTNEED, 2.5: DONTNEED, 2.6: DONE
ruby_2_6 r67353 merged revision(s) 67332.