mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
Avoid passing around a massive $LOAD_PATH.
Portable Ruby crashes if the $LOAD_PATH gets too big.
This commit is contained in:
parent
1fba9b9b53
commit
6cd1e5e384
@ -6,7 +6,7 @@
|
||||
|
||||
old_trap = trap("INT") { exit! 130 }
|
||||
|
||||
require "global"
|
||||
require_relative "global"
|
||||
require "build_options"
|
||||
require "cxxstdlib"
|
||||
require "keg"
|
||||
|
@ -67,3 +67,9 @@ HOMEBREW_TEMP = Pathname(EnvVar["HOMEBREW_TEMP"]).yield_self do |tmp|
|
||||
tmp.mkpath unless tmp.exist?
|
||||
tmp.realpath
|
||||
end.freeze
|
||||
|
||||
# The Ruby path and args to use for forked Ruby calls
|
||||
HOMEBREW_RUBY_EXEC_ARGS = [
|
||||
RUBY_PATH,
|
||||
ENV["HOMEBREW_RUBY_WARNINGS"],
|
||||
].freeze
|
||||
|
@ -77,10 +77,7 @@ module Homebrew
|
||||
env = ENV.to_hash
|
||||
|
||||
begin
|
||||
exec_args = %W[
|
||||
#{RUBY_PATH}
|
||||
#{ENV["HOMEBREW_RUBY_WARNINGS"]}
|
||||
-I #{$LOAD_PATH.join(File::PATH_SEPARATOR)}
|
||||
exec_args = HOMEBREW_RUBY_EXEC_ARGS + %W[
|
||||
--
|
||||
#{HOMEBREW_LIBRARY_PATH}/test.rb
|
||||
#{f.path}
|
||||
|
@ -16,13 +16,11 @@ class FormulaInfo
|
||||
# Returns nil if formula is absent or if there was an error reading it.
|
||||
def self.lookup(name)
|
||||
json = Utils.popen_read(
|
||||
RUBY_PATH,
|
||||
ENV["HOMEBREW_RUBY_WARNINGS"],
|
||||
"-I", $LOAD_PATH.join(File::PATH_SEPARATOR),
|
||||
*HOMEBREW_RUBY_EXEC_ARGS,
|
||||
HOMEBREW_LIBRARY_PATH/"brew.rb",
|
||||
"info",
|
||||
"--json=v1",
|
||||
name
|
||||
name,
|
||||
)
|
||||
|
||||
return unless $CHILD_STATUS.success?
|
||||
|
@ -896,13 +896,12 @@ class FormulaInstaller
|
||||
# 1. formulae can modify ENV, so we must ensure that each
|
||||
# installation has a pristine ENV when it starts, forking now is
|
||||
# the easiest way to do this
|
||||
args = %W[
|
||||
nice #{RUBY_PATH}
|
||||
#{ENV["HOMEBREW_RUBY_WARNINGS"]}
|
||||
-I #{$LOAD_PATH.join(File::PATH_SEPARATOR)}
|
||||
--
|
||||
#{HOMEBREW_LIBRARY_PATH}/build.rb
|
||||
#{formula.specified_path}
|
||||
args = [
|
||||
"nice",
|
||||
*HOMEBREW_RUBY_EXEC_ARGS,
|
||||
"--",
|
||||
HOMEBREW_LIBRARY_PATH/"build.rb",
|
||||
formula.specified_path,
|
||||
].concat(build_argv)
|
||||
|
||||
Utils.safe_fork do
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
old_trap = trap("INT") { exit! 130 }
|
||||
|
||||
require "global"
|
||||
require_relative "global"
|
||||
require "debrew"
|
||||
require "fcntl"
|
||||
require "socket"
|
||||
|
@ -11,7 +11,6 @@ require "dependency_collector"
|
||||
require "utils/bottles"
|
||||
require "patch"
|
||||
require "compilers"
|
||||
require "global"
|
||||
require "os/mac/version"
|
||||
require "extend/on_os"
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
old_trap = trap("INT") { exit! 130 }
|
||||
|
||||
require "global"
|
||||
require_relative "global"
|
||||
require "extend/ENV"
|
||||
require "timeout"
|
||||
require "debrew"
|
||||
|
@ -6,8 +6,7 @@ require "cmd/shared_examples/args_parse"
|
||||
describe "brew test" do
|
||||
it_behaves_like "parseable arguments"
|
||||
|
||||
# randomly segfaults on Linux with portable-ruby.
|
||||
it "tests a given Formula", :integration_test, :needs_macos do
|
||||
it "tests a given Formula", :integration_test do
|
||||
install_test_formula "testball", <<~'RUBY'
|
||||
test do
|
||||
assert_equal "test", shell_output("#{bin}/test")
|
||||
|
@ -2,7 +2,6 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "formula_info"
|
||||
require "global"
|
||||
|
||||
describe FormulaInfo, :integration_test do
|
||||
it "tests the FormulaInfo class" do
|
||||
|
@ -87,10 +87,7 @@ RSpec.shared_context "integration test" do # rubocop:disable RSpec/ContextWordin
|
||||
)
|
||||
|
||||
@ruby_args ||= begin
|
||||
ruby_args = [
|
||||
ENV["HOMEBREW_RUBY_WARNINGS"],
|
||||
"-I", $LOAD_PATH.join(File::PATH_SEPARATOR)
|
||||
]
|
||||
ruby_args = HOMEBREW_RUBY_EXEC_ARGS.dup
|
||||
if ENV["HOMEBREW_TESTS_COVERAGE"]
|
||||
simplecov_spec = Gem.loaded_specs["simplecov"]
|
||||
specs = [simplecov_spec]
|
||||
@ -111,12 +108,12 @@ RSpec.shared_context "integration test" do # rubocop:disable RSpec/ContextWordin
|
||||
libs.each { |lib| ruby_args << "-I" << lib }
|
||||
ruby_args << "-rsimplecov"
|
||||
end
|
||||
ruby_args << "-rtest/support/helper/integration_mocks"
|
||||
ruby_args << "-r#{HOMEBREW_LIBRARY_PATH}/test/support/helper/integration_mocks"
|
||||
ruby_args << (HOMEBREW_LIBRARY_PATH/"brew.rb").resolved_path.to_s
|
||||
end
|
||||
|
||||
Bundler.with_clean_env do
|
||||
stdout, stderr, status = Open3.capture3(env, RUBY_PATH, *@ruby_args, *args)
|
||||
stdout, stderr, status = Open3.capture3(env, *@ruby_args, *args)
|
||||
$stdout.print stdout
|
||||
$stderr.print stderr
|
||||
status
|
||||
|
@ -37,6 +37,11 @@ HOMEBREW_LOCKS = (HOMEBREW_PREFIX.parent/"locks").freeze
|
||||
HOMEBREW_CELLAR = (HOMEBREW_PREFIX.parent/"cellar").freeze
|
||||
HOMEBREW_LOGS = (HOMEBREW_PREFIX.parent/"logs").freeze
|
||||
HOMEBREW_TEMP = (HOMEBREW_PREFIX.parent/"temp").freeze
|
||||
HOMEBREW_RUBY_EXEC_ARGS = [
|
||||
RUBY_PATH,
|
||||
ENV["HOMEBREW_RUBY_WARNINGS"],
|
||||
"-I", HOMEBREW_LIBRARY_PATH/"test/support/lib"
|
||||
].freeze
|
||||
|
||||
TEST_FIXTURE_DIR = (HOMEBREW_LIBRARY_PATH/"test/support/fixtures").freeze
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user