diff --git a/lib/vagrant/bundler.rb b/lib/vagrant/bundler.rb index 6124eb181..b2980c839 100644 --- a/lib/vagrant/bundler.rb +++ b/lib/vagrant/bundler.rb @@ -313,6 +313,12 @@ module Vagrant @logger.debug("Enabling strict dependency enforcement") plugin_deps += vagrant_internal_specs.map do |spec| next if system_plugins.include?(spec.name) + # If we are not running within the installer and + # we are not within a bundler environment then we + # only want activated specs + if !Vagrant.in_installer? && !Vagrant.in_bundler? + next if !spec.activated? + end Gem::Dependency.new(spec.name, spec.version) end.compact else @@ -415,8 +421,13 @@ module Vagrant Gem::Resolver.compose_sets(*sets) end - # @return [Array<[Gem::Specification, String]>] spec and directory pairs + # @return [Array<[Gem::Specification]>] spec list def vagrant_internal_specs + # activate any dependencies up front so we can always + # pin them when resolving + Gem::Specification.find { |s| s.name == "vagrant" && s.activated? }. + runtime_dependencies.each { |d| gem d.name, *d.requirement.as_list } + # discover all the gems we have available list = {} directories = [Gem::Specification.default_specifications_dir] Gem::Specification.find_all{true}.each do |spec| diff --git a/lib/vagrant/shared_helpers.rb b/lib/vagrant/shared_helpers.rb index ada85f3ba..5cab18f39 100644 --- a/lib/vagrant/shared_helpers.rb +++ b/lib/vagrant/shared_helpers.rb @@ -35,6 +35,14 @@ module Vagrant !!ENV["VAGRANT_INSTALLER_ENV"] end + # This returns a true/false if we are running within a bundler environment + # + # @return [Boolean] + def self.in_bundler? + !!ENV["BUNDLE_GEMFILE"] && + !defined?(::Bundler).nil? + end + # Returns the path to the embedded directory of the Vagrant installer, # if there is one (if we're running in an installer). #