Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow HOMEBREW_CURLRC to specify a path for curl --config #15853

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 4 additions & 3 deletions Library/Homebrew/env_config.rb
Original file line number Diff line number Diff line change
Expand Up @@ -132,9 +132,10 @@ module EnvConfig
boolean: true,
},
HOMEBREW_CURLRC: {
description: "If set, do not pass `--disable` when invoking `curl`(1), which disables the " \
"use of `curlrc`.",
boolean: true,
description: "If set to an absolute path (i.e. beginning with `/`), pass it with `--config` when invoking " \
"`curl`(1). " \
"If set but _not_ a valid path, do not pass `--disable`, which disables the " \
"use of `.curlrc`.",
},
HOMEBREW_DEBUG: {
description: "If set, always assume `--debug` when running commands.",
Expand Down
4 changes: 2 additions & 2 deletions Library/Homebrew/env_config.rbi
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ module Homebrew::EnvConfig
sig { returns(T::Boolean) }
def self.curl_verbose?; end

sig { returns(T::Boolean) }
def self.curlrc?; end
sig { returns(T.nilable(String)) }
def self.curlrc; end

sig { returns(T::Boolean) }
def self.debug?; end
Expand Down
18 changes: 17 additions & 1 deletion Library/Homebrew/test/utils/curl_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -313,11 +313,27 @@
expect(curl_args(*args).first).to eq("--disable")
end

it "doesn't return `--disable` as the first argument when HOMEBREW_CURLRC is set" do
it "doesn't return `--disable` as the first argument when HOMEBREW_CURLRC is set but not a path" do
ENV["HOMEBREW_CURLRC"] = "1"
expect(curl_args(*args).first).not_to eq("--disable")
end

it "doesn't return `--config` when HOMEBREW_CURLRC is unset" do
expect(curl_args(*args)).not_to include(a_string_starting_with("--config"))
end

it "returns `--config` when HOMEBREW_CURLRC is a valid path" do
Tempfile.create do |tmpfile|
path = tmpfile.path
ENV["HOMEBREW_CURLRC"] = path
# We still expect --disable
expect(curl_args(*args).first).to eq("--disable")
expect(curl_args(*args).join(" ")).to include("--config #{path}")
end
ensure
ENV["HOMEBREW_CURLRC"] = nil
end

it "uses `--connect-timeout` when `:connect_timeout` is Numeric" do
expect(curl_args(*args, connect_timeout: 123).join(" ")).to include("--connect-timeout 123")
expect(curl_args(*args, connect_timeout: 123.4).join(" ")).to include("--connect-timeout 123.4")
Expand Down
11 changes: 10 additions & 1 deletion Library/Homebrew/utils/curl.rb
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,16 @@ def curl_args(
args = []

# do not load .curlrc unless requested (must be the first argument)
args << "--disable" unless Homebrew::EnvConfig.curlrc?
curlrc = Homebrew::EnvConfig.curlrc
if curlrc&.start_with?("/")
# If the file exists, we still want to disable loading the default curlrc.
args << "--disable" << "--config" << curlrc
elsif curlrc
# This matches legacy behavior: `HOMEBREW_CURLRC` was a bool,
# omitting `--disable` when present.
else
args << "--disable"
end

# echo any cookies received on a redirect
args << "--cookie" << "/dev/null"
Expand Down
2 changes: 1 addition & 1 deletion docs/Manpage.md
Original file line number Diff line number Diff line change
Expand Up @@ -2176,7 +2176,7 @@ prefix-specific files take precedence over system-wide files (unless
<br>If set, pass `--verbose` when invoking `curl`(1).

- `HOMEBREW_CURLRC`
<br>If set, do not pass `--disable` when invoking `curl`(1), which disables the use of `curlrc`.
<br>If set to an absolute path (i.e. beginning with `/`), pass it with `--config` when invoking `curl`(1). If set but _not_ a valid path, do not pass `--disable`, which disables the use of `.curlrc`.

- `HOMEBREW_DEBUG`
<br>If set, always assume `--debug` when running commands.
Expand Down
2 changes: 1 addition & 1 deletion manpages/brew.1
Original file line number Diff line number Diff line change
Expand Up @@ -3149,7 +3149,7 @@ If set, pass \fB\-\-verbose\fR when invoking \fBcurl\fR(1)\.
\fBHOMEBREW_CURLRC\fR
.
.br
If set, do not pass \fB\-\-disable\fR when invoking \fBcurl\fR(1), which disables the use of \fBcurlrc\fR\.
If set to an absolute path (i\.e\. beginning with \fB/\fR), pass it with \fB\-\-config\fR when invoking \fBcurl\fR(1)\. If set but \fInot\fR a valid path, do not pass \fB\-\-disable\fR, which disables the use of \fB\.curlrc\fR\.
.
.TP
\fBHOMEBREW_DEBUG\fR
Expand Down