Merge pull request #18012 from apainintheneck/verify-more-constants-not-loaded-at-startup

Verify more constants are not loaded at startup
This commit is contained in:
Kevin 2024-08-14 21:38:29 -07:00 committed by GitHub
commit 14633b3adb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 42 additions and 25 deletions

View File

@ -1,8 +1,8 @@
# frozen_string_literal: true
RSpec.describe Homebrew, :integration_test do
it "does not invoke `require \"formula\"` at startup" do
expect { brew "verify-formula-undefined" }
it "does not require slow dependencies at startup" do
expect { brew "verify-undefined" }
.to not_to_output.to_stdout
.and not_to_output.to_stderr
.and be_a_success

View File

@ -1,23 +0,0 @@
# typed: strict
# frozen_string_literal: true
require "cli/parser"
module Homebrew
module Cmd
class VerifyFormulaUndefined < AbstractCommand
end
end
end
parser = Homebrew::CLI::Parser.new(Homebrew::Cmd::VerifyFormulaUndefined) do
usage_banner <<~EOS
`verify-formula-undefined`
Verifies that `require "formula"` has not been performed at startup.
EOS
end
parser.parse
Homebrew.failed = defined?(Formula) && Formula.respond_to?(:[])

View File

@ -0,0 +1,40 @@
# typed: strict
# frozen_string_literal: true
require "cli/parser"
UNDEFINED_CONSTANTS = %w[
Cask::Cask
Formula
Formulary
Homebrew::API
Tap
].freeze
module Homebrew
module Cmd
class VerifyUndefined < AbstractCommand
end
end
end
parser = Homebrew::CLI::Parser.new(Homebrew::Cmd::VerifyUndefined) do
usage_banner <<~EOS
`verify-undefined`
Verifies that the following constants have not been defined
at startup to make sure that startup times stay consistent.
Contants:
#{UNDEFINED_CONSTANTS.join("\n")}
EOS
end
parser.parse
UNDEFINED_CONSTANTS.each do |constant_name|
Object.const_get(constant_name)
ofail "#{constant_name} should not be defined at startup"
rescue NameError
# We expect this to error as it should not be defined.
end