From ef54a9aeb689164d99ccccc8cc92c588936fa321 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Tue, 18 Apr 2023 09:57:56 +0900 Subject: [rubygems/rubygems] Introduce self.load_with_rubygems_config_hash https://github.com/rubygems/rubygems/commit/9175b8cf2a --- lib/rubygems/config_file.rb | 72 ++++++++++++++++++------------------- lib/rubygems/gemcutter_utilities.rb | 4 +-- 2 files changed, 37 insertions(+), 39 deletions(-) (limited to 'lib') diff --git a/lib/rubygems/config_file.rb b/lib/rubygems/config_file.rb index 54b8842c6e..907d5d1199 100644 --- a/lib/rubygems/config_file.rb +++ b/lib/rubygems/config_file.rb @@ -342,21 +342,12 @@ if you believe they were disclosed to a third party. end def load_file(filename) - require "bundler/yaml_serializer" - yaml_errors = [ArgumentError] return {} unless filename && !filename.empty? && File.exist?(filename) begin - content = Bundler::YAMLSerializer.load(File.read(filename)) - if content.is_a? Hash - content = self.class.convert_rubygems_config_hash(content) - else - warn "Failed to load #{filename} because it doesn't contain valid YAML hash" - return {} - end - return content + return self.class.load_with_rubygems_config_hash(File.read(filename)) rescue *yaml_errors => e warn "Failed to load #{filename}, #{e}" rescue Errno::EACCES @@ -530,42 +521,51 @@ if you believe they were disclosed to a third party. Bundler::YAMLSerializer.dump(content) end - def self.convert_rubygems_config_hash(content) - content.transform_keys! do |k| - if k.match?(/\A:(.*)\Z/) - k[1..-1].to_sym - elsif k.include?("__") - if k.is_a?(Symbol) - k.to_s.gsub(/__/,".").gsub(%r{/\Z}, "").to_sym + def self.load_with_rubygems_config_hash(hash) + require "bundler/yaml_serializer" + + content = Bundler::YAMLSerializer.load(hash) + + if content.is_a? Hash + content.transform_keys! do |k| + if k.match?(/\A:(.*)\Z/) + k[1..-1].to_sym + elsif k.include?("__") + if k.is_a?(Symbol) + k.to_s.gsub(/__/,".").gsub(%r{/\Z}, "").to_sym + else + k.dup.gsub(/__/,".").gsub(%r{/\Z}, "") + end else - k.dup.gsub(/__/,".").gsub(%r{/\Z}, "") + k end - else - k end - end - content.transform_values! do |v| - if v.is_a?(String) - if v.match?(/\A:(.*)\Z/) - v[1..-1].to_sym - elsif v.match?(/\A[+-]?\d+\Z/) - v.to_i - elsif v.match?(/\Atrue|false\Z/) - v == "true" - elsif v.empty? + content.transform_values! do |v| + if v.is_a?(String) + if v.match?(/\A:(.*)\Z/) + v[1..-1].to_sym + elsif v.match?(/\A[+-]?\d+\Z/) + v.to_i + elsif v.match?(/\Atrue|false\Z/) + v == "true" + elsif v.empty? + nil + else + v + end + elsif v.is_a?(Hash) && v.empty? nil else v end - elsif v.is_a?(Hash) && v.empty? - nil - else - v end - end - content + content + else + warn "Failed to load #{filename} because it doesn't contain valid YAML hash" + {} + end end private diff --git a/lib/rubygems/gemcutter_utilities.rb b/lib/rubygems/gemcutter_utilities.rb index 5a1c16cbc1..15e61440e3 100644 --- a/lib/rubygems/gemcutter_utilities.rb +++ b/lib/rubygems/gemcutter_utilities.rb @@ -332,10 +332,8 @@ module Gem::GemcutterUtilities request.basic_auth email, password end - require "bundler/yaml_serializer" with_response response do |resp| - profile = Bundler::YAMLSerializer.load clean_text(resp.body) - Gem::ConfigFile.convert_rubygems_config_hash profile + Gem::ConfigFile.load_with_rubygems_config_hash(clean_text(resp.body)) end end -- cgit v1.2.3