Only rehash if bundle install actually created new executables

This avoids running `rbenv rehash` after installing libraries that don't
have executables, or after a no-op `bundle install` that didn't install
anything.
This commit is contained in:
Mislav Marohnić 2015-10-25 18:31:50 +01:00
parent 7b289bcee6
commit 2b0f16757a

View file

@ -15,14 +15,20 @@ if defined?(Bundler::Installer) && Bundler::Installer.respond_to?(:install)
class << self
alias install_without_rbenv_rehash install
def install(root, definition, options = {})
result = install_without_rbenv_rehash(root, definition, options)
begin
if result && Gem.default_path.include?(Bundler.bundle_path.to_s)
`rbenv rehash`
if Gem.default_path.include?(Bundler.bundle_path.to_s)
bin_dir = Gem.bindir(Bundler.bundle_path.to_s)
bins_before = File.exist?(bin_dir) ? Dir.entries(bin_dir).size : 2
end
rescue
warn "rbenv: error in Bundler post-install hook (#{$!.class.name}: #{$!.message})"
end
result = install_without_rbenv_rehash(root, definition, options)
if bin_dir && File.exist?(bin_dir) && Dir.entries(bin_dir).size > bins_before
`rbenv rehash`
end
result
end
end