From 30b24cf4ad661318a45653ff175c8f1364c1244c Mon Sep 17 00:00:00 2001 From: Bo Anderson Date: Sun, 3 Oct 2021 21:47:17 +0100 Subject: [PATCH] Use HOMEBREW_CURL universally, including formulae --- Library/Homebrew/brew.rb | 6 +++--- Library/Homebrew/brew.sh | 8 ++++++-- Library/Homebrew/cmd/update.sh | 16 ++++++++++++---- Library/Homebrew/extend/ENV/std.rb | 3 ++- Library/Homebrew/shims/linux/super/curl | 1 + Library/Homebrew/shims/linux/super/git | 2 +- Library/Homebrew/shims/linux/super/svn | 2 +- Library/Homebrew/shims/mac/super/curl | 1 + Library/Homebrew/shims/mac/super/git | 2 +- Library/Homebrew/shims/mac/super/svn | 2 +- Library/Homebrew/shims/shared/curl | 20 ++++++++++++++++++++ Library/Homebrew/shims/{scm => shared}/git | 0 Library/Homebrew/shims/{scm => shared}/svn | 0 Library/Homebrew/shims/super/curl | 1 + Library/Homebrew/shims/super/git | 2 +- Library/Homebrew/shims/super/svn | 2 +- Library/Homebrew/test/spec_helper.rb | 2 +- Library/Homebrew/test/utils/git_spec.rb | 4 ++-- Library/Homebrew/test/utils/svn_spec.rb | 4 ++-- Library/Homebrew/utils/curl.rb | 9 +-------- Library/Homebrew/utils/git.rb | 2 +- Library/Homebrew/utils/svn.rb | 2 +- 22 files changed, 60 insertions(+), 31 deletions(-) create mode 120000 Library/Homebrew/shims/linux/super/curl create mode 120000 Library/Homebrew/shims/mac/super/curl create mode 100755 Library/Homebrew/shims/shared/curl rename Library/Homebrew/shims/{scm => shared}/git (100%) rename Library/Homebrew/shims/{scm => shared}/svn (100%) create mode 120000 Library/Homebrew/shims/super/curl diff --git a/Library/Homebrew/brew.rb b/Library/Homebrew/brew.rb index 1d5d5c22f6..41120b0b04 100644 --- a/Library/Homebrew/brew.rb +++ b/Library/Homebrew/brew.rb @@ -77,9 +77,9 @@ begin path = PATH.new(ENV["PATH"]) homebrew_path = PATH.new(ENV["HOMEBREW_PATH"]) - # Add SCM wrappers. - path.prepend(HOMEBREW_SHIMS_PATH/"scm") - homebrew_path.prepend(HOMEBREW_SHIMS_PATH/"scm") + # Add shared wrappers. + path.prepend(HOMEBREW_SHIMS_PATH/"shared") + homebrew_path.prepend(HOMEBREW_SHIMS_PATH/"shared") ENV["PATH"] = path diff --git a/Library/Homebrew/brew.sh b/Library/Homebrew/brew.sh index 3be0d36d88..93b2fe0d45 100644 --- a/Library/Homebrew/brew.sh +++ b/Library/Homebrew/brew.sh @@ -165,8 +165,12 @@ brew() { "${HOMEBREW_BREW_FILE}" "$@" } +curl() { + "${HOMEBREW_LIBRARY}/Homebrew/shims/shared/curl" "$@" +} + git() { - "${HOMEBREW_LIBRARY}/Homebrew/shims/scm/git" "$@" + "${HOMEBREW_LIBRARY}/Homebrew/shims/shared/git" "$@" } # Search given executable in PATH (remove dependency for `which` command) @@ -554,7 +558,7 @@ else fi HOMEBREW_USER_AGENT="${HOMEBREW_PRODUCT}/${HOMEBREW_USER_AGENT_VERSION} (${HOMEBREW_SYSTEM}; ${HOMEBREW_PROCESSOR} ${HOMEBREW_OS_USER_AGENT_VERSION})" -curl_version_output="$("${HOMEBREW_CURL}" --version 2>/dev/null)" +curl_version_output="$(curl --version 2>/dev/null)" curl_name_and_version="${curl_version_output%% (*}" HOMEBREW_USER_AGENT_CURL="${HOMEBREW_USER_AGENT} ${curl_name_and_version// //}" diff --git a/Library/Homebrew/cmd/update.sh b/Library/Homebrew/cmd/update.sh index 8d496d1220..308149ffa5 100644 --- a/Library/Homebrew/cmd/update.sh +++ b/Library/Homebrew/cmd/update.sh @@ -18,12 +18,20 @@ # shellcheck disable=SC2154 source "${HOMEBREW_LIBRARY}/Homebrew/utils/lock.sh" -# Replaces the function in Library/Homebrew/brew.sh to cache the Git executable to -# provide speedup when using Git repeatedly (as update.sh does). +# Replaces the function in Library/Homebrew/brew.sh to cache the Curl/Git executable to +# provide speedup when using Curl/Git repeatedly (as update.sh does). +curl() { + if [[ -z "${CURL_EXECUTABLE}" ]] + then + CURL_EXECUTABLE="$("${HOMEBREW_LIBRARY}/Homebrew/shims/shared/curl" --homebrew=print-path)" + fi + "${CURL_EXECUTABLE}" "$@" +} + git() { if [[ -z "${GIT_EXECUTABLE}" ]] then - GIT_EXECUTABLE="$("${HOMEBREW_LIBRARY}/Homebrew/shims/scm/git" --homebrew=print-path)" + GIT_EXECUTABLE="$("${HOMEBREW_LIBRARY}/Homebrew/shims/shared/git" --homebrew=print-path)" fi "${GIT_EXECUTABLE}" "$@" } @@ -564,7 +572,7 @@ EOS # HOMEBREW_CURL is set by brew.sh (and isn't mispelt here) # shellcheck disable=SC2153 UPSTREAM_SHA_HTTP_CODE="$( - "${HOMEBREW_CURL}" \ + curl \ "${CURL_DISABLE_CURLRC_ARGS[@]}" \ --silent --max-time 3 \ --location --no-remote-time --output /dev/null --write-out "%{http_code}" \ diff --git a/Library/Homebrew/extend/ENV/std.rb b/Library/Homebrew/extend/ENV/std.rb index 9434fe0674..5f6b5b38f4 100644 --- a/Library/Homebrew/extend/ENV/std.rb +++ b/Library/Homebrew/extend/ENV/std.rb @@ -28,7 +28,8 @@ module Stdenv self["HOMEBREW_ENV"] = "std" - PATH.new(ENV["HOMEBREW_PATH"]).each { |p| prepend_path "PATH", p } + PATH.new(ENV["HOMEBREW_PATH"]).reverse_each { |p| prepend_path "PATH", p } + prepend_path "PATH", HOMEBREW_SHIMS_PATH/"shared" # Set the default pkg-config search path, overriding the built-in paths # Anything in PKG_CONFIG_PATH is searched before paths in this variable diff --git a/Library/Homebrew/shims/linux/super/curl b/Library/Homebrew/shims/linux/super/curl new file mode 120000 index 0000000000..738ce24902 --- /dev/null +++ b/Library/Homebrew/shims/linux/super/curl @@ -0,0 +1 @@ +../../shared/curl \ No newline at end of file diff --git a/Library/Homebrew/shims/linux/super/git b/Library/Homebrew/shims/linux/super/git index 383ac245fa..75745c6e7e 120000 --- a/Library/Homebrew/shims/linux/super/git +++ b/Library/Homebrew/shims/linux/super/git @@ -1 +1 @@ -../../scm/git \ No newline at end of file +../../shared/git \ No newline at end of file diff --git a/Library/Homebrew/shims/linux/super/svn b/Library/Homebrew/shims/linux/super/svn index 50a0b671ba..024c5c33b1 120000 --- a/Library/Homebrew/shims/linux/super/svn +++ b/Library/Homebrew/shims/linux/super/svn @@ -1 +1 @@ -../../scm/svn \ No newline at end of file +../../shared/svn \ No newline at end of file diff --git a/Library/Homebrew/shims/mac/super/curl b/Library/Homebrew/shims/mac/super/curl new file mode 120000 index 0000000000..738ce24902 --- /dev/null +++ b/Library/Homebrew/shims/mac/super/curl @@ -0,0 +1 @@ +../../shared/curl \ No newline at end of file diff --git a/Library/Homebrew/shims/mac/super/git b/Library/Homebrew/shims/mac/super/git index 383ac245fa..75745c6e7e 120000 --- a/Library/Homebrew/shims/mac/super/git +++ b/Library/Homebrew/shims/mac/super/git @@ -1 +1 @@ -../../scm/git \ No newline at end of file +../../shared/git \ No newline at end of file diff --git a/Library/Homebrew/shims/mac/super/svn b/Library/Homebrew/shims/mac/super/svn index 50a0b671ba..024c5c33b1 120000 --- a/Library/Homebrew/shims/mac/super/svn +++ b/Library/Homebrew/shims/mac/super/svn @@ -1 +1 @@ -../../scm/svn \ No newline at end of file +../../shared/svn \ No newline at end of file diff --git a/Library/Homebrew/shims/shared/curl b/Library/Homebrew/shims/shared/curl new file mode 100755 index 0000000000..f163423579 --- /dev/null +++ b/Library/Homebrew/shims/shared/curl @@ -0,0 +1,20 @@ +#!/bin/bash + +# Make our $HOMEBREW_CURL selection universal - including in formulae usage. + +# HOMEBREW_LIBRARY is set by bin/brew +# HOMEBREW_CURL is set by brew.sh +# shellcheck disable=SC2154 +if [[ -z "${HOMEBREW_LIBRARY}" ]] +then + echo "${0##*/}: This shim is internal and must be run via brew." >&2 + exit 1 +fi + +source "${HOMEBREW_LIBRARY}/Homebrew/shims/utils.sh" + +try_exec_non_system "${HOMEBREW_CURL:-curl}" "$@" +safe_exec "/usr/bin/curl" "$@" + +echo "Could not execute curl. Try HOMEBREW_FORCE_BREWED_CURL=1" >&2 +exit 1 diff --git a/Library/Homebrew/shims/scm/git b/Library/Homebrew/shims/shared/git similarity index 100% rename from Library/Homebrew/shims/scm/git rename to Library/Homebrew/shims/shared/git diff --git a/Library/Homebrew/shims/scm/svn b/Library/Homebrew/shims/shared/svn similarity index 100% rename from Library/Homebrew/shims/scm/svn rename to Library/Homebrew/shims/shared/svn diff --git a/Library/Homebrew/shims/super/curl b/Library/Homebrew/shims/super/curl new file mode 120000 index 0000000000..c7d8a6e0a6 --- /dev/null +++ b/Library/Homebrew/shims/super/curl @@ -0,0 +1 @@ +../shared/curl \ No newline at end of file diff --git a/Library/Homebrew/shims/super/git b/Library/Homebrew/shims/super/git index ba71181a5e..408fa26f21 120000 --- a/Library/Homebrew/shims/super/git +++ b/Library/Homebrew/shims/super/git @@ -1 +1 @@ -../scm/git \ No newline at end of file +../shared/git \ No newline at end of file diff --git a/Library/Homebrew/shims/super/svn b/Library/Homebrew/shims/super/svn index e1231dfaaa..1acb8f6ab7 120000 --- a/Library/Homebrew/shims/super/svn +++ b/Library/Homebrew/shims/super/svn @@ -1 +1 @@ -../scm/svn \ No newline at end of file +../shared/svn \ No newline at end of file diff --git a/Library/Homebrew/test/spec_helper.rb b/Library/Homebrew/test/spec_helper.rb index cfe778f7c5..8655b1c94a 100644 --- a/Library/Homebrew/test/spec_helper.rb +++ b/Library/Homebrew/test/spec_helper.rb @@ -146,7 +146,7 @@ RSpec.configure do |config| end config.before(:each, :needs_svn) do - svn_shim = HOMEBREW_SHIMS_PATH/"scm/svn" + svn_shim = HOMEBREW_SHIMS_PATH/"shared/svn" skip "Subversion is not installed." unless quiet_system svn_shim, "--version" svn_shim_path = Pathname(Utils.popen_read(svn_shim, "--homebrew=print-path").chomp.presence) diff --git a/Library/Homebrew/test/utils/git_spec.rb b/Library/Homebrew/test/utils/git_spec.rb index 6f2ede3227..8b8d1ae6d7 100644 --- a/Library/Homebrew/test/utils/git_spec.rb +++ b/Library/Homebrew/test/utils/git_spec.rb @@ -12,7 +12,7 @@ describe Utils::Git do end before do - git = HOMEBREW_SHIMS_PATH/"scm/git" + git = HOMEBREW_SHIMS_PATH/"shared/git" HOMEBREW_CACHE.cd do system git, "init" @@ -201,7 +201,7 @@ describe Utils::Git do context "when git is available" do it "returns true when git remote exists", :needs_network do - git = HOMEBREW_SHIMS_PATH/"scm/git" + git = HOMEBREW_SHIMS_PATH/"shared/git" url = "https://github.com/Homebrew/homebrew.github.io" repo = HOMEBREW_CACHE/"hey" repo.mkpath diff --git a/Library/Homebrew/test/utils/svn_spec.rb b/Library/Homebrew/test/utils/svn_spec.rb index a5a4482ef2..ff1014af3d 100644 --- a/Library/Homebrew/test/utils/svn_spec.rb +++ b/Library/Homebrew/test/utils/svn_spec.rb @@ -10,7 +10,7 @@ describe Utils::Svn do describe "::available?" do it "returns svn version if svn available" do - if quiet_system "#{HOMEBREW_SHIMS_PATH}/scm/svn", "--version" + if quiet_system "#{HOMEBREW_SHIMS_PATH}/shared/svn", "--version" expect(described_class).to be_available else expect(described_class).not_to be_available @@ -20,7 +20,7 @@ describe Utils::Svn do describe "::version" do it "returns svn version if svn available" do - if quiet_system "#{HOMEBREW_SHIMS_PATH}/scm/svn", "--version" + if quiet_system "#{HOMEBREW_SHIMS_PATH}/shared/svn", "--version" expect(described_class.version).to match(/^\d+\.\d+\.\d+$/) else expect(described_class.version).to be_nil diff --git a/Library/Homebrew/utils/curl.rb b/Library/Homebrew/utils/curl.rb index 6d3049d5d3..35f6b2651e 100644 --- a/Library/Homebrew/utils/curl.rb +++ b/Library/Homebrew/utils/curl.rb @@ -19,14 +19,7 @@ module Utils def curl_executable(use_homebrew_curl: false) return Formula["curl"].opt_bin/"curl" if use_homebrew_curl - @curl ||= [ - ENV["HOMEBREW_CURL"], - which("curl"), - "/usr/bin/curl", - ].compact.map { |c| Pathname(c) }.find(&:executable?) - raise "No executable `curl` was found" unless @curl - - @curl + @curl_executable ||= HOMEBREW_SHIMS_PATH/"shared/curl" end sig { diff --git a/Library/Homebrew/utils/git.rb b/Library/Homebrew/utils/git.rb index 536bd01d33..3abf4f9c6d 100644 --- a/Library/Homebrew/utils/git.rb +++ b/Library/Homebrew/utils/git.rb @@ -30,7 +30,7 @@ module Utils def git return @git if defined?(@git) - @git = HOMEBREW_SHIMS_PATH/"scm/git" + @git = HOMEBREW_SHIMS_PATH/"shared/git" end def remote_exists?(url) diff --git a/Library/Homebrew/utils/svn.rb b/Library/Homebrew/utils/svn.rb index e6f9fcd228..4c57e04832 100644 --- a/Library/Homebrew/utils/svn.rb +++ b/Library/Homebrew/utils/svn.rb @@ -22,7 +22,7 @@ module Utils def version return @version if defined?(@version) - stdout, _, status = system_command(HOMEBREW_SHIMS_PATH/"scm/svn", args: ["--version"], print_stderr: false) + stdout, _, status = system_command(HOMEBREW_SHIMS_PATH/"shared/svn", args: ["--version"], print_stderr: false) @version = status.success? ? stdout.chomp[/svn, version (\d+(?:\.\d+)*)/, 1] : nil end