Merge pull request #16320 from dduugg/use-native-except

Use native Hash#except, remove ActiveSupport 🐵-patch
This commit is contained in:
Mike McQuaid 2023-12-12 19:46:28 +00:00 committed by GitHub
commit 7755004325
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 34 additions and 79 deletions

2
.gitignore vendored
View File

@ -68,9 +68,7 @@
!**/vendor/bundle/ruby/*/gems/activesupport-*/lib/active_support/core_ext/file/atomic.rb !**/vendor/bundle/ruby/*/gems/activesupport-*/lib/active_support/core_ext/file/atomic.rb
!**/vendor/bundle/ruby/*/gems/activesupport-*/lib/active_support/core_ext/hash/deep_merge.rb !**/vendor/bundle/ruby/*/gems/activesupport-*/lib/active_support/core_ext/hash/deep_merge.rb
!**/vendor/bundle/ruby/*/gems/activesupport-*/lib/active_support/core_ext/hash/deep_transform_values.rb !**/vendor/bundle/ruby/*/gems/activesupport-*/lib/active_support/core_ext/hash/deep_transform_values.rb
!**/vendor/bundle/ruby/*/gems/activesupport-*/lib/active_support/core_ext/hash/except.rb
!**/vendor/bundle/ruby/*/gems/activesupport-*/lib/active_support/core_ext/hash/keys.rb !**/vendor/bundle/ruby/*/gems/activesupport-*/lib/active_support/core_ext/hash/keys.rb
!**/vendor/bundle/ruby/*/gems/activesupport-*/lib/active_support/core_ext/hash/slice.rb
!**/vendor/bundle/ruby/*/gems/activesupport-*/lib/active_support/core_ext/object/deep_dup.rb !**/vendor/bundle/ruby/*/gems/activesupport-*/lib/active_support/core_ext/object/deep_dup.rb
!**/vendor/bundle/ruby/*/gems/activesupport-*/lib/active_support/core_ext/object/duplicable.rb !**/vendor/bundle/ruby/*/gems/activesupport-*/lib/active_support/core_ext/object/duplicable.rb
!**/vendor/bundle/ruby/*/gems/activesupport-*/lib/active_support/core_ext/string/exclude.rb !**/vendor/bundle/ruby/*/gems/activesupport-*/lib/active_support/core_ext/string/exclude.rb

View File

@ -5,8 +5,6 @@ require "cli/parser"
require "utils/github" require "utils/github"
require "manpages" require "manpages"
require "active_support/core_ext/hash/slice"
module Homebrew module Homebrew
module_function module_function
@ -39,7 +37,7 @@ module Homebrew
sentences = {} sentences = {}
members.each do |group, hash| members.each do |group, hash|
hash.slice!(*public_members) hash.replace(hash.slice(*public_members))
hash.each { |login, name| hash[login] = "[#{name}](https://github.com/#{login})" } hash.each { |login, name| hash[login] = "[#{name}](https://github.com/#{login})" }
sentences[group] = hash.values.sort.to_sentence sentences[group] = hash.values.sort.to_sentence
end end

View File

@ -16,7 +16,6 @@ require "active_support/core_ext/array/access"
require "active_support/core_ext/enumerable" require "active_support/core_ext/enumerable"
require "active_support/core_ext/file/atomic" require "active_support/core_ext/file/atomic"
require "active_support/core_ext/hash/deep_merge" require "active_support/core_ext/hash/deep_merge"
require "active_support/core_ext/hash/except"
require "active_support/core_ext/hash/keys" require "active_support/core_ext/hash/keys"
require "active_support/core_ext/string/exclude" require "active_support/core_ext/string/exclude"
require "active_support/core_ext/string/filters" require "active_support/core_ext/string/filters"

View File

@ -1,4 +1,4 @@
# typed: true # typed: strict
# frozen_string_literal: true # frozen_string_literal: true
require "livecheck/constants" require "livecheck/constants"
@ -18,18 +18,18 @@ module Homebrew
module Livecheck module Livecheck
module_function module_function
GITEA_INSTANCES = %w[ GITEA_INSTANCES = T.let(%w[
codeberg.org codeberg.org
gitea.com gitea.com
opendev.org opendev.org
tildegit.org tildegit.org
].freeze ].freeze, T::Array[String])
GOGS_INSTANCES = %w[ GOGS_INSTANCES = T.let(%w[
lolg.it lolg.it
].freeze ].freeze, T::Array[String])
STRATEGY_SYMBOLS_TO_SKIP_PREPROCESS_URL = [ STRATEGY_SYMBOLS_TO_SKIP_PREPROCESS_URL = T.let([
:extract_plist, :extract_plist,
:github_latest, :github_latest,
:header_match, :header_match,
@ -38,9 +38,9 @@ module Homebrew
:sparkle, :sparkle,
:xml, :xml,
:yaml, :yaml,
].freeze ].freeze, T::Array[Symbol])
UNSTABLE_VERSION_KEYWORDS = %w[ UNSTABLE_VERSION_KEYWORDS = T.let(%w[
alpha alpha
beta beta
bpo bpo
@ -49,21 +49,21 @@ module Homebrew
prerelease prerelease
preview preview
rc rc
].freeze ].freeze, T::Array[String])
sig { returns(T::Hash[Class, String]) } sig { returns(T::Hash[Class, String]) }
def livecheck_strategy_names def livecheck_strategy_names
return @livecheck_strategy_names if defined?(@livecheck_strategy_names) return T.must(@livecheck_strategy_names) if defined?(@livecheck_strategy_names)
# Cache demodulized strategy names, to avoid repeating this work # Cache demodulized strategy names, to avoid repeating this work
@livecheck_strategy_names = {} @livecheck_strategy_names = T.let({}, T.nilable(T::Hash[Class, String]))
Strategy.constants.sort.each do |const_symbol| Strategy.constants.sort.each do |const_symbol|
constant = Strategy.const_get(const_symbol) constant = Strategy.const_get(const_symbol)
next unless constant.is_a?(Class) next unless constant.is_a?(Class)
@livecheck_strategy_names[constant] = Utils.demodulize(T.must(constant.name)) T.must(@livecheck_strategy_names)[constant] = Utils.demodulize(T.must(constant.name))
end end
@livecheck_strategy_names.freeze T.must(@livecheck_strategy_names).freeze
end end
# Uses `formulae_and_casks_to_check` to identify taps in use other than # Uses `formulae_and_casks_to_check` to identify taps in use other than
@ -83,7 +83,7 @@ module Homebrew
other_taps.each_value do |tap| other_taps.each_value do |tap|
tap_strategy_path = "#{tap.path}/livecheck/strategy" tap_strategy_path = "#{tap.path}/livecheck/strategy"
Dir["#{tap_strategy_path}/*.rb"].sort.each(&method(:require)) if Dir.exist?(tap_strategy_path) Dir["#{tap_strategy_path}/*.rb"].sort.each { require(_1) } if Dir.exist?(tap_strategy_path)
end end
end end
@ -321,7 +321,12 @@ module Homebrew
latest_info = status_hash(formula_or_cask, "error", [no_versions_msg], full_name: use_full_name, latest_info = status_hash(formula_or_cask, "error", [no_versions_msg], full_name: use_full_name,
verbose: verbose) verbose: verbose)
if check_for_resources if check_for_resources
resource_version_info.map! { |r| r.except!(:meta) } unless verbose unless verbose
resource_version_info.map! do |info|
info.delete(:meta)
info
end
end
latest_info[:resources] = resource_version_info latest_info[:resources] = resource_version_info
end end
@ -368,8 +373,13 @@ module Homebrew
if json if json
progress&.increment progress&.increment
info.except!(:meta) unless verbose info.delete(:meta) unless verbose
resource_version_info.map! { |r| r.except!(:meta) } if check_for_resources && !verbose if check_for_resources && !verbose
resource_version_info.map! do |info|
info.delete(:meta)
info
end
end
next info next info
end end
puts if debug puts if debug
@ -446,7 +456,7 @@ module Homebrew
messages: T.nilable(T::Array[String]), messages: T.nilable(T::Array[String]),
full_name: T::Boolean, full_name: T::Boolean,
verbose: T::Boolean, verbose: T::Boolean,
).returns(Hash) ).returns(T::Hash[Symbol, T.untyped])
} }
def status_hash(package_or_resource, status_str, messages = nil, full_name: false, verbose: false) def status_hash(package_or_resource, status_str, messages = nil, full_name: false, verbose: false)
formula = package_or_resource if package_or_resource.is_a?(Formula) formula = package_or_resource if package_or_resource.is_a?(Formula)
@ -473,7 +483,7 @@ module Homebrew
end end
# Formats and prints the livecheck result for a formula/cask/resource. # Formats and prints the livecheck result for a formula/cask/resource.
sig { params(info: Hash, verbose: T::Boolean, ambiguous_cask: T::Boolean).void } sig { params(info: T::Hash[Symbol, T.untyped], verbose: T::Boolean, ambiguous_cask: T::Boolean).void }
def print_latest_version(info, verbose: false, ambiguous_cask: false) def print_latest_version(info, verbose: false, ambiguous_cask: false)
package_or_resource_s = info[:resource].present? ? " " : "" package_or_resource_s = info[:resource].present? ? " " : ""
package_or_resource_s += "#{Tty.blue}#{info[:formula] || info[:cask] || info[:resource]}#{Tty.reset}" package_or_resource_s += "#{Tty.blue}#{info[:formula] || info[:cask] || info[:resource]}#{Tty.reset}"
@ -496,7 +506,7 @@ module Homebrew
end end
# Prints the livecheck result for the resources of a given Formula. # Prints the livecheck result for the resources of a given Formula.
sig { params(info: T::Array[Hash], verbose: T::Boolean).void } sig { params(info: T::Array[T::Hash[Symbol, T.untyped]], verbose: T::Boolean).void }
def print_resources_info(info, verbose: false) def print_resources_info(info, verbose: false)
info.each do |r_info| info.each do |r_info|
if r_info[:status] && r_info[:messages] if r_info[:status] && r_info[:messages]
@ -633,7 +643,7 @@ module Homebrew
full_name: T::Boolean, full_name: T::Boolean,
verbose: T::Boolean, verbose: T::Boolean,
debug: T::Boolean, debug: T::Boolean,
).returns(T.nilable(Hash)) ).returns(T.nilable(T::Hash[Symbol, T.untyped]))
} }
def latest_version( def latest_version(
formula_or_cask, formula_or_cask,
@ -834,6 +844,7 @@ module Homebrew
end end
nil nil
end end
# Identifies the latest version of a resource and returns a Hash containing the # Identifies the latest version of a resource and returns a Hash containing the
# version information. Returns nil if a latest version couldn't be found. # version information. Returns nil if a latest version couldn't be found.
sig { sig {
@ -844,7 +855,7 @@ module Homebrew
debug: T::Boolean, debug: T::Boolean,
quiet: T::Boolean, quiet: T::Boolean,
verbose: T::Boolean, verbose: T::Boolean,
).returns(Hash) ).returns(T::Hash[Symbol, T.untyped])
} }
def resource_version( def resource_version(
resource, resource,

View File

@ -1,24 +0,0 @@
# frozen_string_literal: true
class Hash
# Returns a hash that includes everything except given keys.
# hash = { a: true, b: false, c: nil }
# hash.except(:c) # => { a: true, b: false }
# hash.except(:a, :b) # => { c: nil }
# hash # => { a: true, b: false, c: nil }
#
# This is useful for limiting a set of parameters to everything but a few known toggles:
# @person.update(params[:person].except(:admin))
def except(*keys)
slice(*self.keys - keys)
end unless method_defined?(:except)
# Removes the given keys from hash and returns it.
# hash = { a: true, b: false, c: nil }
# hash.except!(:c) # => { a: true, b: false }
# hash # => { a: true, b: false }
def except!(*keys)
keys.each { |key| delete(key) }
self
end
end

View File

@ -1,27 +0,0 @@
# frozen_string_literal: true
class Hash
# Replaces the hash with only the given keys.
# Returns a hash containing the removed key/value pairs.
#
# hash = { a: 1, b: 2, c: 3, d: 4 }
# hash.slice!(:a, :b) # => {:c=>3, :d=>4}
# hash # => {:a=>1, :b=>2}
def slice!(*keys)
omit = slice(*self.keys - keys)
hash = slice(*keys)
hash.default = default
hash.default_proc = default_proc if default_proc
replace(hash)
omit
end
# Removes and returns the key/value pairs matching the given keys.
#
# hash = { a: 1, b: 2, c: 3, d: 4 }
# hash.extract!(:a, :b) # => {:a=>1, :b=>2}
# hash # => {:c=>3, :d=>4}
def extract!(*keys)
keys.each_with_object(self.class.new) { |key, result| result[key] = delete(key) if has_key?(key) }
end
end