From 4b8477ba70addcc0956ec811e403a67ca711e88b Mon Sep 17 00:00:00 2001 From: Rylan Polster Date: Wed, 13 Jan 2021 11:16:09 -0500 Subject: [PATCH] Completions, Settings: move to Homebrew namespace --- Library/Homebrew/brew.rb | 2 +- Library/Homebrew/completions.rb | 101 +++++++++--------- Library/Homebrew/completions.rbi | 7 ++ Library/Homebrew/settings.rb | 50 ++++----- Library/Homebrew/settings.rbi | 7 ++ Library/Homebrew/tap.rb | 8 +- Library/Homebrew/test/.rubocop_todo.yml | 3 +- Library/Homebrew/test/cmd/completions_spec.rb | 10 +- Library/Homebrew/test/completions_spec.rb | 9 +- Library/Homebrew/test/settings_spec.rb | 2 +- Library/Homebrew/utils/analytics.rb | 14 +-- 11 files changed, 114 insertions(+), 99 deletions(-) create mode 100644 Library/Homebrew/completions.rbi create mode 100644 Library/Homebrew/settings.rbi diff --git a/Library/Homebrew/brew.rb b/Library/Homebrew/brew.rb index d234adabc7..a6299cdc44 100644 --- a/Library/Homebrew/brew.rb +++ b/Library/Homebrew/brew.rb @@ -92,7 +92,7 @@ begin internal_cmd ||= begin internal_dev_cmd = Commands.valid_internal_dev_cmd?(cmd) if internal_dev_cmd && !Homebrew::EnvConfig.developer? - Settings.write "devcmdrun", true + Homebrew::Settings.write "devcmdrun", true ENV["HOMEBREW_DEV_CMD_RUN"] = "1" end internal_dev_cmd diff --git a/Library/Homebrew/completions.rb b/Library/Homebrew/completions.rb index 788949f27f..880ac0d8e4 100644 --- a/Library/Homebrew/completions.rb +++ b/Library/Homebrew/completions.rb @@ -4,63 +4,66 @@ require "utils/link" require "settings" -# Helper functions for generating shell completions. -# -# @api private -module Completions - extend T::Sig +module Homebrew + # Helper functions for generating shell completions. + # + # @api private + module Completions + extend T::Sig - module_function + module_function - sig { void } - def link! - Settings.write :linkcompletions, true - Tap.each do |tap| - Utils::Link.link_completions tap.path, "brew completions link" - end - end + SHELLS = %w[bash fish zsh].freeze - sig { void } - def unlink! - Settings.write :linkcompletions, false - Tap.each do |tap| - next if tap.official? - - Utils::Link.unlink_completions tap.path - end - end - - sig { returns(T::Boolean) } - def link_completions? - Settings.read(:linkcompletions) == "true" - end - - sig { returns(T::Boolean) } - def completions_to_link? - shells = %w[bash fish zsh] - Tap.each do |tap| - next if tap.official? - - shells.each do |shell| - return true if (tap.path/"completions/#{shell}").exist? + sig { void } + def link! + Settings.write :linkcompletions, true + Tap.each do |tap| + Utils::Link.link_completions tap.path, "brew completions link" end end - false - end + sig { void } + def unlink! + Settings.write :linkcompletions, false + Tap.each do |tap| + next if tap.official? - sig { void } - def show_completions_message_if_needed - return if Settings.read(:completionsmessageshown) == "true" - return unless completions_to_link? + Utils::Link.unlink_completions tap.path + end + end - T.unsafe(self).ohai "Homebrew completions for external commands are unlinked by default!" - T.unsafe(self).puts <<~EOS - To opt-in to automatically linking external tap shell competion files, run: - brew completions link - Then, follow the directions at #{Formatter.url("https://docs.brew.sh/Shell-Completion")} - EOS + sig { returns(T::Boolean) } + def link_completions? + Settings.read(:linkcompletions) == "true" + end - Settings.write :completionsmessageshown, true + sig { returns(T::Boolean) } + def completions_to_link? + Tap.each do |tap| + next if tap.official? + + SHELLS.each do |shell| + return true if (tap.path/"completions/#{shell}").exist? + end + end + + false + end + + sig { void } + def show_completions_message_if_needed + return if Settings.read(:completionsmessageshown) == "true" + return unless completions_to_link? + + ohai "Homebrew completions for external commands are unlinked by default!" + puts <<~EOS + To opt-in to automatically linking external tap shell competion files, run: + brew completions link + Then, follow the directions at #{Formatter.url("https://docs.brew.sh/Shell-Completion")} + EOS + + Settings.write :completionsmessageshown, true + end end end diff --git a/Library/Homebrew/completions.rbi b/Library/Homebrew/completions.rbi new file mode 100644 index 0000000000..8c4746bcaf --- /dev/null +++ b/Library/Homebrew/completions.rbi @@ -0,0 +1,7 @@ +# typed: strict + +module Homebrew + module Completions + include Kernel + end +end diff --git a/Library/Homebrew/settings.rb b/Library/Homebrew/settings.rb index 24286026ac..30d5567bd5 100644 --- a/Library/Homebrew/settings.rb +++ b/Library/Homebrew/settings.rb @@ -1,39 +1,41 @@ # typed: true # frozen_string_literal: true -# Helper functions for reading and writing settings. -# -# @api private -module Settings - extend T::Sig +module Homebrew + # Helper functions for reading and writing settings. + # + # @api private + module Settings + extend T::Sig - module_function + module_function - sig { params(setting: T.any(String, Symbol), repo: Pathname).returns(T.nilable(String)) } - def read(setting, repo: HOMEBREW_REPOSITORY) - return unless (repo/".git/config").exist? + sig { params(setting: T.any(String, Symbol), repo: Pathname).returns(T.nilable(String)) } + def read(setting, repo: HOMEBREW_REPOSITORY) + return unless (repo/".git/config").exist? - repo.cd do - Utils.popen_read("git", "config", "--get", "homebrew.#{setting}").chomp.presence + repo.cd do + Utils.popen_read("git", "config", "--get", "homebrew.#{setting}").chomp.presence + end end - end - sig { params(setting: T.any(String, Symbol), value: T.any(String, T::Boolean), repo: Pathname).void } - def write(setting, value, repo: HOMEBREW_REPOSITORY) - return unless (repo/".git/config").exist? + sig { params(setting: T.any(String, Symbol), value: T.any(String, T::Boolean), repo: Pathname).void } + def write(setting, value, repo: HOMEBREW_REPOSITORY) + return unless (repo/".git/config").exist? - repo.cd do - T.unsafe(self).safe_system "git", "config", "--replace-all", "homebrew.#{setting}", value.to_s + repo.cd do + safe_system "git", "config", "--replace-all", "homebrew.#{setting}", value.to_s + end end - end - sig { params(setting: T.any(String, Symbol), repo: Pathname).void } - def delete(setting, repo: HOMEBREW_REPOSITORY) - return unless (repo/".git/config").exist? - return if read(setting, repo: repo).blank? + sig { params(setting: T.any(String, Symbol), repo: Pathname).void } + def delete(setting, repo: HOMEBREW_REPOSITORY) + return unless (repo/".git/config").exist? + return if read(setting, repo: repo).blank? - repo.cd do - T.unsafe(self).safe_system "git", "config", "--unset-all", "homebrew.#{setting}" + repo.cd do + safe_system "git", "config", "--unset-all", "homebrew.#{setting}" + end end end end diff --git a/Library/Homebrew/settings.rbi b/Library/Homebrew/settings.rbi new file mode 100644 index 0000000000..289622fd41 --- /dev/null +++ b/Library/Homebrew/settings.rbi @@ -0,0 +1,7 @@ +# typed: strict + +module Homebrew + module Settings + include Kernel + end +end diff --git a/Library/Homebrew/tap.rb b/Library/Homebrew/tap.rb index b9e90b1686..8b3c1ac5fb 100644 --- a/Library/Homebrew/tap.rb +++ b/Library/Homebrew/tap.rb @@ -343,8 +343,8 @@ class Tap command = "brew tap --repair" Utils::Link.link_manpages(path, command) - Completions.show_completions_message_if_needed - if official? || Completions.link_completions? + Homebrew::Completions.show_completions_message_if_needed + if official? || Homebrew::Completions.link_completions? Utils::Link.link_completions(path, command) else Utils::Link.unlink_completions(path) @@ -822,14 +822,14 @@ class TapConfig return unless tap.git? return unless Utils::Git.available? - Settings.read key, repo: tap.path + Homebrew::Settings.read key, repo: tap.path end def []=(key, value) return unless tap.git? return unless Utils::Git.available? - Settings.write key, value.to_s, repo: tap.path + Homebrew::Settings.write key, value.to_s, repo: tap.path end end diff --git a/Library/Homebrew/test/.rubocop_todo.yml b/Library/Homebrew/test/.rubocop_todo.yml index 364b23edc8..7e7fa024f6 100644 --- a/Library/Homebrew/test/.rubocop_todo.yml +++ b/Library/Homebrew/test/.rubocop_todo.yml @@ -22,7 +22,7 @@ RSpec/InstanceVariable: - 'utils/git_spec.rb' - 'version_spec.rb' -# Offense count: 81 +# Offense count: 76 RSpec/MultipleDescribes: Exclude: - 'ENV_spec.rb' @@ -37,7 +37,6 @@ RSpec/MultipleDescribes: - 'cmd/autoremove_spec.rb' - 'cmd/cleanup_spec.rb' - 'cmd/commands_spec.rb' - - 'cmd/completions_spec.rb' - 'cmd/config_spec.rb' - 'cmd/deps_spec.rb' - 'cmd/desc_spec.rb' diff --git a/Library/Homebrew/test/cmd/completions_spec.rb b/Library/Homebrew/test/cmd/completions_spec.rb index 0c093bec6f..721fa184ae 100644 --- a/Library/Homebrew/test/cmd/completions_spec.rb +++ b/Library/Homebrew/test/cmd/completions_spec.rb @@ -3,12 +3,12 @@ require "cmd/shared_examples/args_parse" -describe "Homebrew.completions_args" do - it_behaves_like "parseable arguments" -end +describe "brew completions" do + describe "Homebrew.completions_args" do + it_behaves_like "parseable arguments" + end -describe "brew completions", :integration_test do - it "runs the status subcommand correctly" do + it "runs the status subcommand correctly", :integration_test do HOMEBREW_REPOSITORY.cd do system "git", "init" end diff --git a/Library/Homebrew/test/completions_spec.rb b/Library/Homebrew/test/completions_spec.rb index 41c9f95ef0..efdcee115e 100644 --- a/Library/Homebrew/test/completions_spec.rb +++ b/Library/Homebrew/test/completions_spec.rb @@ -3,7 +3,7 @@ require "completions" -describe Completions do +describe Homebrew::Completions do let(:internal_path) { HOMEBREW_REPOSITORY/"Library/Taps/homebrew/homebrew-bar" } let(:external_path) { HOMEBREW_REPOSITORY/"Library/Taps/foo/homebrew-bar" } @@ -132,12 +132,9 @@ describe Completions do setup_completions external: true delete_completions_setting setting: :completionsmessageshown - # This will fail because the method calls `puts`. - # If we output the `ohai` andcatch the error, we can be usre that the message is showing. - error_message = "private method `puts' called for Completions:Module" + message = /Homebrew completions for external commands are unlinked by default!/ expect { described_class.show_completions_message_if_needed } - .to output.to_stdout - .and raise_error(NoMethodError, error_message) + .to output(message).to_stdout end end end diff --git a/Library/Homebrew/test/settings_spec.rb b/Library/Homebrew/test/settings_spec.rb index 1c42f7fe76..8df4063fc2 100644 --- a/Library/Homebrew/test/settings_spec.rb +++ b/Library/Homebrew/test/settings_spec.rb @@ -3,7 +3,7 @@ require "settings" -describe Settings do +describe Homebrew::Settings do before do HOMEBREW_REPOSITORY.cd do system "git", "init" diff --git a/Library/Homebrew/utils/analytics.rb b/Library/Homebrew/utils/analytics.rb index 9ab040159d..3d20136514 100644 --- a/Library/Homebrew/utils/analytics.rb +++ b/Library/Homebrew/utils/analytics.rb @@ -103,27 +103,27 @@ module Utils end def uuid - Settings.read :analyticsuuid + Homebrew::Settings.read :analyticsuuid end def messages_displayed! - Settings.write :analyticsmessage, true - Settings.write :caskanalyticsmessage, true + Homebrew::Settings.write :analyticsmessage, true + Homebrew::Settings.write :caskanalyticsmessage, true end def enable! - Settings.write :analyticsdisabled, false + Homebrew::Settings.write :analyticsdisabled, false messages_displayed! end def disable! - Settings.write :analyticsdisabled, true + Homebrew::Settings.write :analyticsdisabled, true regenerate_uuid! end def regenerate_uuid! # it will be regenerated in next run unless disabled. - Settings.delete :analyticsuuid + Homebrew::Settings.delete :analyticsuuid end def output(args:, filter: nil) @@ -314,7 +314,7 @@ module Utils end def config_true?(key) - Settings.read(key) == "true" + Homebrew::Settings.read(key) == "true" end def formulae_brew_sh_json(endpoint)