Class: Pod::Resolver
- Inherits:
-
Object
- Object
- Pod::Resolver
- Defined in:
- lib/cocoapods-meitu-bin/native/resolver.rb
Instance Method Summary collapse
-
#aggregate_for_dependency(dependency) ⇒ Object
其实不用到 resolver_specs_by_target 再改 spec 在这个方法里面,通过修改 dependency 的 source 应该也可以 就是有一点,如果改了之后,对应的 source 没有符合 dependency 的版本 分析依赖阶段就会报错了,没法像 resolver_specs_by_target 一样 没有对应的二进制版本时还可以转到源码源码.
-
#get_all_components_dependencies ⇒ Object
获取所有组件的完整依赖关系.
-
#get_all_dependencies(vertex, visited = Set.new, dependencies = {}) ⇒ Object
获取组件的所有依赖(包括直接和间接依赖).
- #old_valid_possibility_version_for_root_name? ⇒ Object
-
#print_dependency_tree(vertex, indent = 0, visited = Set.new) ⇒ Object
打印组件的所有依赖树.
- #print_worktree_identity_debug(local_pods, stage) ⇒ Object
- #promote_local_path_pod_to_binary(pod_name, spec_version) ⇒ Object
-
#read_black_list ⇒ Object
读取黑名单.
- #requirement_satisfied_by?(requirement, activated, spec) ⇒ Boolean
- #specifications_for_dependency(dependency, additional_requirements_frozen = []) ⇒ Object
- #valid_possibility_version_for_root_name?(requirement, activated, spec) ⇒ Boolean
- #version_helper ⇒ Object
Instance Method Details
#aggregate_for_dependency(dependency) ⇒ Object
其实不用到 resolver_specs_by_target 再改 spec 在这个方法里面,通过修改 dependency 的 source 应该也可以就是有一点,如果改了之后,对应的 source 没有符合 dependency 的版本分析依赖阶段就会报错了,没法像 resolver_specs_by_target 一样没有对应的二进制版本时还可以转到源码源码
21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/cocoapods-meitu-bin/native/resolver.rb', line 21 def aggregate_for_dependency(dependency) sources_manager = Config.instance.sources_manager if dependency&.podspec_repo sources_manager.aggregate_for_dependency(dependency) # 采用 lock 中的 source ,会导致插件对 source 的先后调整失效 # elsif (locked_vertex = @locked_dependencies.vertex_named(dependency.name)) && (locked_dependency = locked_vertex.payload) && locked_dependency.podspec_repo # sources_manager.aggregate_for_dependency(locked_dependency) else @aggregate ||= Source::Aggregate.new(sources) end end |
#get_all_components_dependencies ⇒ Object
获取所有组件的完整依赖关系
624 625 626 627 628 629 630 |
# File 'lib/cocoapods-meitu-bin/native/resolver.rb', line 624 def get_all_components_dependencies result = {} @activated.vertices.each do |name, vertex| result[name] = get_all_dependencies(vertex) end result end |
#get_all_dependencies(vertex, visited = Set.new, dependencies = {}) ⇒ Object
获取组件的所有依赖(包括直接和间接依赖)
580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 |
# File 'lib/cocoapods-meitu-bin/native/resolver.rb', line 580 def get_all_dependencies(vertex, visited = Set.new, dependencies = {}) return dependencies if vertex.nil? || visited.include?(vertex.name) visited.add(vertex.name) # 添加当前组件信息 dependencies[vertex.name] = { version: vertex.payload&.version, dependencies: {} } # 递归处理所有直接依赖 vertex.outgoing_edges&.each do |edge| dest_vertex = edge.destination next if dest_vertex.nil? dep_name = dest_vertex.name # 记录直接依赖信息 dependencies[vertex.name][:dependencies][dep_name] = { version: dest_vertex.payload&.version, requirement: edge.requirement&.to_s } # 递归获取间接依赖 get_all_dependencies(dest_vertex, visited, dependencies) end dependencies end |
#old_valid_possibility_version_for_root_name? ⇒ Object
64 |
# File 'lib/cocoapods-meitu-bin/native/resolver.rb', line 64 alias old_valid_possibility_version_for_root_name? valid_possibility_version_for_root_name? |
#print_dependency_tree(vertex, indent = 0, visited = Set.new) ⇒ Object
打印组件的所有依赖树
612 613 614 615 616 617 618 619 620 621 |
# File 'lib/cocoapods-meitu-bin/native/resolver.rb', line 612 def print_dependency_tree(vertex, indent = 0, visited = Set.new) return if visited.include?(vertex.name) visited.add(vertex.name) puts "#{' ' * indent}#{vertex.name} (#{vertex.payload&.version || '?'})" vertex.outgoing_edges.each do |edge| print_dependency_tree(edge.destination, indent + 1, visited) end end |
#print_worktree_identity_debug(local_pods, stage) ⇒ Object
551 552 553 554 555 556 557 558 559 560 561 562 563 |
# File 'lib/cocoapods-meitu-bin/native/resolver.rb', line 551 def print_worktree_identity_debug(local_pods, stage) return unless ENV['MEITU_BIN_WORKTREE_DEBUG'] == '1' roots = local_pods.map { |name| Pod::Specification.root_name(name) }.uniq.sort missing = roots.reject { |name| PodUpdateConfig.get_worktree_identity(name) } if stage == 'after_precompute' UI.puts "worktree_identity_debug(rule): #{CBin::Helpers::WorktreeIdentity.rule_version}".yellow end UI.puts "worktree_identity_debug(#{stage}): local=#{roots.size}, resolved=#{roots.size - missing.size}, missing=#{missing.size}".yellow unless missing.empty? UI.puts "worktree_identity_debug_missing(#{stage}): #{missing.join(',')}".yellow end end |
#promote_local_path_pod_to_binary(pod_name, spec_version) ⇒ Object
565 566 567 568 569 570 571 572 573 574 575 576 577 |
# File 'lib/cocoapods-meitu-bin/native/resolver.rb', line 565 def promote_local_path_pod_to_binary(pod_name, spec_version) root_name = Pod::Specification.root_name(pod_name) return if PodUpdateConfig.promoted_local_pod?(root_name) # 提升后的 root 不再视为本地 development pod,后续安装流程将按 binary pod 处理。 PodUpdateConfig.promote_local_pod(root_name, { version: spec_version, identity: PodUpdateConfig.get_worktree_identity(root_name), }) PodUpdateConfig.set_external_source({ name: root_name, source: { promoted_from: 'path' } }) sandbox.development_pods.delete(root_name) sandbox.remove_local_podspec(root_name) if sandbox.respond_to?(:remove_local_podspec) end |
#read_black_list ⇒ Object
读取黑名单
92 93 94 95 96 97 98 99 100 |
# File 'lib/cocoapods-meitu-bin/native/resolver.rb', line 92 def read_black_list config_file = File.join(Pod::Config.instance.project_root, 'BinConfig.yaml') return nil unless File.exist?(config_file) config = YAML.load(File.open(config_file)) return nil if config.nil? install_config = config['install_config'] return nil if install_config.nil? install_config['black_list'] end |
#requirement_satisfied_by?(requirement, activated, spec) ⇒ Boolean
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/cocoapods-meitu-bin/native/resolver.rb', line 72 def requirement_satisfied_by?(requirement, activated, spec) version = spec.version return false unless requirement.requirement.satisfied_by?(version) shared_possibility_versions, prerelease_requirement = possibility_versions_for_root_name(requirement, activated) if !shared_possibility_versions.empty? && !shared_possibility_versions.include?(version) return false end if !podfile.allow_prerelease? && version.prerelease? && !prerelease_requirement return false end unless spec_is_platform_compatible?(activated, requirement, spec) return false end true end |
#specifications_for_dependency(dependency, additional_requirements_frozen = []) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/cocoapods-meitu-bin/native/resolver.rb', line 35 def specifications_for_dependency(dependency, additional_requirements_frozen = []) additional_requirements = additional_requirements_frozen.dup.compact requirement = Requirement.new(dependency.requirement.as_list + additional_requirements.flat_map(&:as_list)) if podfile.allow_prerelease? && !requirement.prerelease? requirement = Requirement.new(dependency.requirement.as_list.map { |r| r + '.a' } + additional_requirements.flat_map(&:as_list)) end = if Pod.match_version?('~> 1.7') podfile. else end if Pod.match_version?('~> 1.8') specifications = find_cached_set(dependency) .all_specifications(.warn_for_multiple_pod_sources, requirement) else specifications = find_cached_set(dependency) .all_specifications(.warn_for_multiple_pod_sources) .select { |s| requirement.satisfied_by? s.version } end specifications .map { |s| s.subspec_by_name(dependency.name, false, true) } .compact end |
#valid_possibility_version_for_root_name?(requirement, activated, spec) ⇒ Boolean
66 67 68 69 70 |
# File 'lib/cocoapods-meitu-bin/native/resolver.rb', line 66 def valid_possibility_version_for_root_name?(requirement, activated, spec) return true if podfile.allow_prerelease? old_valid_possibility_version_for_root_name?(requirement, activated, spec) end |