diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d6b1971a7..0164288657 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ To install release candidates run `[sudo] gem install cocoapods --pre` ##### 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) + * Cache result of uses_swift and should_build to speed up pod install. [Dimitris Koutsogiorgas](https://github.com/dnkoutso) [#5837](https://github.com/CocoaPods/CocoaPods/pull/5837) diff --git a/lib/cocoapods/target/pod_target.rb b/lib/cocoapods/target/pod_target.rb index 3ae962c343..242187798f 100644 --- a/lib/cocoapods/target/pod_target.rb +++ b/lib/cocoapods/target/pod_target.rb @@ -47,6 +47,7 @@ def initialize(specs, target_definitions, sandbox, scope_suffix = nil) @file_accessors = [] @resource_bundle_targets = [] @dependent_targets = [] + @build_config_cache = {} end # @param [Hash{Array => PodTarget}] cache @@ -222,13 +223,20 @@ def recursive_dependent_targets # The name of the build configuration. # 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| target_definition.pod_whitelisted_for_configuration?(dependency.name, configuration_name) end.uniq if whitelists.empty? + @build_config_cache[key] = true return true elsif whitelists.count == 1 + @build_config_cache[key] = whitelists.first whitelists.first else raise Informative, "The subspecs of `#{pod_name}` are linked to " \ @@ -243,13 +251,16 @@ def include_in_build_config?(target_definition, configuration_name) # @return [Bool] # def inhibit_warnings? + return @inhibit_warnings if defined? @inhibit_warnings whitelists = target_definitions.map do |target_definition| target_definition.inhibits_warnings_for_pod?(root_spec.name) end.uniq if whitelists.empty? + @inhibit_warnings = false return false elsif whitelists.count == 1 + @inhibit_warnings = whitelists.first whitelists.first else UI.warn "The pod `#{pod_name}` is linked to different targets " \