Cache result of include_in_build_config and inhibit_warnings

parent 9aa02e59
...@@ -8,6 +8,10 @@ To install release candidates run `[sudo] gem install cocoapods --pre` ...@@ -8,6 +8,10 @@ To install release candidates run `[sudo] gem install cocoapods --pre`
##### Enhancements ##### Enhancements
* Cache result of inhibit_warnings and include_in_build_config to speed up pod install.
[Dimitris Koutsogiorgas](https://github.com/dnkoutso)
[#5934](https://github.com/CocoaPods/CocoaPods/pull/5934)
* Improve performance of PathList.read_file_system * Improve performance of PathList.read_file_system
[Heath Borders](https://github.com/hborders) [Heath Borders](https://github.com/hborders)
[#5890](https://github.com/CocoaPods/CocoaPods/issues/5890) [#5890](https://github.com/CocoaPods/CocoaPods/issues/5890)
......
...@@ -47,6 +47,7 @@ module Pod ...@@ -47,6 +47,7 @@ module Pod
@file_accessors = [] @file_accessors = []
@resource_bundle_targets = [] @resource_bundle_targets = []
@dependent_targets = [] @dependent_targets = []
@build_config_cache = {}
end end
# @param [Hash{Array => PodTarget}] cache # @param [Hash{Array => PodTarget}] cache
...@@ -222,13 +223,20 @@ module Pod ...@@ -222,13 +223,20 @@ module Pod
# The name of the build configuration. # The name of the build configuration.
# #
def include_in_build_config?(target_definition, configuration_name) def include_in_build_config?(target_definition, configuration_name)
key = [target_definition.label, configuration_name]
if @build_config_cache.key?(key)
return @build_config_cache[key]
end
whitelists = target_definition_dependencies(target_definition).map do |dependency| whitelists = target_definition_dependencies(target_definition).map do |dependency|
target_definition.pod_whitelisted_for_configuration?(dependency.name, configuration_name) target_definition.pod_whitelisted_for_configuration?(dependency.name, configuration_name)
end.uniq end.uniq
if whitelists.empty? if whitelists.empty?
@build_config_cache[key] = true
return true return true
elsif whitelists.count == 1 elsif whitelists.count == 1
@build_config_cache[key] = whitelists.first
whitelists.first whitelists.first
else else
raise Informative, "The subspecs of `#{pod_name}` are linked to " \ raise Informative, "The subspecs of `#{pod_name}` are linked to " \
...@@ -243,13 +251,16 @@ module Pod ...@@ -243,13 +251,16 @@ module Pod
# @return [Bool] # @return [Bool]
# #
def inhibit_warnings? def inhibit_warnings?
return @inhibit_warnings if defined? @inhibit_warnings
whitelists = target_definitions.map do |target_definition| whitelists = target_definitions.map do |target_definition|
target_definition.inhibits_warnings_for_pod?(root_spec.name) target_definition.inhibits_warnings_for_pod?(root_spec.name)
end.uniq end.uniq
if whitelists.empty? if whitelists.empty?
@inhibit_warnings = false
return false return false
elsif whitelists.count == 1 elsif whitelists.count == 1
@inhibit_warnings = whitelists.first
whitelists.first whitelists.first
else else
UI.warn "The pod `#{pod_name}` is linked to different targets " \ UI.warn "The pod `#{pod_name}` is linked to different targets " \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment