Merge pull request #16320 from dduugg/use-native-except
Use native Hash#except, remove ActiveSupport 🐵-patch
			
			
This commit is contained in:
		
						commit
						7755004325
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -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
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
				
			||||||
 | 
				
			|||||||
@ -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"
 | 
				
			||||||
 | 
				
			|||||||
@ -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,
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
					 | 
				
			||||||
@ -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
 | 
					 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user