[Bug #19042] Fix Dir.glob brace with '/'

Dir.glob brace pattern with '/' after '**' does not match
paths in recursive expansion process.
We expand braces with '/' before expanding a recursive.

Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
This commit is contained in:
Hiroshi Shirosaki 2022-10-18 09:18:03 +09:00
Родитель 995bdd69de
Коммит 329d5424a4
2 изменённых файлов: 15 добавлений и 1 удалений

2
dir.c
Просмотреть файл

@ -2305,7 +2305,7 @@ glob_helper(
#endif
break;
case BRACE:
if (!recursive) {
if (!recursive || strchr(p->str, '/')) {
brace = 1;
}
break;

Просмотреть файл

@ -259,6 +259,20 @@ class TestDir < Test::Unit::TestCase
end
end
def test_glob_recursive_with_brace
Dir.chdir(@root) do
bug19042 = '[ruby-core:110220] [Bug #19042]'
%w"c/dir_a c/dir_b c/dir_b/dir".each do |d|
Dir.mkdir(d)
end
expected = %w"c/dir_a/file c/dir_b/dir/file"
expected.each do |f|
File.write(f, "")
end
assert_equal(expected, Dir.glob("**/{dir_a,dir_b/dir}/file"), bug19042)
end
end
def test_glob_order
Dir.chdir(@root) do
assert_equal(["#{@root}/a", "#{@root}/b"], Dir.glob("#{@root}/[ba]"))