From 3a0a9f90734bd4d6fee14f421c1173ed52dbd86b Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Sat, 15 Sep 2018 00:04:01 +0200 Subject: [PATCH] Add `String#delete_prefix` backport. --- Library/Homebrew/dev-cmd/bottle.rb | 2 +- Library/Homebrew/dev-cmd/pull.rb | 2 +- Library/Homebrew/extend/ARGV.rb | 2 +- Library/Homebrew/extend/string.rb | 5 +- Library/Homebrew/linkage_checker.rb | 2 +- Library/Homebrew/tap.rb | 4 +- .../backports/2.5.0/string/delete_prefix.rb | 32 +++++++++ .../lib/backports/tools/arguments.rb | 69 +++++++++++++++++++ 8 files changed, 108 insertions(+), 10 deletions(-) create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/string/delete_prefix.rb create mode 100644 Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/arguments.rb diff --git a/Library/Homebrew/dev-cmd/bottle.rb b/Library/Homebrew/dev-cmd/bottle.rb index 07cc31eb1d..d9439ea276 100644 --- a/Library/Homebrew/dev-cmd/bottle.rb +++ b/Library/Homebrew/dev-cmd/bottle.rb @@ -382,7 +382,7 @@ module Homebrew f.full_name => { "formula" => { "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" => { "root_url" => bottle.root_url, diff --git a/Library/Homebrew/dev-cmd/pull.rb b/Library/Homebrew/dev-cmd/pull.rb index f9e3582b30..a498f03ef6 100644 --- a/Library/Homebrew/dev-cmd/pull.rb +++ b/Library/Homebrew/dev-cmd/pull.rb @@ -127,7 +127,7 @@ module Homebrew if (testing_match = arg.match %r{/job/Homebrew.*Testing/(\d+)/}) tap = ARGV.value("tap") tap = if tap&.start_with?("homebrew/") - Tap.fetch("homebrew", tap.strip_prefix("homebrew/")) + Tap.fetch("homebrew", tap.delete_prefix("homebrew/")) elsif tap odie "Tap option did not start with \"homebrew/\": #{tap}" else diff --git a/Library/Homebrew/extend/ARGV.rb b/Library/Homebrew/extend/ARGV.rb index 4ffca78693..10f680e5e8 100644 --- a/Library/Homebrew/extend/ARGV.rb +++ b/Library/Homebrew/extend/ARGV.rb @@ -118,7 +118,7 @@ module HomebrewArgvExtension def value(name) arg_prefix = "--#{name}=" 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 # Returns an array of values that were given as a comma-separated list. diff --git a/Library/Homebrew/extend/string.rb b/Library/Homebrew/extend/string.rb index 54c1663307..7efdec917e 100644 --- a/Library/Homebrew/extend/string.rb +++ b/Library/Homebrew/extend/string.rb @@ -1,5 +1,6 @@ # Contains backports from newer versions of Ruby require "backports/2.4.0/string/match" +require "backports/2.5.0/string/delete_prefix" class String # String.chomp, but if result is empty: returns nil instead. @@ -8,10 +9,6 @@ class String s = chomp s unless s.empty? end - - def strip_prefix(prefix) - start_with?(prefix) ? self[prefix.length..-1] : self - end end class NilClass diff --git a/Library/Homebrew/linkage_checker.rb b/Library/Homebrew/linkage_checker.rb index 184a4aedf4..697b22ae9e 100644 --- a/Library/Homebrew/linkage_checker.rb +++ b/Library/Homebrew/linkage_checker.rb @@ -43,7 +43,7 @@ class LinkageChecker sorted.each do |dylib, files| puts dylib files.each do |f| - unprefixed = f.to_s.strip_prefix "#{keg}/" + unprefixed = f.to_s.delete_prefix "#{keg}/" puts " #{unprefixed}" end puts if dylib != sorted.last.first diff --git a/Library/Homebrew/tap.rb b/Library/Homebrew/tap.rb index 7b7ec6a726..8f11bb110b 100644 --- a/Library/Homebrew/tap.rb +++ b/Library/Homebrew/tap.rb @@ -27,7 +27,7 @@ class Tap # 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 - repo = repo.strip_prefix "homebrew-" + repo = repo.delete_prefix "homebrew-" if ["Homebrew", "Linuxbrew"].include?(user) && ["core", "homebrew"].include?(repo) return CoreTap.instance @@ -119,7 +119,7 @@ class Tap def repo_var @repo_var ||= path.to_s - .strip_prefix(TAP_DIRECTORY.to_s) + .delete_prefix(TAP_DIRECTORY.to_s) .tr("^A-Za-z0-9", "_") .upcase end diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/string/delete_prefix.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/string/delete_prefix.rb new file mode 100644 index 0000000000..aabf6e885c --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/2.5.0/string/delete_prefix.rb @@ -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 diff --git a/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/arguments.rb b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/arguments.rb new file mode 100644 index 0000000000..6a30feee61 --- /dev/null +++ b/Library/Homebrew/vendor/bundle-standalone/ruby/2.3.0/gems/backports-3.11.4/lib/backports/tools/arguments.rb @@ -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