diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2014-08-29 15:19:23 -0700 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2014-09-08 11:10:05 -0700 |
commit | d6f6928fd1097709189cd78689e89032d4c9318d (patch) | |
tree | 9a42a5c5784824cc8f32687f337eacb199c70ad8 /lib/chef/mixin | |
parent | 3fb87cc744d1e1134476496dedc9125a25add859 (diff) | |
download | chef-d6f6928fd1097709189cd78689e89032d4c9318d.tar.gz |
unicode shell_out fixes plus mixlib-shellout 2.x
- use en_US.UTF-8 explicitly rather than relying on mixlib-shellout's
'C' locale in order to force the LANG by default (restores unicode
to most chef-client calls now)
Diffstat (limited to 'lib/chef/mixin')
-rw-r--r-- | lib/chef/mixin/shell_out.rb | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/lib/chef/mixin/shell_out.rb b/lib/chef/mixin/shell_out.rb index 881c94b862..fb563f068d 100644 --- a/lib/chef/mixin/shell_out.rb +++ b/lib/chef/mixin/shell_out.rb @@ -30,32 +30,37 @@ class Chef # Generally speaking, 'extend Chef::Mixin::ShellOut' in your recipes and include 'Chef::Mixin::ShellOut' in your LWRPs # You can also call Mixlib::Shellout.new directly, but you lose all of the above functionality + # we use 'en_US.UTF-8' by default because we parse localized strings in English as an API and + # generally must support UTF-8 unicode. def shell_out(*command_args) - cmd = Mixlib::ShellOut.new(*run_command_compatible_options(command_args)) - cmd.live_stream ||= io_for_live_stream - cmd.run_command - cmd + args = Marshal.load( Marshal.dump(command_args) ) # we need a deep clone + if args.last.is_a?(Hash) + options = args.last + env_key = options.has_key?(:env) ? :env : :environment + options[env_key] ||= {} + options[env_key]['LC_ALL'] ||= 'en_US.UTF-8' unless options[env_key].has_key?('LC_ALL') + else + args << { :environment => { 'LC_ALL' => 'en_US.UTF-8' } } + end + + shell_out_command(*args) end + # call shell_out (using en_US.UTF-8) and raise errors def shell_out!(*command_args) - cmd= shell_out(*command_args) + cmd = shell_out(*command_args) cmd.error! cmd end - # environment['LC_ALL'] should be nil or what the user specified def shell_out_with_systems_locale(*command_args) - args = command_args.dup - if args.last.is_a?(Hash) - options = args.last - env_key = options.has_key?(:env) ? :env : :environment - options[env_key] ||= {} - options[env_key]['LC_ALL'] ||= nil - else - args << { :environment => { 'LC_ALL' => nil } } - end + shell_out_command(*command_args) + end - shell_out(*args) + def shell_out_with_systems_locale!(*command_args) + cmd = shell_out_with_systems_locale(*command_args) + cmd.error! + cmd end DEPRECATED_OPTIONS = @@ -82,6 +87,13 @@ class Chef private + def shell_out_command(*command_args) + cmd = Mixlib::ShellOut.new(*run_command_compatible_options(command_args)) + cmd.live_stream ||= io_for_live_stream + cmd.run_command + cmd + end + def deprecate_option(old_option, new_option) Chef::Log.logger.warn "DEPRECATION: Chef::Mixin::ShellOut option :#{old_option} is deprecated. Use :#{new_option}" end |