diff options
author | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2023-04-18 09:57:56 +0900 |
---|---|---|
committer | git <svn-admin@ruby-lang.org> | 2023-04-19 06:56:21 +0000 |
commit | ef54a9aeb689164d99ccccc8cc92c588936fa321 (patch) | |
tree | d2cd1a25ac80df05b160306fc284d4d3d0e41e61 /lib/rubygems | |
parent | 644d7df021e17c70932da3173ec309ae1c8063d5 (diff) | |
download | ruby-ef54a9aeb689164d99ccccc8cc92c588936fa321.tar.gz |
[rubygems/rubygems] Introduce self.load_with_rubygems_config_hash
https://github.com/rubygems/rubygems/commit/9175b8cf2a
Diffstat (limited to 'lib/rubygems')
-rw-r--r-- | lib/rubygems/config_file.rb | 72 | ||||
-rw-r--r-- | lib/rubygems/gemcutter_utilities.rb | 4 |
2 files changed, 37 insertions, 39 deletions
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 |