
This turns the ability to replace common paths with placeholders into a mixin that can be used with both Casks and Formulae. The idea here is to make formula hash generation more consistent.
155 lines
5.2 KiB
Ruby
155 lines
5.2 KiB
Ruby
# typed: true
|
|
# frozen_string_literal: true
|
|
|
|
require_relative "startup"
|
|
|
|
require "English"
|
|
require "fileutils"
|
|
require "json"
|
|
require "json/add/exception"
|
|
require "forwardable"
|
|
require "set"
|
|
|
|
# Only require "core_ext" here to ensure we're only requiring the minimum of
|
|
# what we need.
|
|
require "active_support/core_ext/object/blank"
|
|
require "active_support/core_ext/string/filters"
|
|
require "active_support/core_ext/object/try"
|
|
require "active_support/core_ext/array/access"
|
|
require "active_support/core_ext/hash/except"
|
|
require "active_support/core_ext/kernel/reporting"
|
|
require "active_support/core_ext/hash/keys"
|
|
require "active_support/core_ext/hash/deep_merge"
|
|
require "active_support/core_ext/file/atomic"
|
|
require "active_support/core_ext/enumerable"
|
|
require "active_support/core_ext/string/exclude"
|
|
require "active_support/core_ext/string/indent"
|
|
|
|
HOMEBREW_API_DEFAULT_DOMAIN = ENV.fetch("HOMEBREW_API_DEFAULT_DOMAIN").freeze
|
|
HOMEBREW_BOTTLE_DEFAULT_DOMAIN = ENV.fetch("HOMEBREW_BOTTLE_DEFAULT_DOMAIN").freeze
|
|
HOMEBREW_BREW_DEFAULT_GIT_REMOTE = ENV.fetch("HOMEBREW_BREW_DEFAULT_GIT_REMOTE").freeze
|
|
HOMEBREW_CORE_DEFAULT_GIT_REMOTE = ENV.fetch("HOMEBREW_CORE_DEFAULT_GIT_REMOTE").freeze
|
|
HOMEBREW_DEFAULT_CACHE = ENV.fetch("HOMEBREW_DEFAULT_CACHE").freeze
|
|
HOMEBREW_DEFAULT_LOGS = ENV.fetch("HOMEBREW_DEFAULT_LOGS").freeze
|
|
HOMEBREW_DEFAULT_TEMP = ENV.fetch("HOMEBREW_DEFAULT_TEMP").freeze
|
|
HOMEBREW_REQUIRED_RUBY_VERSION = ENV.fetch("HOMEBREW_REQUIRED_RUBY_VERSION").freeze
|
|
|
|
HOMEBREW_PRODUCT = ENV.fetch("HOMEBREW_PRODUCT").freeze
|
|
HOMEBREW_VERSION = ENV.fetch("HOMEBREW_VERSION").freeze
|
|
HOMEBREW_WWW = "https://brew.sh"
|
|
HOMEBREW_DOCS_WWW = "https://docs.brew.sh"
|
|
HOMEBREW_SYSTEM = ENV.fetch("HOMEBREW_SYSTEM").freeze
|
|
HOMEBREW_PROCESSOR = ENV.fetch("HOMEBREW_PROCESSOR").freeze
|
|
HOMEBREW_PHYSICAL_PROCESSOR = ENV.fetch("HOMEBREW_PHYSICAL_PROCESSOR").freeze
|
|
|
|
HOMEBREW_BREWED_CURL_PATH = Pathname(ENV.fetch("HOMEBREW_BREWED_CURL_PATH")).freeze
|
|
HOMEBREW_USER_AGENT_CURL = ENV.fetch("HOMEBREW_USER_AGENT_CURL").freeze
|
|
HOMEBREW_USER_AGENT_RUBY =
|
|
"#{ENV.fetch("HOMEBREW_USER_AGENT")} ruby/#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"
|
|
HOMEBREW_USER_AGENT_FAKE_SAFARI =
|
|
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/602.4.8 " \
|
|
"(KHTML, like Gecko) Version/10.0.3 Safari/602.4.8"
|
|
HOMEBREW_GITHUB_PACKAGES_AUTH = ENV.fetch("HOMEBREW_GITHUB_PACKAGES_AUTH").freeze
|
|
|
|
HOMEBREW_DEFAULT_PREFIX = ENV.fetch("HOMEBREW_GENERIC_DEFAULT_PREFIX").freeze
|
|
HOMEBREW_DEFAULT_REPOSITORY = ENV.fetch("HOMEBREW_GENERIC_DEFAULT_REPOSITORY").freeze
|
|
HOMEBREW_MACOS_ARM_DEFAULT_PREFIX = ENV.fetch("HOMEBREW_MACOS_ARM_DEFAULT_PREFIX").freeze
|
|
HOMEBREW_MACOS_ARM_DEFAULT_REPOSITORY = ENV.fetch("HOMEBREW_MACOS_ARM_DEFAULT_REPOSITORY").freeze
|
|
HOMEBREW_LINUX_DEFAULT_PREFIX = ENV.fetch("HOMEBREW_LINUX_DEFAULT_PREFIX").freeze
|
|
HOMEBREW_LINUX_DEFAULT_REPOSITORY = ENV.fetch("HOMEBREW_LINUX_DEFAULT_REPOSITORY").freeze
|
|
HOMEBREW_PREFIX_PLACEHOLDER = "$HOMEBREW_PREFIX"
|
|
# Needs a leading slash to avoid `File.expand.path` complaining about non-absolute home.
|
|
HOMEBREW_HOME_PLACEHOLDER = "/$HOME"
|
|
|
|
HOMEBREW_MACOS_NEWEST_UNSUPPORTED = ENV.fetch("HOMEBREW_MACOS_NEWEST_UNSUPPORTED").freeze
|
|
HOMEBREW_MACOS_OLDEST_SUPPORTED = ENV.fetch("HOMEBREW_MACOS_OLDEST_SUPPORTED").freeze
|
|
HOMEBREW_MACOS_OLDEST_ALLOWED = ENV.fetch("HOMEBREW_MACOS_OLDEST_ALLOWED").freeze
|
|
|
|
HOMEBREW_PULL_API_REGEX =
|
|
%r{https://api\.github\.com/repos/([\w-]+)/([\w-]+)?/pulls/(\d+)}.freeze
|
|
HOMEBREW_PULL_OR_COMMIT_URL_REGEX =
|
|
%r[https://github\.com/([\w-]+)/([\w-]+)?/(?:pull/(\d+)|commit/[0-9a-fA-F]{4,40})].freeze
|
|
HOMEBREW_BOTTLES_EXTNAME_REGEX = /\.([a-z0-9_]+)\.bottle\.(?:(\d+)\.)?tar\.gz$/.freeze
|
|
|
|
require "env_config"
|
|
require "macos_versions"
|
|
require "os"
|
|
require "messages"
|
|
require "default_prefix"
|
|
|
|
module Homebrew
|
|
extend FileUtils
|
|
|
|
DEFAULT_CELLAR = "#{DEFAULT_PREFIX}/Cellar"
|
|
DEFAULT_MACOS_CELLAR = "#{HOMEBREW_DEFAULT_PREFIX}/Cellar"
|
|
DEFAULT_MACOS_ARM_CELLAR = "#{HOMEBREW_MACOS_ARM_DEFAULT_PREFIX}/Cellar"
|
|
DEFAULT_LINUX_CELLAR = "#{HOMEBREW_LINUX_DEFAULT_PREFIX}/Cellar"
|
|
|
|
class << self
|
|
attr_writer :failed, :raise_deprecation_exceptions, :auditing
|
|
|
|
def default_prefix?(prefix = HOMEBREW_PREFIX)
|
|
prefix.to_s == DEFAULT_PREFIX
|
|
end
|
|
|
|
def failed?
|
|
@failed ||= false
|
|
@failed == true
|
|
end
|
|
|
|
def messages
|
|
@messages ||= Messages.new
|
|
end
|
|
|
|
def raise_deprecation_exceptions?
|
|
@raise_deprecation_exceptions == true
|
|
end
|
|
|
|
def auditing?
|
|
@auditing == true
|
|
end
|
|
|
|
def running_as_root?
|
|
@process_uid ||= Process.uid
|
|
@process_uid.zero?
|
|
end
|
|
|
|
def owner_uid
|
|
@owner_uid ||= HOMEBREW_BREW_FILE.stat.uid
|
|
end
|
|
|
|
def running_as_root_but_not_owned_by_root?
|
|
running_as_root? && !owner_uid.zero?
|
|
end
|
|
|
|
def auto_update_command?
|
|
ENV.fetch("HOMEBREW_AUTO_UPDATE_COMMAND", false).present?
|
|
end
|
|
end
|
|
end
|
|
|
|
require "context"
|
|
require "extend/array"
|
|
require "extend/git_repository"
|
|
require "extend/pathname"
|
|
require "extend/predicable"
|
|
require "extend/module"
|
|
require "cli/args"
|
|
|
|
require "PATH"
|
|
|
|
ENV["HOMEBREW_PATH"] ||= ENV.fetch("PATH")
|
|
ORIGINAL_PATHS = PATH.new(ENV.fetch("HOMEBREW_PATH")).map do |p|
|
|
Pathname.new(p).expand_path
|
|
rescue
|
|
nil
|
|
end.compact.freeze
|
|
|
|
require "system_command"
|
|
require "exceptions"
|
|
require "utils"
|
|
|
|
require "official_taps"
|
|
require "tap"
|
|
require "tap_constants"
|