Commit 15e9f3b2 authored by Fabio Pelosin's avatar Fabio Pelosin

[Install/Update] Keep track of external sources while locking Pods.

parent b09ccf1a
...@@ -3,9 +3,9 @@ require 'open-uri' ...@@ -3,9 +3,9 @@ require 'open-uri'
module Pod module Pod
class Dependency < Gem::Dependency class Dependency < Gem::Dependency
attr_reader :external_source, :head attr_reader :head
alias :head? :head alias :head? :head
attr_accessor :specification attr_accessor :specification, :external_source
def initialize(*name_and_version_requirements, &block) def initialize(*name_and_version_requirements, &block)
if name_and_version_requirements.empty? && block if name_and_version_requirements.empty? && block
......
...@@ -80,6 +80,19 @@ module Pod ...@@ -80,6 +80,19 @@ module Pod
@pods_versions @pods_versions
end end
# @return [Dependency] A dependency that describes the exact installed version
# of a Pod.
#
def dependency_for_installed_pod_named(name)
version = pods_versions[name]
raise Informative, "Attempt to lock a Pod without an known version." unless version
dependency = Dependency.new(name, version)
if external_source = external_sources[name]
dependency.external_source = Dependency::ExternalSources.from_params(dependency.name, external_source)
end
dependency
end
# @param [String] The string that describes a {Specification} generated # @param [String] The string that describes a {Specification} generated
# from {Specification#to_s}. # from {Specification#to_s}.
# #
......
...@@ -65,7 +65,8 @@ module Pod ...@@ -65,7 +65,8 @@ module Pod
@cached_specs = {} @cached_specs = {}
@specs_by_target = {} @specs_by_target = {}
@pods_from_external_sources = [] @pods_from_external_sources = []
@log_indent = 0; @pods_to_lock = []
@log_indent = 0
if @lockfile if @lockfile
puts "\nFinding added, modified or removed dependencies:".green if config.verbose? puts "\nFinding added, modified or removed dependencies:".green if config.verbose?
...@@ -87,8 +88,7 @@ module Pod ...@@ -87,8 +88,7 @@ module Pod
end end
end end
end end
pods_not_to_lock = @pods_by_state[:added] + @pods_by_state[:changed] + @pods_by_state[:removed] @pods_to_lock = (lockfile.pods_names - @pods_by_state[:added] - @pods_by_state[:changed] - @pods_by_state[:removed]).uniq
lock_versions(lockfile.pods_names - pods_not_to_lock) unless update_mode
end end
@podfile.target_definitions.values.each do |target_definition| @podfile.target_definitions.values.each do |target_definition|
...@@ -152,22 +152,6 @@ module Pod ...@@ -152,22 +152,6 @@ module Pod
private private
# Locks the given Pods to the version stored in the Lockfile.
#
# @return [void]
#
def lock_versions(pods)
return unless lockfile
# Add a specific Dependency to lock the version in the resolution process
pods.each do |pod_name|
version = lockfile.pods_versions[pod_name]
raise Informative, "Attempt to lock a Pod without an known version." unless version
dependency = Dependency.new(pod_name, version)
set = find_cached_set(dependency, nil)
set.required_by(dependency, lockfile.to_s)
end
end
# @return [Set] The cached set for a given dependency. # @return [Set] The cached set for a given dependency.
# #
def find_cached_set(dependency, platform) def find_cached_set(dependency, platform)
...@@ -205,6 +189,11 @@ module Pod ...@@ -205,6 +189,11 @@ module Pod
def find_dependency_specs(dependent_specification, dependencies, target_definition) def find_dependency_specs(dependent_specification, dependencies, target_definition)
@log_indent += 1 @log_indent += 1
dependencies.each do |dependency| dependencies.each do |dependency|
# Replace the dependency with a more specific one if the pod is already installed.
if !update_mode && @pods_to_lock.include?(dependency.name)
dependency = lockfile.dependency_for_installed_pod_named(dependency.name)
end
puts ' ' * @log_indent + "- #{dependency}" if config.verbose? puts ' ' * @log_indent + "- #{dependency}" if config.verbose?
set = find_cached_set(dependency, target_definition.platform) set = find_cached_set(dependency, target_definition.platform)
set.required_by(dependency, dependent_specification.to_s) set.required_by(dependency, dependent_specification.to_s)
......
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