In Files

  • bundler/installer/parallel_installer.rb

Class/Module Index [+]

Quicksearch

Bundler::ParallelInstaller

Attributes

size[R]

Public Class Methods

call(*args) click to toggle source
 
               # File bundler/installer/parallel_installer.rb, line 70
def self.call(*args)
  new(*args).call
end
            
new(installer, all_specs, size, standalone, force) click to toggle source
 
               # File bundler/installer/parallel_installer.rb, line 76
def initialize(installer, all_specs, size, standalone, force)
  @installer = installer
  @size = size
  @standalone = standalone
  @force = force
  @specs = all_specs.map {|s| SpecInstallation.new(s) }
  @spec_set = all_specs
  @rake = @specs.find {|s| s.name == "rake" }
end
            

Public Instance Methods

call() click to toggle source
 
               # File bundler/installer/parallel_installer.rb, line 86
def call
  check_for_corrupt_lockfile

  if @rake
    do_install(@rake, 0)
    Gem::Specification.reset
  end

  if @size > 1
    install_with_worker
  else
    install_serially
  end

  check_for_unmet_dependencies

  handle_error if failed_specs.any?
  @specs
ensure
  worker_pool && worker_pool.stop
end
            
check_for_corrupt_lockfile() click to toggle source
 
               # File bundler/installer/parallel_installer.rb, line 131
def check_for_corrupt_lockfile
  missing_dependencies = @specs.map do |s|
    [
      s,
      s.missing_lockfile_dependencies(@specs.map(&:name)),
    ]
  end.reject {|a| a.last.empty? }
  return if missing_dependencies.empty?

  warning = []
  warning << "Your lockfile was created by an old Bundler that left some things out."
  if @size != 1
    warning << "Because of the missing DEPENDENCIES, we can only install gems one at a time, instead of installing #{@size} at a time."
    @size = 1
  end
  warning << "You can fix this by adding the missing gems to your Gemfile, running bundle install, and then removing the gems from your Gemfile."
  warning << "The missing gems are:"

  missing_dependencies.each do |spec, missing|
    warning << "* #{missing.map(&:name).join(", ")} depended upon by #{spec.name}"
  end

  Bundler.ui.warn(warning.join("\n"))
end
            
check_for_unmet_dependencies() click to toggle source
 
               # File bundler/installer/parallel_installer.rb, line 108
def check_for_unmet_dependencies
  unmet_dependencies = @specs.map do |s|
    [
      s,
      s.dependencies.reject {|dep| @specs.any? {|spec| dep.matches_spec?(spec.spec) } },
    ]
  end.reject {|a| a.last.empty? }
  return if unmet_dependencies.empty?

  warning = []
  warning << "Your lockfile doesn't include a valid resolution."
  warning << "You can fix this by regenerating your lockfile or trying to manually editing the bad locked gems to a version that satisfies all dependencies."
  warning << "The unmet dependencies are:"

  unmet_dependencies.each do |spec, unmet_spec_dependencies|
    unmet_spec_dependencies.each do |unmet_spec_dependency|
      warning << "* #{unmet_spec_dependency}, depended upon #{spec.full_name}, unsatisfied by #{@specs.find {|s| s.name == unmet_spec_dependency.name && !unmet_spec_dependency.matches_spec?(s.spec) }.full_name}"
    end
  end

  Bundler.ui.warn(warning.join("\n"))
end