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"
return
end
if Bundler.default_lockfile.exist? && !options["update"]
begin
tmpdef = Definition.build(Bundler.default_gemfile, Bundler.default_lockfile, nil)
local = true unless tmpdef.new_platform? || tmpdef.missing_specs.any?
rescue BundlerError
end
end
unless local
options["local"] ?
@definition.resolve_with_cache! :
@definition.resolve_remotely!
end
specs.each do |spec|
spec.source.fetch(spec) if spec.source.respond_to?(:fetch)
Bundler.rubygems.with_build_args [Bundler.settings["build.#{spec.name}"]] do
spec.source.install(spec)
Bundler.ui.debug "from #{spec.loaded_from} "
end
Bundler.ui.info ""
generate_bundler_executable_stubs(spec) if Bundler.settings[:bin]
FileUtils.rm_rf(Bundler.tmp)
end
lock
end