summaryrefslogtreecommitdiff
path: root/lib/chef/util/diff.rb
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2013-06-28 16:20:37 -0700
committerLamont Granquist <lamont@scriptkiddie.org>2013-06-28 16:20:37 -0700
commitbcd053fedc1d1a68bdfbbbac37879b19a89f533c (patch)
treef926ed3f93e29491cfc873fe4c91c810541f8b27 /lib/chef/util/diff.rb
parent59e7020286dfa02201409f05be6efb42639bff85 (diff)
downloadchef-bcd053fedc1d1a68bdfbbbac37879b19a89f533c.tar.gz
fix 1.9 mixlib-shellout encoding issues
Diffstat (limited to 'lib/chef/util/diff.rb')
-rw-r--r--lib/chef/util/diff.rb11
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/chef/util/diff.rb b/lib/chef/util/diff.rb
index 9157daf85e..4d46108cdd 100644
--- a/lib/chef/util/diff.rb
+++ b/lib/chef/util/diff.rb
@@ -104,9 +104,14 @@ class Chef
return "(long diff of over #{diff_output_threshold} characters, diff output suppressed)"
else
diff_str = result.stdout
- if diff_str.respond_to?(:encoding)
- # in ruby 1.9 diff_str will be ASCII-8BIT, in 2.0 it will be default_external (e.g. UTF-8)
- # we will post this as JSON which needs UTF-8, so we force to UTF-8 here as part of the API
+ if Object.const_defined? :Encoding # ruby >= 1.9
+ if ( diff_str.encoding == Encoding::ASCII_8BIT &&
+ diff_str.encoding != Encoding.default_external &&
+ RUBY_VERSION.to_f < 2.0 )
+ # @todo mixlib-shellout under ruby 1.9 hands back an ASCII-8BIT encoded string, which needs to
+ # be fixed to the default external encoding -- this should be moved into mixlib-shellout
+ diff_str = diff_str.force_encoding(Encoding.default_external)
+ end
diff_str.encode!('UTF-8', :invalid => :replace, :undef => :replace, :replace => '?')
end
@diff = diff_str.split("\n")