Class: Bundler::ParallelInstaller

Inherits:
Object
  • Object
show all
Defined in:
lib/bundler/installer/parallel_installer.rb

Defined Under Namespace

Classes: SpecInstallation

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(installer, all_specs, size, standalone, force) ⇒ ParallelInstaller

Returns a new instance of ParallelInstaller.



83
84
85
86
87
88
89
90
91
# File 'lib/bundler/installer/parallel_installer.rb', line 83

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

Instance Attribute Details

#sizeObject (readonly)

Returns the value of attribute size.



81
82
83
# File 'lib/bundler/installer/parallel_installer.rb', line 81

def size
  @size
end

Class Method Details

.call(*args) ⇒ Object



77
78
79
# File 'lib/bundler/installer/parallel_installer.rb', line 77

def self.call(*args)
  new(*args).call
end

Instance Method Details

#callObject



93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/bundler/installer/parallel_installer.rb', line 93

def call
  check_for_corrupt_lockfile

  if @size > 1
    install_with_worker
  else
    install_serially
  end

  handle_error if failed_specs.any?
  @specs
ensure
  worker_pool && worker_pool.stop
end

#check_for_corrupt_lockfileObject



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/bundler/installer/parallel_installer.rb', line 108

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