summaryrefslogtreecommitdiff
path: root/lib/bundler/settings.rb
diff options
context:
space:
mode:
authorJosh Nichols <josh.nichols@gusto.com>2023-08-28 20:02:08 -0400
committergit <svn-admin@ruby-lang.org>2023-08-30 00:36:38 +0000
commit6a876a61d7495ff64805cdda2756c5fc38846ef8 (patch)
tree29af3dbf12b8deb4d747cc3d92752d5d1beb3b91 /lib/bundler/settings.rb
parent27024004fa9804631c6f21e2022bb2dd690e8c5c (diff)
[rubygems/rubygems] (Further) Improve Bundler::Settings#[] performance and memory usage
I previously identified and improved this method over in https://github.com/rubygems/rubygems/pull/6884 but while reviewing another memory_profiler profile, I realized another gain we can eek out. This method keeps comes up in part because `configs` is allocating a new Hash every time. My last change took advantage of that by using `map!` on it. `configs` is called quite often, including in this `[]` method, so there's a benefit to memoizing it. Back in `[]`, logically we are trying to find the first Hash in `configs` that has a value for the given key. Currently, we end up `map` and `compact` to just get that value. Instead, we can use a loop over `configs`, and break when we find the value for the key. https://github.com/rubygems/rubygems/commit/b913cfc87b
Diffstat (limited to 'lib/bundler/settings.rb')
-rw-r--r--lib/bundler/settings.rb13
1 files changed, 8 insertions, 5 deletions
diff --git a/lib/bundler/settings.rb b/lib/bundler/settings.rb
index f5999481a8..e31f207d90 100644
--- a/lib/bundler/settings.rb
+++ b/lib/bundler/settings.rb
@@ -102,10 +102,13 @@ module Bundler
def [](name)
key = key_for(name)
- values = configs.values
- values.map! {|config| config[key] }
- values.compact!
- value = values.first
+ value = nil
+ configs.each do |_, config|
+ if config[key]
+ value = config[key]
+ break
+ end
+ end
converted_value(value, name)
end
@@ -316,7 +319,7 @@ module Bundler
private
def configs
- {
+ @configs ||= {
:temporary => @temporary,
:local => @local_config,
:env => @env_config,