From 8862c33b6297b750739fb98b1c51b02f9fb60f65 Mon Sep 17 00:00:00 2001 From: Issy Long Date: Mon, 6 Mar 2023 23:52:55 +0000 Subject: [PATCH 1/8] sorbet: Autogenerate the RBI file for `Homebrew::EnvConfig` - I'm not as happy with this as I was with my work on `utils/tty.rb`, it feels a lot hackier and prone to breaking - especially the `T.nilable` "detection". - However, it generates an RBI file that passes `brew typecheck`, so we can clean up some `hidden-definitions` entries, getting further towards fully typed. --- Library/Homebrew/dev-cmd/typecheck.rb | 1 + Library/Homebrew/env_config.rbi | 235 +++++++++++++++++- Library/Homebrew/formula.rb | 2 +- .../sorbet/custom_generators/env_config.rb | 46 ++++ .../sorbet/rbi/hidden-definitions/hidden.rbi | 156 ------------ 5 files changed, 282 insertions(+), 158 deletions(-) create mode 100644 Library/Homebrew/sorbet/custom_generators/env_config.rb diff --git a/Library/Homebrew/dev-cmd/typecheck.rb b/Library/Homebrew/dev-cmd/typecheck.rb index 1bd80123a9..0554a39f38 100644 --- a/Library/Homebrew/dev-cmd/typecheck.rb +++ b/Library/Homebrew/dev-cmd/typecheck.rb @@ -66,6 +66,7 @@ module Homebrew ohai "Updating homegrown RBI files..." safe_system "bundle", "exec", "ruby", "sorbet/custom_generators/tty.rb" + safe_system "bundle", "exec", "ruby", "sorbet/custom_generators/env_config.rb" ohai "Updating Tapioca RBI files..." safe_system "bundle", "exec", "tapioca", "gem", *tapioca_args diff --git a/Library/Homebrew/env_config.rbi b/Library/Homebrew/env_config.rbi index a822719989..e36f4ee557 100644 --- a/Library/Homebrew/env_config.rbi +++ b/Library/Homebrew/env_config.rbi @@ -1,7 +1,240 @@ # typed: strict module Homebrew::EnvConfig - # This is necessary due to https://github.com/sorbet/sorbet/issues/6726 sig { returns(String) } + def self.additional_google_analytics_id; end + + sig { returns(String) } + def self.all_proxy; end + + sig { returns(Integer) } def self.api_auto_update_secs; end + + sig { returns(String) } + def self.api_domain; end + + sig { returns(String) } + def self.arch; end + + sig { returns(String) } + def self.artifact_domain; end + + sig { returns(String) } + def self.auto_update_secs; end + + sig { returns(T::Boolean) } + def self.autoremove?; end + + sig { returns(T::Boolean) } + def self.bat?; end + + sig { returns(String) } + def self.bat_config_path; end + + sig { returns(String) } + def self.bat_theme; end + + sig { returns(T::Boolean) } + def self.bootsnap?; end + + sig { returns(String) } + def self.bottle_domain; end + + sig { returns(String) } + def self.brew_git_remote; end + + sig { returns(T.nilable(String)) } + def self.browser; end + + sig { returns(String) } + def self.cache; end + + sig { returns(Integer) } + def self.cleanup_max_age_days; end + + sig { returns(Integer) } + def self.cleanup_periodic_full_days; end + + sig { returns(T::Boolean) } + def self.color?; end + + sig { returns(String) } + def self.core_git_remote; end + + sig { returns(String) } + def self.curl_path; end + + sig { returns(Integer) } + def self.curl_retries; end + + sig { returns(T::Boolean) } + def self.curl_verbose?; end + + sig { returns(T::Boolean) } + def self.curlrc?; end + + sig { returns(T::Boolean) } + def self.debug?; end + + sig { returns(T::Boolean) } + def self.developer?; end + + sig { returns(T::Boolean) } + def self.disable_load_formula?; end + + sig { returns(String) } + def self.display; end + + sig { returns(T::Boolean) } + def self.display_install_times?; end + + sig { returns(String) } + def self.docker_registry_basic_auth_token; end + + sig { returns(String) } + def self.docker_registry_token; end + + sig { returns(T.nilable(String)) } + def self.editor; end + + sig { returns(T::Boolean) } + def self.eval_all?; end + + sig { returns(Integer) } + def self.fail_log_lines; end + + sig { returns(String) } + def self.forbidden_licenses; end + + sig { returns(T::Boolean) } + def self.force_brewed_ca_certificates?; end + + sig { returns(T::Boolean) } + def self.force_brewed_curl?; end + + sig { returns(T::Boolean) } + def self.force_brewed_git?; end + + sig { returns(T::Boolean) } + def self.force_vendor_ruby?; end + + sig { returns(String) } + def self.ftp_proxy; end + + sig { returns(String) } + def self.git_email; end + + sig { returns(String) } + def self.git_name; end + + sig { returns(String) } + def self.git_path; end + + sig { returns(T.nilable(String)) } + def self.github_api_token; end + + sig { returns(String) } + def self.github_packages_token; end + + sig { returns(String) } + def self.github_packages_user; end + + sig { returns(String) } + def self.http_proxy; end + + sig { returns(String) } + def self.https_proxy; end + + sig { returns(String) } + def self.install_badge; end + + sig { returns(String) } + def self.livecheck_watchlist; end + + sig { returns(String) } + def self.logs; end + + sig { returns(T::Boolean) } + def self.no_analytics?; end + + sig { returns(T::Boolean) } + def self.no_auto_update?; end + + sig { returns(T::Boolean) } + def self.no_bootsnap?; end + + sig { returns(String) } + def self.no_cleanup_formulae; end + + sig { returns(T::Boolean) } + def self.no_color?; end + + sig { returns(T::Boolean) } + def self.no_compat?; end + + sig { returns(T::Boolean) } + def self.no_emoji?; end + + sig { returns(T::Boolean) } + def self.no_env_hints?; end + + sig { returns(T::Boolean) } + def self.no_github_api?; end + + sig { returns(T::Boolean) } + def self.no_google_analytics?; end + + sig { returns(T::Boolean) } + def self.no_insecure_redirect?; end + + sig { returns(T::Boolean) } + def self.no_install_cleanup?; end + + sig { returns(T::Boolean) } + def self.no_install_from_api?; end + + sig { returns(T::Boolean) } + def self.no_install_upgrade?; end + + sig { returns(T::Boolean) } + def self.no_installed_dependents_check?; end + + sig { returns(String) } + def self.no_proxy; end + + sig { returns(String) } + def self.pip_index_url; end + + sig { returns(T::Boolean) } + def self.pry?; end + + sig { returns(T::Boolean) } + def self.simulate_macos_on_linux?; end + + sig { returns(T::Boolean) } + def self.skip_or_later_bottles?; end + + sig { returns(T::Boolean) } + def self.sorbet_runtime?; end + + sig { returns(String) } + def self.ssh_config_path; end + + sig { returns(String) } + def self.sudo_askpass; end + + sig { returns(String) } + def self.svn; end + + sig { returns(String) } + def self.temp; end + + sig { returns(T::Boolean) } + def self.update_to_tag?; end + + sig { returns(T::Boolean) } + def self.verbose?; end + + sig { returns(T::Boolean) } + def self.verbose_using_dots?; end end diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index f1cb4090d3..93c3b6e220 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -2517,7 +2517,7 @@ class Formula $stdout.flush unless $CHILD_STATUS.success? - log_lines = Homebrew::EnvConfig.fail_log_lines + log_lines = Homebrew::EnvConfig.fail_log_lines.to_s log.flush if !verbose? || verbose_using_dots diff --git a/Library/Homebrew/sorbet/custom_generators/env_config.rb b/Library/Homebrew/sorbet/custom_generators/env_config.rb new file mode 100644 index 0000000000..04660796ba --- /dev/null +++ b/Library/Homebrew/sorbet/custom_generators/env_config.rb @@ -0,0 +1,46 @@ +# typed: true +# frozen_string_literal: true + +require_relative "../../global" +require_relative "../../env_config" + +def nilable?(method) + %w[browser editor github_api_token].include?(method) +end + +File.open("#{File.dirname(__FILE__)}/../../env_config.rbi", "w") do |file| + file.write(<<~RUBY) + # typed: strict + + module Homebrew::EnvConfig + RUBY + + dynamic_methods = {} + Homebrew::EnvConfig::ENVS.each do |env, hash| + next if Homebrew::EnvConfig::CUSTOM_IMPLEMENTATIONS.include?(env.to_s) + + name = Homebrew::EnvConfig.env_method_name(env, hash) + dynamic_methods[name] = { default: hash[:default] } + end + + methods = Homebrew::EnvConfig.methods(false).map(&:to_s).sort.select { |method| dynamic_methods.key?(method) } + + methods.each do |method| + return_type = if method.end_with?("?") + T::Boolean + elsif dynamic_methods[method][:default].instance_of?(Integer) + Integer + else + nilable?(method) ? T.nilable(String) : String + end + + file.write(<<-RUBY) + sig { returns(#{return_type}) } + def self.#{method}; end + RUBY + + file.write("\n") unless methods.last == method + end + + file.write("end\n") +end diff --git a/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi b/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi index 03863445a3..6ccdcd9075 100644 --- a/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi +++ b/Library/Homebrew/sorbet/rbi/hidden-definitions/hidden.rbi @@ -4266,162 +4266,6 @@ class Homebrew::Completions::Variables def self.members(); end end -module Homebrew::EnvConfig - def self.additional_google_analytics_id(); end - - def self.all_proxy(); end - - def self.api_domain(); end - - def self.arch(); end - - def self.artifact_domain(); end - - def self.auto_update_secs(); end - - def self.autoremove?(); end - - def self.bat?(); end - - def self.bat_config_path(); end - - def self.bat_theme(); end - - def self.bootsnap?(); end - - def self.bottle_domain(); end - - def self.brew_git_remote(); end - - def self.browser(); end - - def self.cache(); end - - def self.cleanup_max_age_days(); end - - def self.cleanup_periodic_full_days(); end - - def self.color?(); end - - def self.core_git_remote(); end - - def self.curl_retries(); end - - def self.curl_verbose?(); end - - def self.curlrc?(); end - - def self.debug?(); end - - def self.developer?(); end - - def self.disable_load_formula?(); end - - def self.display(); end - - def self.display_install_times?(); end - - def self.docker_registry_basic_auth_token(); end - - def self.docker_registry_token(); end - - def self.editor(); end - - def self.eval_all?(); end - - def self.fail_log_lines(); end - - def self.forbidden_licenses(); end - - def self.force_brewed_ca_certificates?(); end - - def self.force_brewed_curl?(); end - - def self.force_brewed_git?(); end - - def self.force_vendor_ruby?(); end - - def self.ftp_proxy(); end - - def self.git_email(); end - - def self.git_name(); end - - def self.git_path(); end - - def self.github_api_token(); end - - def self.github_packages_token(); end - - def self.github_packages_user(); end - - def self.http_proxy(); end - - def self.https_proxy(); end - - def self.install_badge(); end - - def self.livecheck_watchlist(); end - - def self.logs(); end - - def self.no_analytics?(); end - - def self.no_auto_update?(); end - - def self.no_bootsnap?(); end - - def self.no_cleanup_formulae(); end - - def self.no_color?(); end - - def self.no_compat?(); end - - def self.no_emoji?(); end - - def self.no_env_hints?(); end - - def self.no_github_api?(); end - - def self.no_google_analytics?(); end - - def self.no_insecure_redirect?(); end - - def self.no_install_cleanup?(); end - - def self.no_install_from_api?(); end - - def self.no_install_upgrade?(); end - - def self.no_installed_dependents_check?(); end - - def self.no_proxy(); end - - def self.pip_index_url(); end - - def self.pry?(); end - - def self.simulate_macos_on_linux?(); end - - def self.skip_or_later_bottles?(); end - - def self.sorbet_runtime?(); end - - def self.ssh_config_path(); end - - def self.sudo_askpass(); end - - def self.svn(); end - - def self.temp(); end - - def self.update_to_tag?(); end - - def self.verbose?(); end - - def self.verbose_using_dots?(); end -end - module Homebrew::Fetch extend ::T::Private::Methods::MethodHooks extend ::T::Private::Methods::SingletonMethodHooks From 169ae0e155cc15a60a54ea00ac17d9bc347d2e72 Mon Sep 17 00:00:00 2001 From: Issy Long Date: Sun, 12 Mar 2023 17:32:21 +0000 Subject: [PATCH 2/8] Apply suggestions from code review Co-authored-by: Markus Reiter --- .../sorbet/custom_generators/env_config.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Library/Homebrew/sorbet/custom_generators/env_config.rb b/Library/Homebrew/sorbet/custom_generators/env_config.rb index 04660796ba..2250e72c5f 100644 --- a/Library/Homebrew/sorbet/custom_generators/env_config.rb +++ b/Library/Homebrew/sorbet/custom_generators/env_config.rb @@ -8,7 +8,7 @@ def nilable?(method) %w[browser editor github_api_token].include?(method) end -File.open("#{File.dirname(__FILE__)}/../../env_config.rbi", "w") do |file| +File.open("#{__dir__}/../../env_config.rbi", "w") do |file| file.write(<<~RUBY) # typed: strict @@ -23,15 +23,15 @@ File.open("#{File.dirname(__FILE__)}/../../env_config.rbi", "w") do |file| dynamic_methods[name] = { default: hash[:default] } end - methods = Homebrew::EnvConfig.methods(false).map(&:to_s).sort.select { |method| dynamic_methods.key?(method) } + methods = Homebrew::EnvConfig.methods(false).map(&:to_s).select { |method| dynamic_methods.key?(method) }.sort methods.each do |method| return_type = if method.end_with?("?") T::Boolean - elsif dynamic_methods[method][:default].instance_of?(Integer) - Integer + elsif default = dynamic_methods[method][:default] + default.class else - nilable?(method) ? T.nilable(String) : String + T.nilable(String) end file.write(<<-RUBY) @@ -39,8 +39,8 @@ File.open("#{File.dirname(__FILE__)}/../../env_config.rbi", "w") do |file| def self.#{method}; end RUBY - file.write("\n") unless methods.last == method + file.write("\n") unless method == methods.last end - file.write("end\n") + file.puts "end" end From c6ff9b59c03e0e736a74d99fa9fd0640246fade2 Mon Sep 17 00:00:00 2001 From: Issy Long Date: Sun, 12 Mar 2023 22:44:31 +0000 Subject: [PATCH 3/8] sorbet: Delete unused `nilable?` method; regenerate RBIs; fix errors --- Library/Homebrew/env_config.rbi | 46 +++++++++---------- Library/Homebrew/resource.rb | 2 +- .../sorbet/custom_generators/env_config.rb | 4 -- 3 files changed, 24 insertions(+), 28 deletions(-) diff --git a/Library/Homebrew/env_config.rbi b/Library/Homebrew/env_config.rbi index e36f4ee557..3f664cd315 100644 --- a/Library/Homebrew/env_config.rbi +++ b/Library/Homebrew/env_config.rbi @@ -1,10 +1,10 @@ # typed: strict module Homebrew::EnvConfig - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.additional_google_analytics_id; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.all_proxy; end sig { returns(Integer) } @@ -16,10 +16,10 @@ module Homebrew::EnvConfig sig { returns(String) } def self.arch; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.artifact_domain; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.auto_update_secs; end sig { returns(T::Boolean) } @@ -28,10 +28,10 @@ module Homebrew::EnvConfig sig { returns(T::Boolean) } def self.bat?; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.bat_config_path; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.bat_theme; end sig { returns(T::Boolean) } @@ -82,16 +82,16 @@ module Homebrew::EnvConfig sig { returns(T::Boolean) } def self.disable_load_formula?; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.display; end sig { returns(T::Boolean) } def self.display_install_times?; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.docker_registry_basic_auth_token; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.docker_registry_token; end sig { returns(T.nilable(String)) } @@ -103,7 +103,7 @@ module Homebrew::EnvConfig sig { returns(Integer) } def self.fail_log_lines; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.forbidden_licenses; end sig { returns(T::Boolean) } @@ -118,13 +118,13 @@ module Homebrew::EnvConfig sig { returns(T::Boolean) } def self.force_vendor_ruby?; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.ftp_proxy; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.git_email; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.git_name; end sig { returns(String) } @@ -133,16 +133,16 @@ module Homebrew::EnvConfig sig { returns(T.nilable(String)) } def self.github_api_token; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.github_packages_token; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.github_packages_user; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.http_proxy; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.https_proxy; end sig { returns(String) } @@ -163,7 +163,7 @@ module Homebrew::EnvConfig sig { returns(T::Boolean) } def self.no_bootsnap?; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.no_cleanup_formulae; end sig { returns(T::Boolean) } @@ -199,10 +199,10 @@ module Homebrew::EnvConfig sig { returns(T::Boolean) } def self.no_installed_dependents_check?; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.no_proxy; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.pip_index_url; end sig { returns(T::Boolean) } @@ -217,13 +217,13 @@ module Homebrew::EnvConfig sig { returns(T::Boolean) } def self.sorbet_runtime?; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.ssh_config_path; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.sudo_askpass; end - sig { returns(String) } + sig { returns(T.nilable(String)) } def self.svn; end sig { returns(String) } diff --git a/Library/Homebrew/resource.rb b/Library/Homebrew/resource.rb index 5639184d8f..19aae96525 100644 --- a/Library/Homebrew/resource.rb +++ b/Library/Homebrew/resource.rb @@ -296,7 +296,7 @@ class Resource # PyPI packages: PEP 503 – Simple Repository API if Homebrew::EnvConfig.pip_index_url.present? - pip_index_base_url = Homebrew::EnvConfig.pip_index_url.chomp("/").chomp("/simple") + pip_index_base_url = T.must(Homebrew::EnvConfig.pip_index_url).chomp("/").chomp("/simple") %w[https://files.pythonhosted.org https://pypi.org].each do |base_url| extra_urls << url.sub(base_url, pip_index_base_url) if url.start_with?("#{base_url}/packages") end diff --git a/Library/Homebrew/sorbet/custom_generators/env_config.rb b/Library/Homebrew/sorbet/custom_generators/env_config.rb index 2250e72c5f..e7f372f37a 100644 --- a/Library/Homebrew/sorbet/custom_generators/env_config.rb +++ b/Library/Homebrew/sorbet/custom_generators/env_config.rb @@ -4,10 +4,6 @@ require_relative "../../global" require_relative "../../env_config" -def nilable?(method) - %w[browser editor github_api_token].include?(method) -end - File.open("#{__dir__}/../../env_config.rbi", "w") do |file| file.write(<<~RUBY) # typed: strict From 66d2ab220ad81d2a61a3729f99f2ab74f981ca8c Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Mon, 13 Mar 2023 00:57:21 +0100 Subject: [PATCH 4/8] Fix code style. --- Library/Homebrew/sorbet/custom_generators/env_config.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/sorbet/custom_generators/env_config.rb b/Library/Homebrew/sorbet/custom_generators/env_config.rb index e7f372f37a..5bd6516b42 100644 --- a/Library/Homebrew/sorbet/custom_generators/env_config.rb +++ b/Library/Homebrew/sorbet/custom_generators/env_config.rb @@ -24,7 +24,7 @@ File.open("#{__dir__}/../../env_config.rbi", "w") do |file| methods.each do |method| return_type = if method.end_with?("?") T::Boolean - elsif default = dynamic_methods[method][:default] + elsif (default = dynamic_methods[method][:default])F default.class else T.nilable(String) From 3b45ecdc70116479c289ee1a1702b2f1b8102603 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Mon, 13 Mar 2023 00:59:08 +0100 Subject: [PATCH 5/8] Move `to_s`. --- Library/Homebrew/formula.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 93c3b6e220..bc3bb68d26 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -2517,12 +2517,12 @@ class Formula $stdout.flush unless $CHILD_STATUS.success? - log_lines = Homebrew::EnvConfig.fail_log_lines.to_s + log_lines = Homebrew::EnvConfig.fail_log_lines log.flush if !verbose? || verbose_using_dots puts "Last #{log_lines} lines from #{logfn}:" - Kernel.system "/usr/bin/tail", "-n", log_lines, logfn + Kernel.system "/usr/bin/tail", "-n", log_lines.to_s, logfn end log.puts From 703b9b4f4d0677dd5e270b561403f0cfd65dcfc7 Mon Sep 17 00:00:00 2001 From: Issy Long Date: Mon, 13 Mar 2023 00:11:12 +0000 Subject: [PATCH 6/8] Update Library/Homebrew/sorbet/custom_generators/env_config.rb --- Library/Homebrew/sorbet/custom_generators/env_config.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/sorbet/custom_generators/env_config.rb b/Library/Homebrew/sorbet/custom_generators/env_config.rb index 5bd6516b42..29361a3a70 100644 --- a/Library/Homebrew/sorbet/custom_generators/env_config.rb +++ b/Library/Homebrew/sorbet/custom_generators/env_config.rb @@ -24,7 +24,7 @@ File.open("#{__dir__}/../../env_config.rbi", "w") do |file| methods.each do |method| return_type = if method.end_with?("?") T::Boolean - elsif (default = dynamic_methods[method][:default])F + elsif (default = dynamic_methods[method][:default]) default.class else T.nilable(String) From 90665b074ed5338e8cdd7e2f2d67d618203f45ac Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Mon, 13 Mar 2023 02:38:03 +0100 Subject: [PATCH 7/8] Simplify condition. --- Library/Homebrew/resource.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/resource.rb b/Library/Homebrew/resource.rb index 19aae96525..5c72d0dffa 100644 --- a/Library/Homebrew/resource.rb +++ b/Library/Homebrew/resource.rb @@ -295,8 +295,8 @@ class Resource end # PyPI packages: PEP 503 – Simple Repository API - if Homebrew::EnvConfig.pip_index_url.present? - pip_index_base_url = T.must(Homebrew::EnvConfig.pip_index_url).chomp("/").chomp("/simple") + if (pip_index_url = Homebrew::EnvConfig.pip_index_url.presence) + pip_index_base_url = pip_index_url.chomp("/").chomp("/simple") %w[https://files.pythonhosted.org https://pypi.org].each do |base_url| extra_urls << url.sub(base_url, pip_index_base_url) if url.start_with?("#{base_url}/packages") end From b8cb1d1a95147770f21196b56f89f4530114f84b Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Mon, 13 Mar 2023 02:40:03 +0100 Subject: [PATCH 8/8] Simplify condition. --- Library/Homebrew/resource.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/resource.rb b/Library/Homebrew/resource.rb index 5c72d0dffa..38ee171a3e 100644 --- a/Library/Homebrew/resource.rb +++ b/Library/Homebrew/resource.rb @@ -285,8 +285,8 @@ class Resource # glibc-bootstrap if url.start_with?("https://github.com/Homebrew/glibc-bootstrap/releases/download") - if Homebrew::EnvConfig.artifact_domain.present? - extra_urls << url.sub("https://github.com", Homebrew::EnvConfig.artifact_domain) + if (artifact_domain = Homebrew::EnvConfig.artifact_domain.presence) + extra_urls << url.sub("https://github.com", artifact_domain) end if Homebrew::EnvConfig.bottle_domain != HOMEBREW_BOTTLE_DEFAULT_DOMAIN tag, filename = url.split("/").last(2)