# frozen_string_literal: true require "emoji" require "utils/analytics" require "utils/curl" require "utils/fork" require "utils/formatter" require "utils/gems" require "utils/git" require "utils/github" require "utils/inreplace" require "utils/link" require "utils/popen" require "utils/svn" require "utils/tty" require "tap_constants" require "time" module Homebrew module_function def _system(cmd, *args, **options) pid = fork do yield if block_given? args.map!(&:to_s) begin exec(cmd, *args, **options) rescue nil end exit! 1 # never gets here unless exec failed end Process.wait(pid) $CHILD_STATUS.success? end def system(cmd, *args, **options) puts "#{cmd} #{args * " "}" if ARGV.verbose? _system(cmd, *args, **options) end # rubocop:disable Style/GlobalVars def inject_dump_stats!(the_module, pattern) @injected_dump_stat_modules ||= {} @injected_dump_stat_modules[the_module] ||= [] injected_methods = @injected_dump_stat_modules[the_module] the_module.module_eval do instance_methods.grep(pattern).each do |name| next if injected_methods.include? name method = instance_method(name) define_method(name) do |*args, &block| time = Time.now method.bind(self).call(*args, &block) ensure $times[name] ||= 0 $times[name] += Time.now - time end end end return unless $times.nil? $times = {} at_exit do col_width = [$times.keys.map(&:size).max.to_i + 2, 15].max $times.sort_by { |_k, v| v }.each do |method, time| puts format("%-#{col_width}s %