Merge pull request #5182 from EricFromCanada/prepend-shims-path

Prepend shims path to PATH used by `system` and `safe_system`
This commit is contained in:
Mike McQuaid 2018-10-29 13:39:41 +00:00 committed by GitHub
commit 033386a75e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 51 additions and 43 deletions

View File

@ -37,8 +37,8 @@ begin
homebrew_path = PATH.new(ENV["HOMEBREW_PATH"]) homebrew_path = PATH.new(ENV["HOMEBREW_PATH"])
# Add SCM wrappers. # Add SCM wrappers.
path.append(HOMEBREW_SHIMS_PATH/"scm") path.prepend(HOMEBREW_SHIMS_PATH/"scm")
homebrew_path.append(HOMEBREW_SHIMS_PATH/"scm") homebrew_path.prepend(HOMEBREW_SHIMS_PATH/"scm")
ENV["PATH"] = path ENV["PATH"] = path

View File

@ -55,6 +55,12 @@ git() {
"$HOMEBREW_LIBRARY/Homebrew/shims/scm/git" "$@" "$HOMEBREW_LIBRARY/Homebrew/shims/scm/git" "$@"
} }
numeric() {
# Condense the exploded argument into a single return value.
# shellcheck disable=SC2086,SC2183
printf "%01d%02d%02d%02d" ${1//./ }
}
HOMEBREW_VERSION="$(git -C "$HOMEBREW_REPOSITORY" describe --tags --dirty --abbrev=7 2>/dev/null)" HOMEBREW_VERSION="$(git -C "$HOMEBREW_REPOSITORY" describe --tags --dirty --abbrev=7 2>/dev/null)"
HOMEBREW_USER_AGENT_VERSION="$HOMEBREW_VERSION" HOMEBREW_USER_AGENT_VERSION="$HOMEBREW_VERSION"
if [[ -z "$HOMEBREW_VERSION" ]] if [[ -z "$HOMEBREW_VERSION" ]]
@ -99,7 +105,8 @@ then
HOMEBREW_FORCE_BREWED_CURL="1" HOMEBREW_FORCE_BREWED_CURL="1"
fi fi
# The system Git is too old for some Homebrew functionality we rely on. # The system Git on macOS versions before Sierra is too old for some Homebrew functionality we rely on.
HOMEBREW_MINIMUM_GIT_VERSION="2.14.3"
if [[ "$HOMEBREW_MACOS_VERSION_NUMERIC" -lt "101200" ]] if [[ "$HOMEBREW_MACOS_VERSION_NUMERIC" -lt "101200" ]]
then then
HOMEBREW_FORCE_BREWED_GIT="1" HOMEBREW_FORCE_BREWED_GIT="1"
@ -114,6 +121,25 @@ else
: "${HOMEBREW_OS_VERSION:=$(uname -r)}" : "${HOMEBREW_OS_VERSION:=$(uname -r)}"
HOMEBREW_OS_USER_AGENT_VERSION="$HOMEBREW_OS_VERSION" HOMEBREW_OS_USER_AGENT_VERSION="$HOMEBREW_OS_VERSION"
# Ensure the system Curl is a version that supports modern HTTPS certificates.
HOMEBREW_MINIMUM_CURL_VERSION="7.41.0"
system_curl_version_output="$($(command -v curl) --version 2>/dev/null)"
system_curl_name_and_version="${system_curl_version_output%% (*}"
if [[ $(numeric "${system_curl_name_and_version##* }") -lt $(numeric "$HOMEBREW_MINIMUM_CURL_VERSION") ]]
then
HOMEBREW_SYSTEM_CURL_TOO_OLD="1"
HOMEBREW_FORCE_BREWED_CURL="1"
fi
# Ensure the system Git is at or newer than the minimum required version.
# Git 2.7.4 is the version of git on Ubuntu 16.04 LTS (Xenial Xerus).
HOMEBREW_MINIMUM_GIT_VERSION="2.7.0"
system_git_version_output="$($(command -v git) --version 2>/dev/null)"
if [[ $(numeric "${system_git_version_output##* }") -lt $(numeric "$HOMEBREW_MINIMUM_GIT_VERSION") ]]
then
HOMEBREW_FORCE_BREWED_GIT="1"
fi
CACHE_HOME="${XDG_CACHE_HOME:-${HOME}/.cache}" CACHE_HOME="${XDG_CACHE_HOME:-${HOME}/.cache}"
HOMEBREW_CACHE="${HOMEBREW_CACHE:-${CACHE_HOME}/Homebrew}" HOMEBREW_CACHE="${HOMEBREW_CACHE:-${CACHE_HOME}/Homebrew}"
HOMEBREW_SYSTEM_TEMP="/tmp" HOMEBREW_SYSTEM_TEMP="/tmp"
@ -153,8 +179,9 @@ else
fi fi
HOMEBREW_USER_AGENT="$HOMEBREW_PRODUCT/$HOMEBREW_USER_AGENT_VERSION ($HOMEBREW_SYSTEM; $HOMEBREW_PROCESSOR $HOMEBREW_OS_USER_AGENT_VERSION)" HOMEBREW_USER_AGENT="$HOMEBREW_PRODUCT/$HOMEBREW_USER_AGENT_VERSION ($HOMEBREW_SYSTEM; $HOMEBREW_PROCESSOR $HOMEBREW_OS_USER_AGENT_VERSION)"
HOMEBREW_CURL_VERSION="$("$HOMEBREW_CURL" --version 2>/dev/null | head -n1 | awk '{print $1"/"$2}')" curl_version_output="$("$HOMEBREW_CURL" --version 2>/dev/null)"
HOMEBREW_USER_AGENT_CURL="$HOMEBREW_USER_AGENT $HOMEBREW_CURL_VERSION" curl_name_and_version="${curl_version_output%% (*}"
HOMEBREW_USER_AGENT_CURL="$HOMEBREW_USER_AGENT ${curl_name_and_version// //}"
# Declared in bin/brew # Declared in bin/brew
export HOMEBREW_BREW_FILE export HOMEBREW_BREW_FILE
@ -172,6 +199,7 @@ export HOMEBREW_SYSTEM
export HOMEBREW_CURL export HOMEBREW_CURL
export HOMEBREW_SYSTEM_CURL_TOO_OLD export HOMEBREW_SYSTEM_CURL_TOO_OLD
export HOMEBREW_GIT export HOMEBREW_GIT
export HOMEBREW_MINIMUM_GIT_VERSION
export HOMEBREW_PROCESSOR export HOMEBREW_PROCESSOR
export HOMEBREW_PRODUCT export HOMEBREW_PRODUCT
export HOMEBREW_OS_VERSION export HOMEBREW_OS_VERSION

View File

@ -489,8 +489,7 @@ module Homebrew
end end
def check_git_version def check_git_version
# System Git version on macOS Sierra. minimum_version = ENV["HOMEBREW_MINIMUM_GIT_VERSION"].freeze
minimum_version = "2.14.3".freeze
return unless Utils.git_available? return unless Utils.git_available?
return if Version.create(Utils.git_version) >= Version.create(minimum_version) return if Version.create(Utils.git_version) >= Version.create(minimum_version)

View File

@ -10,7 +10,7 @@
# When done, regenerate the man page and its HTML version by running `brew man`. # When done, regenerate the man page and its HTML version by running `brew man`.
%> %>
brew(1) -- The missing package manager for macOS brew(1) -- The missing package manager for macOS
=============================================== ================================================
## SYNOPSIS ## SYNOPSIS
@ -105,6 +105,7 @@ can take several different forms:
The formula file will be cached for later use. The formula file will be cached for later use.
## ENVIRONMENT ## ENVIRONMENT
Note that environment variables must have a value set to be detected. For example, `export HOMEBREW_NO_INSECURE_REDIRECT=1` rather than just `export HOMEBREW_NO_INSECURE_REDIRECT`. Note that environment variables must have a value set to be detected. For example, `export HOMEBREW_NO_INSECURE_REDIRECT=1` rather than just `export HOMEBREW_NO_INSECURE_REDIRECT`.
* `HOMEBREW_ARTIFACT_DOMAIN`: * `HOMEBREW_ARTIFACT_DOMAIN`:
@ -180,22 +181,16 @@ Note that environment variables must have a value set to be detected. For exampl
editors will do strange things in this case. editors will do strange things in this case.
* `HOMEBREW_FORCE_BREWED_CURL`: * `HOMEBREW_FORCE_BREWED_CURL`:
If set, Homebrew will use a Homebrew-installed `curl` rather than the If set, Homebrew will always use a Homebrew-installed `curl` rather than the
system version. system version. Automatically set if the system version of `curl` is too old.
* `HOMEBREW_FORCE_VENDOR_RUBY`: * `HOMEBREW_FORCE_VENDOR_RUBY`:
If set, Homebrew will always use its vendored, relocatable Ruby version If set, Homebrew will always use its vendored, relocatable Ruby version
even if the system version of Ruby is new enough. even if the system version of Ruby is new enough.
* `HOMEBREW_GIT`:
When using Git, Homebrew will use `GIT` if set,
a Homebrew-built Git if installed, or the system-provided binary.
Set this to force Homebrew to use a particular git binary.
* `HOMEBREW_FORCE_BREWED_GIT`: * `HOMEBREW_FORCE_BREWED_GIT`:
If set, Homebrew will use a Homebrew-installed `git` rather than the If set, Homebrew will always use a Homebrew-installed `git` rather than the
system version. system version. Automatically set if the system version of `git` is too old.
* `HOMEBREW_GITHUB_API_TOKEN`: * `HOMEBREW_GITHUB_API_TOKEN`:
A personal access token for the GitHub API, which you can create at A personal access token for the GitHub API, which you can create at

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
# This script because we support $GIT, $HOMEBREW_SVN, etc., Xcode-only and # This script because we support $HOMEBREW_GIT, $HOMEBREW_SVN, etc., Xcode-only and
# no Xcode/CLT configurations. Order is careful to be what the user would want. # no Xcode/CLT configurations. Order is careful to be what the user would want.
set +o posix set +o posix

View File

@ -123,7 +123,6 @@ class SystemConfig
HOMEBREW_CACHE: "#{ENV["HOME"]}/Library/Caches/Homebrew", HOMEBREW_CACHE: "#{ENV["HOME"]}/Library/Caches/Homebrew",
HOMEBREW_TEMP: ENV["HOMEBREW_SYSTEM_TEMP"], HOMEBREW_TEMP: ENV["HOMEBREW_SYSTEM_TEMP"],
HOMEBREW_RUBY_WARNINGS: "-W0", HOMEBREW_RUBY_WARNINGS: "-W0",
HOMEBREW_GIT: "git",
}.freeze }.freeze
boring_keys = %w[ boring_keys = %w[
HOMEBREW_BROWSER HOMEBREW_BROWSER
@ -137,10 +136,12 @@ class SystemConfig
HOMEBREW_BREW_FILE HOMEBREW_BREW_FILE
HOMEBREW_COMMAND_DEPTH HOMEBREW_COMMAND_DEPTH
HOMEBREW_CURL HOMEBREW_CURL
HOMEBREW_GIT
HOMEBREW_GIT_CONFIG_FILE HOMEBREW_GIT_CONFIG_FILE
HOMEBREW_LIBRARY HOMEBREW_LIBRARY
HOMEBREW_MACOS_VERSION HOMEBREW_MACOS_VERSION
HOMEBREW_MACOS_VERSION_NUMERIC HOMEBREW_MACOS_VERSION_NUMERIC
HOMEBREW_MINIMUM_GIT_VERSION
HOMEBREW_RUBY_PATH HOMEBREW_RUBY_PATH
HOMEBREW_SYSTEM HOMEBREW_SYSTEM
HOMEBREW_SYSTEM_TEMP HOMEBREW_SYSTEM_TEMP
@ -168,9 +169,6 @@ class SystemConfig
if defaults_hash[:HOMEBREW_RUBY_WARNINGS] != ENV["HOMEBREW_RUBY_WARNINGS"].to_s if defaults_hash[:HOMEBREW_RUBY_WARNINGS] != ENV["HOMEBREW_RUBY_WARNINGS"].to_s
f.puts "HOMEBREW_RUBY_WARNINGS: #{ENV["HOMEBREW_RUBY_WARNINGS"]}" f.puts "HOMEBREW_RUBY_WARNINGS: #{ENV["HOMEBREW_RUBY_WARNINGS"]}"
end end
if defaults_hash[:HOMEBREW_GIT] != ENV["HOMEBREW_GIT"].to_s
f.puts "HOMEBREW_GIT: #{ENV["HOMEBREW_GIT"]}"
end
unless ENV["HOMEBREW_ENV"] unless ENV["HOMEBREW_ENV"]
ENV.sort.each do |key, value| ENV.sort.each do |key, value|
next unless key.start_with?("HOMEBREW_") next unless key.start_with?("HOMEBREW_")

View File

@ -1,5 +1,5 @@
brew(1) -- The missing package manager for macOS brew(1) -- The missing package manager for macOS
=============================================== ================================================
## SYNOPSIS ## SYNOPSIS
@ -1100,6 +1100,7 @@ can take several different forms:
The formula file will be cached for later use. The formula file will be cached for later use.
## ENVIRONMENT ## ENVIRONMENT
Note that environment variables must have a value set to be detected. For example, `export HOMEBREW_NO_INSECURE_REDIRECT=1` rather than just `export HOMEBREW_NO_INSECURE_REDIRECT`. Note that environment variables must have a value set to be detected. For example, `export HOMEBREW_NO_INSECURE_REDIRECT=1` rather than just `export HOMEBREW_NO_INSECURE_REDIRECT`.
* `HOMEBREW_ARTIFACT_DOMAIN`: * `HOMEBREW_ARTIFACT_DOMAIN`:
@ -1175,22 +1176,16 @@ Note that environment variables must have a value set to be detected. For exampl
editors will do strange things in this case. editors will do strange things in this case.
* `HOMEBREW_FORCE_BREWED_CURL`: * `HOMEBREW_FORCE_BREWED_CURL`:
If set, Homebrew will use a Homebrew-installed `curl` rather than the If set, Homebrew will always use a Homebrew-installed `curl` rather than the
system version. system version. Automatically set if the system version of `curl` is too old.
* `HOMEBREW_FORCE_VENDOR_RUBY`: * `HOMEBREW_FORCE_VENDOR_RUBY`:
If set, Homebrew will always use its vendored, relocatable Ruby version If set, Homebrew will always use its vendored, relocatable Ruby version
even if the system version of Ruby is new enough. even if the system version of Ruby is new enough.
* `HOMEBREW_GIT`:
When using Git, Homebrew will use `GIT` if set,
a Homebrew-built Git if installed, or the system-provided binary.
Set this to force Homebrew to use a particular git binary.
* `HOMEBREW_FORCE_BREWED_GIT`: * `HOMEBREW_FORCE_BREWED_GIT`:
If set, Homebrew will use a Homebrew-installed `git` rather than the If set, Homebrew will always use a Homebrew-installed `git` rather than the
system version. system version. Automatically set if the system version of `git` is too old.
* `HOMEBREW_GITHUB_API_TOKEN`: * `HOMEBREW_GITHUB_API_TOKEN`:
A personal access token for the GitHub API, which you can create at A personal access token for the GitHub API, which you can create at

View File

@ -1297,22 +1297,15 @@ If set, Homebrew will use this editor when editing a single formula, or several
. .
.TP .TP
\fBHOMEBREW_FORCE_BREWED_CURL\fR \fBHOMEBREW_FORCE_BREWED_CURL\fR
If set, Homebrew will use a Homebrew\-installed \fBcurl\fR rather than the system version\. If set, Homebrew will always use a Homebrew\-installed \fBcurl\fR rather than the system version\. Automatically set if the system version of \fBcurl\fR is too old\.
. .
.TP .TP
\fBHOMEBREW_FORCE_VENDOR_RUBY\fR \fBHOMEBREW_FORCE_VENDOR_RUBY\fR
If set, Homebrew will always use its vendored, relocatable Ruby version even if the system version of Ruby is new enough\. If set, Homebrew will always use its vendored, relocatable Ruby version even if the system version of Ruby is new enough\.
. .
.TP .TP
\fBHOMEBREW_GIT\fR
When using Git, Homebrew will use \fBGIT\fR if set, a Homebrew\-built Git if installed, or the system\-provided binary\.
.
.IP
Set this to force Homebrew to use a particular git binary\.
.
.TP
\fBHOMEBREW_FORCE_BREWED_GIT\fR \fBHOMEBREW_FORCE_BREWED_GIT\fR
If set, Homebrew will use a Homebrew\-installed \fBgit\fR rather than the system version\. If set, Homebrew will always use a Homebrew\-installed \fBgit\fR rather than the system version\. Automatically set if the system version of \fBgit\fR is too old\.
. .
.TP .TP
\fBHOMEBREW_GITHUB_API_TOKEN\fR \fBHOMEBREW_GITHUB_API_TOKEN\fR