зеркало из https://github.com/github/ruby.git
[rubygems/rubygems] fix s3 source configuration issue
https://github.com/rubygems/rubygems/commit/356726bd1a
This commit is contained in:
Родитель
bc1b4235fb
Коммит
6dc0086d20
|
@ -522,12 +522,12 @@ if you believe they were disclosed to a third party.
|
||||||
|
|
||||||
# Return the configuration information for +key+.
|
# Return the configuration information for +key+.
|
||||||
def [](key)
|
def [](key)
|
||||||
@hash[key.to_s]
|
@hash[key] || @hash[key.to_s]
|
||||||
end
|
end
|
||||||
|
|
||||||
# Set configuration option +key+ to +value+.
|
# Set configuration option +key+ to +value+.
|
||||||
def []=(key, value)
|
def []=(key, value)
|
||||||
@hash[key.to_s] = value
|
@hash[key] = value
|
||||||
end
|
end
|
||||||
|
|
||||||
def ==(other) # :nodoc:
|
def ==(other) # :nodoc:
|
||||||
|
@ -555,8 +555,13 @@ if you believe they were disclosed to a third party.
|
||||||
require_relative "yaml_serializer"
|
require_relative "yaml_serializer"
|
||||||
|
|
||||||
content = Gem::YAMLSerializer.load(yaml)
|
content = Gem::YAMLSerializer.load(yaml)
|
||||||
|
deep_transform_config_keys!(content)
|
||||||
|
end
|
||||||
|
|
||||||
content.transform_keys! do |k|
|
private
|
||||||
|
|
||||||
|
def self.deep_transform_config_keys!(config)
|
||||||
|
config.transform_keys! do |k|
|
||||||
if k.match?(/\A:(.*)\Z/)
|
if k.match?(/\A:(.*)\Z/)
|
||||||
k[1..-1].to_sym
|
k[1..-1].to_sym
|
||||||
elsif k.include?("__") || k.match?(%r{/\Z})
|
elsif k.include?("__") || k.match?(%r{/\Z})
|
||||||
|
@ -570,7 +575,7 @@ if you believe they were disclosed to a third party.
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
content.transform_values! do |v|
|
config.transform_values! do |v|
|
||||||
if v.is_a?(String)
|
if v.is_a?(String)
|
||||||
if v.match?(/\A:(.*)\Z/)
|
if v.match?(/\A:(.*)\Z/)
|
||||||
v[1..-1].to_sym
|
v[1..-1].to_sym
|
||||||
|
@ -583,18 +588,18 @@ if you believe they were disclosed to a third party.
|
||||||
else
|
else
|
||||||
v
|
v
|
||||||
end
|
end
|
||||||
elsif v.is_a?(Hash) && v.empty?
|
elsif v.empty?
|
||||||
nil
|
nil
|
||||||
|
elsif v.is_a?(Hash)
|
||||||
|
deep_transform_config_keys!(v)
|
||||||
else
|
else
|
||||||
v
|
v
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
content
|
config
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def set_config_file_name(args)
|
def set_config_file_name(args)
|
||||||
@config_file_name = ENV["GEMRC"]
|
@config_file_name = ENV["GEMRC"]
|
||||||
need_config_file_name = false
|
need_config_file_name = false
|
||||||
|
|
|
@ -575,6 +575,73 @@ if you believe they were disclosed to a third party.
|
||||||
assert_equal("bar", actual[:foo])
|
assert_equal("bar", actual[:foo])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_s3_source
|
||||||
|
yaml = <<~YAML
|
||||||
|
---
|
||||||
|
:sources:
|
||||||
|
- s3://bucket1/
|
||||||
|
- s3://bucket2/
|
||||||
|
- s3://bucket3/path_to_gems_dir/
|
||||||
|
- s3://bucket4/
|
||||||
|
- https://rubygems.org/
|
||||||
|
:s3_source:
|
||||||
|
:bucket1:
|
||||||
|
:provider: env
|
||||||
|
:bucket2:
|
||||||
|
:provider: instance_profile
|
||||||
|
:region: us-west-2
|
||||||
|
:bucket3:
|
||||||
|
:id: AOUEAOEU123123AOEUAO
|
||||||
|
:secret: aodnuhtdao/saeuhto+19283oaehu/asoeu+123h
|
||||||
|
:region: us-east-2
|
||||||
|
:bucket4:
|
||||||
|
:id: AOUEAOEU123123AOEUAO
|
||||||
|
:secret: aodnuhtdao/saeuhto+19283oaehu/asoeu+123h
|
||||||
|
:security_token: AQoDYXdzEJr
|
||||||
|
:region: us-west-1
|
||||||
|
YAML
|
||||||
|
|
||||||
|
File.open @temp_conf, "w" do |fp|
|
||||||
|
fp.puts yaml
|
||||||
|
end
|
||||||
|
util_config_file
|
||||||
|
|
||||||
|
assert_equal(["s3://bucket1/", "s3://bucket2/", "s3://bucket3/path_to_gems_dir/", "s3://bucket4/", "https://rubygems.org/"], @cfg.sources)
|
||||||
|
expected_config = {
|
||||||
|
bucket1: { provider: "env" },
|
||||||
|
bucket2: { provider: "instance_profile", region: "us-west-2" },
|
||||||
|
bucket3: { id: "AOUEAOEU123123AOEUAO", secret: "aodnuhtdao/saeuhto+19283oaehu/asoeu+123h", region: "us-east-2" },
|
||||||
|
bucket4: { id: "AOUEAOEU123123AOEUAO", secret: "aodnuhtdao/saeuhto+19283oaehu/asoeu+123h", security_token: "AQoDYXdzEJr", region: "us-west-1" },
|
||||||
|
}
|
||||||
|
assert_equal(expected_config, @cfg[:s3_source])
|
||||||
|
assert_equal(expected_config[:bucket1], @cfg[:s3_source][:bucket1])
|
||||||
|
assert_equal(expected_config[:bucket2], @cfg[:s3_source][:bucket2])
|
||||||
|
assert_equal(expected_config[:bucket3], @cfg[:s3_source][:bucket3])
|
||||||
|
assert_equal(expected_config[:bucket4], @cfg[:s3_source][:bucket4])
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_s3_source_with_config_without_lookahead
|
||||||
|
yaml = <<~YAML
|
||||||
|
:sources:
|
||||||
|
- s3://bucket1/
|
||||||
|
s3_source:
|
||||||
|
bucket1:
|
||||||
|
provider: env
|
||||||
|
YAML
|
||||||
|
|
||||||
|
File.open @temp_conf, "w" do |fp|
|
||||||
|
fp.puts yaml
|
||||||
|
end
|
||||||
|
util_config_file
|
||||||
|
|
||||||
|
assert_equal(["s3://bucket1/"], @cfg.sources)
|
||||||
|
expected_config = {
|
||||||
|
"bucket1" => { "provider" => "env" },
|
||||||
|
}
|
||||||
|
assert_equal(expected_config, @cfg[:s3_source])
|
||||||
|
assert_equal(expected_config[:bucket1], @cfg[:s3_source][:bucket1])
|
||||||
|
end
|
||||||
|
|
||||||
def util_config_file(args = @cfg_args)
|
def util_config_file(args = @cfg_args)
|
||||||
@cfg = Gem::ConfigFile.new args
|
@cfg = Gem::ConfigFile.new args
|
||||||
end
|
end
|
||||||
|
|
Загрузка…
Ссылка в новой задаче