diff --git a/lib/appraisal/command.rb b/lib/appraisal/command.rb index fd9cdb81..6de50162 100644 --- a/lib/appraisal/command.rb +++ b/lib/appraisal/command.rb @@ -3,23 +3,24 @@ module Appraisal # Executes commands with a clean environment class Command - BUNDLER_ENV_VARS = %w(RUBYOPT BUNDLE_PATH BUNDLE_BIN_PATH BUNDLE_GEMFILE).freeze - - attr_reader :command, :env, :gemfile, :original_env + attr_reader :command, :env, :gemfile def initialize(command, options = {}) @gemfile = options[:gemfile] @env = options.fetch(:env, {}) @command = command_starting_with_bundle(command) - @original_env = {} end def run - with_clean_env { ensure_bundler_is_available } - announce + run_env = test_environment.merge(env) + + Bundler.with_original_env do + ensure_bundler_is_available + announce - with_clean_env do - env.each_pair do |key, value| + ENV["BUNDLE_GEMFILE"] = gemfile + ENV["APPRAISAL_INITIALIZED"] = "1" + run_env.each_pair do |key, value| ENV[key] = value end @@ -31,15 +32,6 @@ def run private - def with_clean_env - unset_bundler_env_vars - ENV['BUNDLE_GEMFILE'] = gemfile - ENV['APPRAISAL_INITIALIZED'] = '1' - yield - ensure - restore_env - end - def ensure_bundler_is_available version = Utils.bundler_version unless system %(gem list --silent -i bundler -v #{version}) @@ -66,17 +58,6 @@ def announce end end - def unset_bundler_env_vars - BUNDLER_ENV_VARS.each do |key| - original_env[key] = ENV[key] - ENV[key] = nil - end - end - - def restore_env - original_env.each { |key, value| ENV[key] = value } - end - def command_starts_with_bundle?(original_command) if original_command.is_a?(Array) original_command.first =~ /^bundle/ @@ -100,5 +81,14 @@ def command_as_string command end end + + def test_environment + return {} unless ENV["APPRAISAL_UNDER_TEST"] == "1" + + { + "GEM_HOME" => ENV["GEM_HOME"], + "GEM_PATH" => "", + } + end end end diff --git a/spec/acceptance/bundle_without_spec.rb b/spec/acceptance/bundle_without_spec.rb index c57c84f4..2c76a4f2 100644 --- a/spec/acceptance/bundle_without_spec.rb +++ b/spec/acceptance/bundle_without_spec.rb @@ -39,7 +39,9 @@ output = run "appraisal install --without drinks" expect(output).to include("Bundle complete") - expect(output).to include("Gems in the group drinks were not installed.") + expect(output).to( + match(/Gems in the group ['"]?drinks['"]? were not installed/), + ) expect(output).not_to include("orange_juice") expect(output).not_to include("coffee") expect(output).not_to include("soda") diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 68deffc9..d3328e05 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -5,6 +5,7 @@ PROJECT_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..')).freeze TMP_GEM_ROOT = File.join(PROJECT_ROOT, "tmp", "gems") +ENV["APPRAISAL_UNDER_TEST"] = "1" RSpec.configure do |config| config.raise_errors_for_deprecations!