From 75a4aa2052d5b34c1e6bb8085426e50ee627d89a Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Wed, 28 Feb 2024 12:49:03 +0900 Subject: [PATCH] Support file listing with IO.poepn style --- tool/rbinstall.rb | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb index 16d264adf732af..7905f34f090577 100755 --- a/tool/rbinstall.rb +++ b/tool/rbinstall.rb @@ -958,17 +958,20 @@ def ensure_writable_dir(dir) def load_gemspec(file, base = nil) file = File.realpath(file) code = File.read(file, encoding: "utf-8:-") + + files = [] + Dir.glob("**/*", File::FNM_DOTMATCH, base: base) do |n| + case File.basename(n); when ".", ".."; next; end + next if File.directory?(File.join(base, n)) + files << n.dump + end if base code.gsub!(/(?:`git[^\`]*`|%x\[git[^\]]*\])\.split\([^\)]*\)/m) do - files = [] - if base - Dir.glob("**/*", File::FNM_DOTMATCH, base: base) do |n| - case File.basename(n); when ".", ".."; next; end - next if File.directory?(File.join(base, n)) - files << n.dump - end - end "[" + files.join(", ") + "]" end + code.gsub!(/IO\.popen\(.*git.*?\)/) do + "[" + files.join(", ") + "].each" + end + spec = eval(code, binding, file) unless Gem::Specification === spec raise TypeError, "[#{file}] isn't a Gem::Specification (#{spec.class} instead)."