merge revision(s) 329d5424a4: [Backport #19042]

[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>
	---
	 dir.c                 |  2 +-
	 test/ruby/test_dir.rb | 14 ++++++++++++++
	 2 files changed, 15 insertions(+), 1 deletion(-)
This commit is contained in:
nagachika 2022-10-23 19:14:08 +09:00
parent 941c888b04
commit ffa439fd29
3 changed files with 16 additions and 2 deletions

2
dir.c
View file

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

View file

@ -259,6 +259,20 @@ class TestDir < Test::Unit::TestCase
end end
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 def test_glob_order
Dir.chdir(@root) do Dir.chdir(@root) do
assert_equal(["#{@root}/a", "#{@root}/b"], Dir.glob("#{@root}/[ba]")) assert_equal(["#{@root}/a", "#{@root}/b"], Dir.glob("#{@root}/[ba]"))

View file

@ -11,7 +11,7 @@
# define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR # define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR
#define RUBY_VERSION_TEENY 3 #define RUBY_VERSION_TEENY 3
#define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR
#define RUBY_PATCHLEVEL 169 #define RUBY_PATCHLEVEL 170
#define RUBY_RELEASE_YEAR 2022 #define RUBY_RELEASE_YEAR 2022
#define RUBY_RELEASE_MONTH 10 #define RUBY_RELEASE_MONTH 10