def run(options)
begin
Bundler.bundle_path.mkpath unless Bundler.bundle_path.exist?
rescue Errno::EEXIST
raise PathError, "Could not install to path `#{Bundler.settings[:path]}` " +
"because of an invalid symlink. Remove the symlink so the directory can be created."
end
if Bundler.settings[:frozen]
@definition.ensure_equivalent_gemfile_and_lockfile(options[:deployment])
end
if dependencies.empty?
Bundler.ui.warn "The Gemfile specifies no dependencies"
lock
return
end
if Bundler.default_lockfile.exist? && !options["update"]
local = Bundler.ui.silence do
begin
tmpdef = Definition.build(Bundler.default_gemfile, Bundler.default_lockfile, nil)
true unless tmpdef.new_platform? || tmpdef.missing_specs.any?
rescue BundlerError
end
end
end
unless local
options["local"] ? @definition.resolve_with_cache! : @definition.resolve_remotely!
end
Installer.post_install_messages = {}
jobs = [Bundler.settings[:jobs].to_i, 1].max
if jobs > 1 && can_install_parallely?
install_in_parallel jobs, options[:standalone]
else
install_sequentially options[:standalone]
end
lock
generate_standalone(options[:standalone]) if options[:standalone]
end