class Chef::Formatters::ErrorInspectors::CompileErrorInspector
CompileErrorInspector¶ ↑
Wraps exceptions that occur during the compile phase of a Chef run and tries to find the code responsible for the error.
Attributes
exception[R]
path[R]
Public Class Methods
new(path, exception)
click to toggle source
# File lib/chef/formatters/error_inspectors/compile_error_inspector.rb, line 31 def initialize(path, exception) @path, @exception = path, exception end
Public Instance Methods
add_explanation(error_description)
click to toggle source
# File lib/chef/formatters/error_inspectors/compile_error_inspector.rb, line 35 def add_explanation(error_description) case exception when Chef::Exceptions::RecipeNotFound error_description.section(exception.class.name, exception.message) else error_description.section(exception.class.name, exception.message) traceback = filtered_bt.map {|line| " #{line}"}.join("\n") error_description.section("Cookbook Trace:", traceback) error_description.section("Relevant File Content:", context) end end
context()
click to toggle source
# File lib/chef/formatters/error_inspectors/compile_error_inspector.rb, line 48 def context context_lines = [] context_lines << "#{culprit_file}:\n\n" Range.new(display_lower_bound, display_upper_bound).each do |i| line_nr = (i + 1).to_s.rjust(3) indicator = (i + 1) == culprit_line ? ">> " : ": " context_lines << "#{line_nr}#{indicator}#{file_lines[i]}" end context_lines.join("") end
culprit_backtrace_entry()
click to toggle source
# File lib/chef/formatters/error_inspectors/compile_error_inspector.rb, line 75 def culprit_backtrace_entry @culprit_backtrace_entry ||= begin bt_entry = filtered_bt.first Chef::Log.debug("backtrace entry for compile error: '#{bt_entry}'") bt_entry end end
culprit_file()
click to toggle source
# File lib/chef/formatters/error_inspectors/compile_error_inspector.rb, line 91 def culprit_file @culprit_file ||= culprit_backtrace_entry[/^((?:.\:)?[^:]+):([\d]+)/,1] end
culprit_line()
click to toggle source
# File lib/chef/formatters/error_inspectors/compile_error_inspector.rb, line 83 def culprit_line @culprit_line ||= begin line_number = culprit_backtrace_entry[/^(?:.\:)?[^:]+:([\d]+)/,1].to_i Chef::Log.debug("Line number of compile error: '#{line_number}'") line_number end end
display_lower_bound()
click to toggle source
# File lib/chef/formatters/error_inspectors/compile_error_inspector.rb, line 59 def display_lower_bound lower = (culprit_line - 8) lower = 0 if lower < 0 lower end
display_upper_bound()
click to toggle source
# File lib/chef/formatters/error_inspectors/compile_error_inspector.rb, line 65 def display_upper_bound upper = (culprit_line + 8) upper = file_lines.size if upper > file_lines.size upper end
file_lines()
click to toggle source
# File lib/chef/formatters/error_inspectors/compile_error_inspector.rb, line 71 def file_lines @file_lines ||= IO.readlines(culprit_file) end
filtered_bt()
click to toggle source
# File lib/chef/formatters/error_inspectors/compile_error_inspector.rb, line 95 def filtered_bt filters = Array(Chef::Config.cookbook_path).map {|p| /^#{Regexp.escape(p)}/ } r = exception.backtrace.select {|line| filters.any? {|filter| line =~ filter }} Chef::Log.debug("filtered backtrace of compile error: #{r.join(",")}") return r.count > 0 ? r : exception.backtrace end