def initialize(lockfile, dependencies, sources, unlock)
@unlocking = unlock == true || !unlock.empty?
@dependencies, @sources, @unlock = dependencies, sources, unlock
@remote = false
@specs = nil
@lockfile_contents = ""
if lockfile && File.exists?(lockfile)
@lockfile_contents = Bundler.read_file(lockfile)
locked = LockfileParser.new(@lockfile_contents)
@platforms = locked.platforms
if unlock != true
@locked_deps = locked.dependencies
@locked_specs = SpecSet.new(locked.specs)
@locked_sources = locked.sources
else
@unlock = {}
@locked_deps = []
@locked_specs = SpecSet.new([])
@locked_sources = []
end
else
@unlock = {}
@platforms = []
@locked_deps = []
@locked_specs = SpecSet.new([])
@locked_sources = []
end
@unlock[:gems] ||= []
@unlock[:sources] ||= []
current_platform = Bundler.rubygems.platforms.map { |p| generic(p) }.compact.last
@new_platform = !@platforms.include?(current_platform)
@platforms |= [current_platform]
@path_changes = @sources.any? do |source|
next unless source.instance_of?(Source::Path)
locked = @locked_sources.find do |ls|
ls.class == source.class && ls.path == source.path
end
if locked
unlocking = locked.specs.any? do |spec|
@locked_specs.any? do |locked_spec|
locked_spec.source != locked
end
end
end
!locked || unlocking || source.specs != locked.specs
end
eager_unlock = expand_dependencies(@unlock[:gems])
@unlock[:gems] = @locked_specs.for(eager_unlock).map { |s| s.name }
@source_changes = converge_sources
@dependency_changes = converge_dependencies
fixup_dependency_types!
end