44 lines
1.2 KiB
Ruby
44 lines
1.2 KiB
Ruby
module Vagrant
|
|
module Util
|
|
class Env
|
|
#
|
|
# Execute the given command, removing any Ruby-specific environment
|
|
# variables. This is an "enhanced" version of `Bundler.with_clean_env`,
|
|
# which only removes Bundler-specific values. We need to remove all
|
|
# values, specifically:
|
|
#
|
|
# - _ORIGINAL_GEM_PATH
|
|
# - GEM_PATH
|
|
# - GEM_HOME
|
|
# - GEM_ROOT
|
|
# - BUNDLE_BIN_PATH
|
|
# - BUNDLE_GEMFILE
|
|
# - RUBYLIB
|
|
# - RUBYOPT
|
|
# - RUBY_ENGINE
|
|
# - RUBY_ROOT
|
|
# - RUBY_VERSION
|
|
#
|
|
# This will escape Vagrant's environment entirely, which is required if
|
|
# calling an executable that lives in another Ruby environment. The
|
|
# original environment restored at the end of this call.
|
|
#
|
|
# @param [Proc] block
|
|
# the block to execute with the cleaned environment
|
|
#
|
|
def self.with_clean_env(&block)
|
|
original = ENV.to_hash
|
|
|
|
ENV.delete('_ORIGINAL_GEM_PATH')
|
|
ENV.delete_if { |k,_| k.start_with?('BUNDLE_') }
|
|
ENV.delete_if { |k,_| k.start_with?('GEM_') }
|
|
ENV.delete_if { |k,_| k.start_with?('RUBY') }
|
|
|
|
yield
|
|
ensure
|
|
ENV.replace(original.to_hash)
|
|
end
|
|
end
|
|
end
|
|
end
|