mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00

This improves the load time of most brew commands. For an example of one of the simplest commands this speeds up: Without Bootsnap: ``` $ hyperfine 'git checkout master; brew help' 'git checkout optimise_requires; brew help' Benchmark 1: git checkout master; brew help Time (mean ± σ): 525.0 ms ± 35.8 ms [User: 229.9 ms, System: 113.1 ms] Range (min … max): 465.3 ms … 576.6 ms 10 runs Benchmark 2: git checkout optimise_requires; brew help Time (mean ± σ): 383.3 ms ± 25.1 ms [User: 133.0 ms, System: 72.1 ms] Range (min … max): 353.0 ms … 443.6 ms 10 runs Summary git checkout optimise_requires; brew help ran 1.37 ± 0.13 times faster than git checkout master; brew help ``` With Bootsnap: ``` $ hyperfine 'git checkout master; brew help' 'git checkout optimise_requires; brew help' Benchmark 1: git checkout master; brew help Time (mean ± σ): 386.0 ms ± 30.9 ms [User: 130.2 ms, System: 93.8 ms] Range (min … max): 359.5 ms … 469.3 ms 10 runs Benchmark 2: git checkout optimise_requires; brew help Time (mean ± σ): 330.2 ms ± 32.4 ms [User: 93.4 ms, System: 73.0 ms] Range (min … max): 302.9 ms … 413.9 ms 10 runs Summary git checkout optimise_requires; brew help ran 1.17 ± 0.15 times faster than git checkout master; brew help ```
34 lines
800 B
Ruby
34 lines
800 B
Ruby
# typed: strict
|
|
# frozen_string_literal: true
|
|
|
|
raise "#{__FILE__} must not be loaded via `require`." if $PROGRAM_NAME != __FILE__
|
|
|
|
old_trap = trap("INT") { exit! 130 }
|
|
|
|
require_relative "global"
|
|
|
|
require "fcntl"
|
|
require "socket"
|
|
require "cli/parser"
|
|
require "cmd/postinstall"
|
|
require "json/add/exception"
|
|
|
|
begin
|
|
args = Homebrew::Cmd::Postinstall.new.args
|
|
error_pipe = UNIXSocket.open(ENV.fetch("HOMEBREW_ERROR_PIPE"), &:recv_io)
|
|
error_pipe.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
|
|
|
|
trap("INT", old_trap)
|
|
|
|
formula = T.must(args.named.to_resolved_formulae.first)
|
|
if args.debug?
|
|
require "debrew"
|
|
formula.extend(Debrew::Formula)
|
|
end
|
|
formula.run_post_install
|
|
rescue Exception => e # rubocop:disable Lint/RescueException
|
|
error_pipe.puts e.to_json
|
|
error_pipe.close
|
|
exit! 1
|
|
end
|