From d27dc1d02f0195855e5bd9f1c8ba61bb37c483d3 Mon Sep 17 00:00:00 2001 From: Jack Nagel Date: Sun, 8 Jun 2014 20:00:52 -0500 Subject: Work around encoding issue in Pathname#inspect on Ruby 2.0 Pathname#inspect on Ruby 2.0 throws away the encoding of the object's underlying string and returns a string tagged as ASCII-8BIT. If you simply write puts Pathname.new("some string with non-ascii bytes").inspect no error will be raised, because the implementation of Pathname#inspect does not call into Object#inspect. However, if you wrap that pathname object in an array first, then puts [Pathname.new("some string with non-ascii bytes")].inspect will raise Encoding::CompatibilityError: "inspected result must be ASCII only or use the same encoding with default external". Raising an error in this codepath is new in Ruby 2.0, and this specific bug is fixed in Ruby 2.1. I've opened a bug upstream: https://bugs.ruby-lang.org/issues/9915 Fixes Homebrew/homebrew#29947. --- Library/Homebrew/extend/pathname.rb | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'Library') diff --git a/Library/Homebrew/extend/pathname.rb b/Library/Homebrew/extend/pathname.rb index 2a2790c12..01746f770 100644 --- a/Library/Homebrew/extend/pathname.rb +++ b/Library/Homebrew/extend/pathname.rb @@ -424,6 +424,13 @@ class Pathname end end private :prepend_prefix + elsif RUBY_VERSION == "2.0.0" + # https://bugs.ruby-lang.org/issues/9915 + prepend Module.new { + def inspect + super.force_encoding(instance_variable_get(:@path).encoding) + end + } end end -- cgit v1.2.3