Handle strict dependency enforcement when installed within system
When installed outside of the official installer and not running within a bundler environment, properly activate core dependencies and properly enforce constraints.
This commit is contained in:
parent
d0115de80e
commit
062ef52816
|
@ -313,6 +313,12 @@ module Vagrant
|
||||||
@logger.debug("Enabling strict dependency enforcement")
|
@logger.debug("Enabling strict dependency enforcement")
|
||||||
plugin_deps += vagrant_internal_specs.map do |spec|
|
plugin_deps += vagrant_internal_specs.map do |spec|
|
||||||
next if system_plugins.include?(spec.name)
|
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)
|
Gem::Dependency.new(spec.name, spec.version)
|
||||||
end.compact
|
end.compact
|
||||||
else
|
else
|
||||||
|
@ -415,8 +421,13 @@ module Vagrant
|
||||||
Gem::Resolver.compose_sets(*sets)
|
Gem::Resolver.compose_sets(*sets)
|
||||||
end
|
end
|
||||||
|
|
||||||
# @return [Array<[Gem::Specification, String]>] spec and directory pairs
|
# @return [Array<[Gem::Specification]>] spec list
|
||||||
def vagrant_internal_specs
|
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 = {}
|
list = {}
|
||||||
directories = [Gem::Specification.default_specifications_dir]
|
directories = [Gem::Specification.default_specifications_dir]
|
||||||
Gem::Specification.find_all{true}.each do |spec|
|
Gem::Specification.find_all{true}.each do |spec|
|
||||||
|
|
|
@ -35,6 +35,14 @@ module Vagrant
|
||||||
!!ENV["VAGRANT_INSTALLER_ENV"]
|
!!ENV["VAGRANT_INSTALLER_ENV"]
|
||||||
end
|
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,
|
# Returns the path to the embedded directory of the Vagrant installer,
|
||||||
# if there is one (if we're running in an installer).
|
# if there is one (if we're running in an installer).
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in New Issue