Add debug logging output to Bundler implementation

This commit is contained in:
Chris Roberts 2016-11-11 15:08:59 -08:00
parent bd3f0c442c
commit 3edd0b57e9
1 changed files with 19 additions and 0 deletions

View File

@ -27,6 +27,7 @@ module Vagrant
def initialize
@plugin_gem_path = Vagrant.user_data_path.join("gems", RUBY_VERSION).freeze
@logger = Log4r::Logger.new("vagrant::bundler")
end
# Initializes Bundler and the various gem paths so that we can begin
@ -40,6 +41,8 @@ module Vagrant
Gem::Dependency.new(name, info['gem_version'].to_s.empty? ? '> 0' : info['gem_version'])
end
@logger.debug("Current generated plugin dependency list: #{plugin_deps}")
# Load dependencies into a request set for resolution
request_set = Gem::RequestSet.new(*plugin_deps)
# Never allow dependencies to be remotely satisfied during init
@ -65,15 +68,19 @@ module Vagrant
# Compose set for resolution
composed_set = Gem::Resolver.compose_sets(current_set, plugin_set)
@logger.debug("Composed local RubyGems set for plugin init resolution: #{composed_set}")
# Resolve the request set to ensure proper activation order
solution = request_set.resolve(composed_set)
rescue Gem::UnsatisfiableDependencyError => failure
if repair
raise failure if @init_retried
@logger.debug("Resolution failed but attempting to repair. Failure: #{failure}")
install(plugins)
@init_retried = true
retry
else
@logger.debug("#{failure.class}: #{failure}")
$stderr.puts "Vagrant failed to properly initialize due to an error while"
$stderr.puts "while attempting to load configured plugins. This can be caused"
$stderr.puts "by manually tampering with the 'plugins.json' file, or by a"
@ -85,13 +92,17 @@ module Vagrant
end
end
@logger.debug("Initialization solution set: #{solution.map(&:full_name)}")
# Activate the gems
begin
retried = false
solution.each do |activation_request|
unless activation_request.full_spec.activated?
@logger.debug("Activating gem #{activation_request.full_spec.full_name}")
activation_request.full_spec.activate
if(defined?(::Bundler))
@logger.debug("Marking gem #{activation_request.full_spec.full_name} loaded within Bundler.")
::Bundler.rubygems.mark_loaded activation_request.full_spec
end
end
@ -114,6 +125,7 @@ module Vagrant
solution.map(&:full_spec)
if(defined?(::Bundler))
@logger.debug("Updating Bundler with full specification list")
::Bundler.rubygems.replace_entrypoints(full_vagrant_spec_list)
end
@ -147,6 +159,7 @@ module Vagrant
"sources" => opts.fetch(:sources, Gem.sources.map(&:to_s))
}
}
@logger.debug("Installing local plugin - #{plugin_info}")
internal_install(plugin_info, {})
plugin_source.spec
end
@ -242,12 +255,15 @@ module Vagrant
end
Array(info["sources"]).each do |source|
if !Gem.sources.include?(source)
@logger.debug("Adding RubyGems source for plugin install: #{source}")
Gem.sources << source
end
end
Gem::Dependency.new(name, gem_version)
end
@logger.debug("Dependency list for installation: #{plugin_deps}")
# Create the request set for the new plugins
request_set = Gem::RequestSet.new(*plugin_deps)
@ -263,9 +279,12 @@ module Vagrant
# Generate the required solution set for new plugins
solution = request_set.resolve(installer_set)
@logger.debug("Generated solution set: #{solution.map(&:full_name)}")
# If any items in the solution set are local but not activated, turn them on
solution.each do |activation_request|
if activation_request.installed? && !activation_request.full_spec.activated?
@logger.debug("Activating gem specification: #{activation_request.full_spec.full_name}")
activation_request.full_spec.activate
end
end