Commit a1a2b981 authored by Samuel Giddins's avatar Samuel Giddins

[Analyzer] Speed up #filter_pod_targets_for_target_definition

parent ac26c003
......@@ -467,9 +467,8 @@ module Pod
#
def filter_pod_targets_for_target_definition(target_definition, pod_targets, resolver_specs_by_target)
pod_targets.select do |pod_target|
included_in_target_definition = pod_target.target_definitions.include?(target_definition)
used_by_tests_only = resolver_specs_by_target[target_definition].select { |resolver_spec| pod_target.specs.include?(resolver_spec.spec) }.all?(&:used_by_tests_only?)
included_in_target_definition && !used_by_tests_only
next false unless pod_target.target_definitions.include?(target_definition)
resolver_specs_by_target[target_definition].any? { |resolver_spec| !resolver_spec.used_by_tests_only? && pod_target.specs.include?(resolver_spec.spec) }
end
end
......@@ -510,9 +509,9 @@ module Pod
hash[name] = values.sort_by { |pt| pt.specs.count }
end
pod_targets.each do |target|
all_specs = all_resolver_specs.to_set
dependencies = transitive_dependencies_for_specs(target.non_test_specs.to_set, target.platform, all_specs).group_by(&:root)
test_dependencies = transitive_dependencies_for_specs(target.test_specs.to_set, target.platform, all_specs).group_by(&:root)
all_specs = all_resolver_specs.group_by(&:name)
dependencies = transitive_dependencies_for_specs(target.non_test_specs.to_set, target.platform, all_specs.dup).group_by(&:root)
test_dependencies = transitive_dependencies_for_specs(target.test_specs.to_set, target.platform, all_specs.dup).group_by(&:root)
test_dependencies.delete_if { |k| dependencies.key? k }
target.dependent_targets = filter_dependencies(dependencies, pod_targets_by_name, target)
target.test_dependent_targets = filter_dependencies(test_dependencies, pod_targets_by_name, target)
......@@ -526,9 +525,9 @@ module Pod
end
pod_targets.each do |target|
all_specs = specs.map(&:spec).to_set
dependencies = transitive_dependencies_for_specs(target.non_test_specs.to_set, target.platform, all_specs).group_by(&:root)
test_dependencies = transitive_dependencies_for_specs(target.test_specs.to_set, target.platform, all_specs).group_by(&:root)
all_specs = specs.map(&:spec).group_by(&:name)
dependencies = transitive_dependencies_for_specs(target.non_test_specs.to_set, target.platform, all_specs.dup).group_by(&:root)
test_dependencies = transitive_dependencies_for_specs(target.test_specs.to_set, target.platform, all_specs.dup).group_by(&:root)
test_dependencies.delete_if { |k| dependencies.key? k }
target.dependent_targets = pod_targets.reject { |t| dependencies[t.root_spec].nil? }
target.test_dependent_targets = pod_targets.reject { |t| test_dependencies[t.root_spec].nil? }
......@@ -559,7 +558,7 @@ module Pod
# @param [Platform] platform
# The platform for which the dependencies should be returned.
#
# @param [Array<Specification>] all_specs
# @param [Hash<String, Specification>] all_specs
# All specifications which are installed alongside.
#
# @return [Array<Specification>]
......@@ -568,20 +567,20 @@ module Pod
return [] if specs.empty? || all_specs.empty?
dependent_specs = Set.new
specs.each do |spec|
spec.consumer(platform).dependencies.each do |dependency|
match = all_specs.find do |s|
next false unless s.name == dependency.name
next false if specs.include?(s)
true
to_process = specs
loop do
break if to_process.empty?
next_to_process = Set.new
to_process.each do |s|
s.dependencies(platform).each do |dep|
all_specs[dep.name].each do |spec|
next_to_process.add(spec) if dependent_specs.add?(spec)
end
end
dependent_specs << match if match
end
to_process = next_to_process
end
remaining_specs = all_specs - dependent_specs
dependent_specs.union transitive_dependencies_for_specs(dependent_specs, platform, remaining_specs)
dependent_specs - specs
end
# Create a target for each spec group
......
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