diff --git a/Library/.rubocop.yml b/Library/.rubocop.yml index f0a50eae849e7..33052d02a6654 100644 --- a/Library/.rubocop.yml +++ b/Library/.rubocop.yml @@ -370,7 +370,7 @@ Sorbet/FalseSigil: - "/**/{Formula,Casks}/*.rb" - "**/{Formula,Casks}/*.rb" - "Homebrew/test/**/Casks/**/*.rb" - - "Homebrew/bootsnap.rb" + - "Homebrew/homebrew_bootsnap.rb" Sorbet/StrictSigil: Enabled: true diff --git a/Library/Homebrew/bootsnap.rb b/Library/Homebrew/homebrew_bootsnap.rb similarity index 65% rename from Library/Homebrew/bootsnap.rb rename to Library/Homebrew/homebrew_bootsnap.rb index 026e54cfca080..9f368a8101ea7 100644 --- a/Library/Homebrew/bootsnap.rb +++ b/Library/Homebrew/homebrew_bootsnap.rb @@ -7,7 +7,21 @@ raise "Needs HOMEBREW_BOOTSNAP!" unless ENV["HOMEBREW_BOOTSNAP"] require "rubygems" -require "bootsnap" + +begin + require "bootsnap" +rescue LoadError + raise if ENV["HOMEBREW_BOOTSNAP_RETRY"] + + Dir.chdir(HOMEBREW_LIBRARY_PATH) do + system "bundle", "install", "--standalone" + end + + ENV["HOMEBREW_BOOTSNAP_RETRY"] = "1" + exec ENV["HOMEBREW_BREW_FILE"], *ARGV +end + +ENV.delete("HOMEBREW_BOOTSNAP_RETRY") Bootsnap.setup( cache_dir: "#{ENV["HOMEBREW_TEMP"]}/homebrew-bootsnap", diff --git a/Library/Homebrew/load_path.rb b/Library/Homebrew/load_path.rb index 72fa1c3a376c9..9745b7348fe36 100644 --- a/Library/Homebrew/load_path.rb +++ b/Library/Homebrew/load_path.rb @@ -10,7 +10,7 @@ require "vendor/bundle/bundler/setup" if ENV["HOMEBREW_BOOTSNAP"] - require "bootsnap" + require "homebrew_bootsnap" else $LOAD_PATH.select! { |d| Pathname(d).directory? } $LOAD_PATH.uniq!