class PodPrebuild::BaseCacheValidator
Attributes
generated_framework_path[R]
pod_lockfile[R]
podfile[R]
prebuilt_lockfile[R]
validate_prebuilt_settings[R]
Public Class Methods
new(options)
click to toggle source
# File lib/cocoapods-binary-cache/cache/validator_base.rb, line 6 def initialize(options) @podfile = options[:podfile] @pod_lockfile = options[:pod_lockfile] && PodPrebuild::Lockfile.new(options[:pod_lockfile]) @prebuilt_lockfile = options[:prebuilt_lockfile] && PodPrebuild::Lockfile.new(options[:prebuilt_lockfile]) @validate_prebuilt_settings = options[:validate_prebuilt_settings] @generated_framework_path = options[:generated_framework_path] end
Public Instance Methods
changes_of_prebuilt_lockfile_vs_podfile()
click to toggle source
# File lib/cocoapods-binary-cache/cache/validator_base.rb, line 18 def changes_of_prebuilt_lockfile_vs_podfile @changes_of_prebuilt_lockfile_vs_podfile ||= Pod::Installer::Analyzer::SpecsState.new( @prebuilt_lockfile.lockfile.detect_changes_with_podfile(@podfile) ) end
incompatible_build_settings(name)
click to toggle source
# File lib/cocoapods-binary-cache/cache/validator_base.rb, line 82 def incompatible_build_settings(name) settings_diff = {} prebuilt_build_settings = read_prebuilt_build_settings(name) validate_prebuilt_settings&.(name)&.each do |key, value| prebuilt_value = prebuilt_build_settings[key] unless prebuilt_value.nil? || value == prebuilt_value settings_diff[key] = { :current => value, :prebuilt => prebuilt_value } end end settings_diff end
incompatible_pod(name)
click to toggle source
# File lib/cocoapods-binary-cache/cache/validator_base.rb, line 76 def incompatible_pod(name) # Pod incompatibility is a universal concept. Generally, it requires build settings compatibility. # For more checks, do override this function to define what it means by `incompatible`. incompatible_build_settings(name) end
load_metadata(name)
click to toggle source
# File lib/cocoapods-binary-cache/cache/validator_base.rb, line 94 def load_metadata(name) @metadata_cache ||= {} cache = @metadata_cache[name] return cache unless cache.nil? metadata = PodPrebuild::Metadata.in_dir(generated_framework_path + name) @metadata_cache[name] = metadata metadata end
read_prebuilt_build_settings(name)
click to toggle source
# File lib/cocoapods-binary-cache/cache/validator_base.rb, line 104 def read_prebuilt_build_settings(name) load_metadata(name).build_settings end
read_source_hash(name)
click to toggle source
# File lib/cocoapods-binary-cache/cache/validator_base.rb, line 108 def read_source_hash(name) load_metadata(name).source_hash end
validate(*)
click to toggle source
# File lib/cocoapods-binary-cache/cache/validator_base.rb, line 14 def validate(*) raise NotImplementedError end
validate_pods(options)
click to toggle source
# File lib/cocoapods-binary-cache/cache/validator_base.rb, line 31 def validate_pods(options) pods = options[:pods] subspec_pods = options[:subspec_pods] prebuilt_pods = options[:prebuilt_pods] missed = {} hit = Set.new check_pod = lambda do |name| root_name = name.split("/")[0] version = pods[name] prebuilt_version = prebuilt_pods[name] result = false if prebuilt_version.nil? missed[name] = "Not available (#{version})" elsif prebuilt_version != version missed[name] = "Outdated: (prebuilt: #{prebuilt_version}) vs (#{version})" elsif load_metadata(root_name).blank? missed[name] = "Metadata not available (probably #{root_name}.zip is not in GeneratedFrameworks)" else diff = incompatible_pod(root_name) if diff.empty? hit << name result = true else missed[name] = "Incompatible: #{diff}" end end result end subspec_pods.each do |parent, children| missed_children = children.reject { |child| check_pod.call(child) } if missed_children.empty? hit << parent else missed[parent] = "Subspec pods were missed: #{missed_children}" end end non_subspec_pods = pods.reject { |pod| subspec_pods.include?(pod) } non_subspec_pods.each { |pod, _| check_pod.call(pod) } PodPrebuild::CacheValidationResult.new(missed, hit) end
validate_with_podfile()
click to toggle source
# File lib/cocoapods-binary-cache/cache/validator_base.rb, line 24 def validate_with_podfile changes = changes_of_prebuilt_lockfile_vs_podfile missed = changes.added.map { |pod| [pod, "Added from Podfile"] }.to_h missed.merge!(changes.changed.map { |pod| [pod, "Updated from Podfile"] }.to_h) PodPrebuild::CacheValidationResult.new(missed, changes.unchanged) end