Add String#delete_prefix backport.
				
					
				
			This commit is contained in:
		
							parent
							
								
									dfb6ada805
								
							
						
					
					
						commit
						3a0a9f9073
					
				@ -382,7 +382,7 @@ module Homebrew
 | 
				
			|||||||
      f.full_name => {
 | 
					      f.full_name => {
 | 
				
			||||||
        "formula" => {
 | 
					        "formula" => {
 | 
				
			||||||
          "pkg_version" => f.pkg_version.to_s,
 | 
					          "pkg_version" => f.pkg_version.to_s,
 | 
				
			||||||
          "path" => f.path.to_s.strip_prefix("#{HOMEBREW_REPOSITORY}/"),
 | 
					          "path" => f.path.to_s.delete_prefix("#{HOMEBREW_REPOSITORY}/"),
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "bottle" => {
 | 
					        "bottle" => {
 | 
				
			||||||
          "root_url" => bottle.root_url,
 | 
					          "root_url" => bottle.root_url,
 | 
				
			||||||
 | 
				
			|||||||
@ -127,7 +127,7 @@ module Homebrew
 | 
				
			|||||||
      if (testing_match = arg.match %r{/job/Homebrew.*Testing/(\d+)/})
 | 
					      if (testing_match = arg.match %r{/job/Homebrew.*Testing/(\d+)/})
 | 
				
			||||||
        tap = ARGV.value("tap")
 | 
					        tap = ARGV.value("tap")
 | 
				
			||||||
        tap = if tap&.start_with?("homebrew/")
 | 
					        tap = if tap&.start_with?("homebrew/")
 | 
				
			||||||
          Tap.fetch("homebrew", tap.strip_prefix("homebrew/"))
 | 
					          Tap.fetch("homebrew", tap.delete_prefix("homebrew/"))
 | 
				
			||||||
        elsif tap
 | 
					        elsif tap
 | 
				
			||||||
          odie "Tap option did not start with \"homebrew/\": #{tap}"
 | 
					          odie "Tap option did not start with \"homebrew/\": #{tap}"
 | 
				
			||||||
        else
 | 
					        else
 | 
				
			||||||
 | 
				
			|||||||
@ -118,7 +118,7 @@ module HomebrewArgvExtension
 | 
				
			|||||||
  def value(name)
 | 
					  def value(name)
 | 
				
			||||||
    arg_prefix = "--#{name}="
 | 
					    arg_prefix = "--#{name}="
 | 
				
			||||||
    flag_with_value = find { |arg| arg.start_with?(arg_prefix) }
 | 
					    flag_with_value = find { |arg| arg.start_with?(arg_prefix) }
 | 
				
			||||||
    flag_with_value&.strip_prefix(arg_prefix)
 | 
					    flag_with_value&.delete_prefix(arg_prefix)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # Returns an array of values that were given as a comma-separated list.
 | 
					  # Returns an array of values that were given as a comma-separated list.
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,6 @@
 | 
				
			|||||||
# Contains backports from newer versions of Ruby
 | 
					# Contains backports from newer versions of Ruby
 | 
				
			||||||
require "backports/2.4.0/string/match"
 | 
					require "backports/2.4.0/string/match"
 | 
				
			||||||
 | 
					require "backports/2.5.0/string/delete_prefix"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class String
 | 
					class String
 | 
				
			||||||
  # String.chomp, but if result is empty: returns nil instead.
 | 
					  # String.chomp, but if result is empty: returns nil instead.
 | 
				
			||||||
@ -8,10 +9,6 @@ class String
 | 
				
			|||||||
    s = chomp
 | 
					    s = chomp
 | 
				
			||||||
    s unless s.empty?
 | 
					    s unless s.empty?
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					 | 
				
			||||||
  def strip_prefix(prefix)
 | 
					 | 
				
			||||||
    start_with?(prefix) ? self[prefix.length..-1] : self
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class NilClass
 | 
					class NilClass
 | 
				
			||||||
 | 
				
			|||||||
@ -43,7 +43,7 @@ class LinkageChecker
 | 
				
			|||||||
    sorted.each do |dylib, files|
 | 
					    sorted.each do |dylib, files|
 | 
				
			||||||
      puts dylib
 | 
					      puts dylib
 | 
				
			||||||
      files.each do |f|
 | 
					      files.each do |f|
 | 
				
			||||||
        unprefixed = f.to_s.strip_prefix "#{keg}/"
 | 
					        unprefixed = f.to_s.delete_prefix "#{keg}/"
 | 
				
			||||||
        puts "  #{unprefixed}"
 | 
					        puts "  #{unprefixed}"
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
      puts if dylib != sorted.last.first
 | 
					      puts if dylib != sorted.last.first
 | 
				
			||||||
 | 
				
			|||||||
@ -27,7 +27,7 @@ class Tap
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    # We special case homebrew and linuxbrew so that users don't have to shift in a terminal.
 | 
					    # We special case homebrew and linuxbrew so that users don't have to shift in a terminal.
 | 
				
			||||||
    user = user.capitalize if ["homebrew", "linuxbrew"].include? user
 | 
					    user = user.capitalize if ["homebrew", "linuxbrew"].include? user
 | 
				
			||||||
    repo = repo.strip_prefix "homebrew-"
 | 
					    repo = repo.delete_prefix "homebrew-"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ["Homebrew", "Linuxbrew"].include?(user) && ["core", "homebrew"].include?(repo)
 | 
					    if ["Homebrew", "Linuxbrew"].include?(user) && ["core", "homebrew"].include?(repo)
 | 
				
			||||||
      return CoreTap.instance
 | 
					      return CoreTap.instance
 | 
				
			||||||
@ -119,7 +119,7 @@ class Tap
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  def repo_var
 | 
					  def repo_var
 | 
				
			||||||
    @repo_var ||= path.to_s
 | 
					    @repo_var ||= path.to_s
 | 
				
			||||||
                      .strip_prefix(TAP_DIRECTORY.to_s)
 | 
					                      .delete_prefix(TAP_DIRECTORY.to_s)
 | 
				
			||||||
                      .tr("^A-Za-z0-9", "_")
 | 
					                      .tr("^A-Za-z0-9", "_")
 | 
				
			||||||
                      .upcase
 | 
					                      .upcase
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					unless String.method_defined? :delete_prefix
 | 
				
			||||||
 | 
					  require 'backports/tools/arguments'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  class String
 | 
				
			||||||
 | 
					    def delete_prefix(prefix)
 | 
				
			||||||
 | 
					      prefix = Backports.coerce_to_str(prefix)
 | 
				
			||||||
 | 
					      if rindex(prefix, 0)
 | 
				
			||||||
 | 
					        self[prefix.length..-1]
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        dup
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					unless String.method_defined? :delete_prefix!
 | 
				
			||||||
 | 
					  require 'backports/tools/arguments'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  class String
 | 
				
			||||||
 | 
					    def delete_prefix!(prefix)
 | 
				
			||||||
 | 
					      prefix = Backports.coerce_to_str(prefix)
 | 
				
			||||||
 | 
					      chomp! if frozen?
 | 
				
			||||||
 | 
					      len = prefix.length
 | 
				
			||||||
 | 
					      if len > 0 && rindex(prefix, 0)
 | 
				
			||||||
 | 
					        self[0...prefix.length] = ''
 | 
				
			||||||
 | 
					        self
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        nil
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
@ -0,0 +1,69 @@
 | 
				
			|||||||
 | 
					module Backports
 | 
				
			||||||
 | 
					  # Helper method to coerce a value into a specific class.
 | 
				
			||||||
 | 
					  # Raises a TypeError if the coercion fails or the returned value
 | 
				
			||||||
 | 
					  # is not of the right class.
 | 
				
			||||||
 | 
					  # (from Rubinius)
 | 
				
			||||||
 | 
					  def self.coerce_to(obj, cls, meth)
 | 
				
			||||||
 | 
					    return obj if obj.kind_of?(cls)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    begin
 | 
				
			||||||
 | 
					      ret = obj.__send__(meth)
 | 
				
			||||||
 | 
					    rescue Exception => e
 | 
				
			||||||
 | 
					      raise TypeError, "Coercion error: #{obj.inspect}.#{meth} => #{cls} failed:\n" \
 | 
				
			||||||
 | 
					                       "(#{e.message})"
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    raise TypeError, "Coercion error: obj.#{meth} did NOT return a #{cls} (was #{ret.class})" unless ret.kind_of? cls
 | 
				
			||||||
 | 
					    ret
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def self.coerce_to_int(obj)
 | 
				
			||||||
 | 
					    coerce_to(obj, Integer, :to_int)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def self.coerce_to_ary(obj)
 | 
				
			||||||
 | 
					    coerce_to(obj, Array, :to_ary)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def self.coerce_to_str(obj)
 | 
				
			||||||
 | 
					    coerce_to(obj, String, :to_str)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def self.coerce_to_hash(obj)
 | 
				
			||||||
 | 
					    coerce_to(obj, Hash, :to_hash)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def self.coerce_to_options(obj, *options)
 | 
				
			||||||
 | 
					    hash = coerce_to_hash(obj)
 | 
				
			||||||
 | 
					    hash.values_at(*options)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def self.coerce_to_option(obj, option)
 | 
				
			||||||
 | 
					    coerce_to_options(obj, option)[0]
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def self.is_array?(obj)
 | 
				
			||||||
 | 
					    coerce_to(obj, Array, :to_ary) if obj.respond_to? :to_ary
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def self.try_convert(obj, cls, meth)
 | 
				
			||||||
 | 
					    return obj if obj.kind_of?(cls)
 | 
				
			||||||
 | 
					    return nil unless obj.respond_to?(meth)
 | 
				
			||||||
 | 
					    ret = obj.__send__(meth)
 | 
				
			||||||
 | 
					    raise TypeError, "Coercion error: obj.#{meth} did NOT return a #{cls} (was #{ret.class})" unless ret.nil? || ret.kind_of?(cls)
 | 
				
			||||||
 | 
					    ret
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Checks for a failed comparison (in which case it throws an ArgumentError)
 | 
				
			||||||
 | 
					  # Additionally, it maps any negative value to -1 and any positive value to +1
 | 
				
			||||||
 | 
					  # (from Rubinius)
 | 
				
			||||||
 | 
					  def self.coerce_to_comparison(a, b, cmp = (a <=> b))
 | 
				
			||||||
 | 
					    raise ArgumentError, "comparison of #{a} with #{b} failed" if cmp.nil?
 | 
				
			||||||
 | 
					    return 1 if cmp > 0
 | 
				
			||||||
 | 
					    return -1 if cmp < 0
 | 
				
			||||||
 | 
					    0
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Used internally to make it easy to deal with optional arguments
 | 
				
			||||||
 | 
					  # (from Rubinius)
 | 
				
			||||||
 | 
					  Undefined = Object.new
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user