class Fig::IncludeBacktrace

Stack of applied “include” statements.

Keeps track of overrides and can produce package definition stack traces.

Pushing and popping actually happens via instances being held/let go by recursive method calls on RuntimeEnvironment.

Attributes

overrides[R]

Public Class Methods

new(parent, descriptor) click to toggle source
# File lib/fig/include_backtrace.rb, line 16
def initialize(parent, descriptor)
  @parent     = parent
  @descriptor = descriptor
  @overrides  = {}
end

Public Instance Methods

add_override(statement) click to toggle source
# File lib/fig/include_backtrace.rb, line 22
def add_override(statement)
  package_name = statement.package_name
  # Don't replace an existing override on the stack
  return if @parent && @parent.get_override(package_name)

  new_version = statement.version
  existing_version = @overrides[package_name]
  if existing_version && existing_version != new_version
    stacktrace = dump_to_string()
    raise Fig::RepositoryError.new(
      "Override #{package_name} version conflict (#{existing_version} vs #{new_version})#{statement.position_string}." + ( stacktrace.empty? ? '' : "\n#{stacktrace}" )
    )
  end

  @overrides[package_name] = new_version
end
dump(out) click to toggle source

Prints a stack trace to the IO object.

# File lib/fig/include_backtrace.rb, line 49
def dump(out)
  stack = []
  collect(stack)
  i = 0
  for descriptor in stack
    indent=''
    i.times { indent += '  ' }
    out.puts indent + descriptor.to_string(:use_default_config, :use_description)
    i += 1
  end
end
get_override(package_name, default_version = nil) click to toggle source

Returns a version.

# File lib/fig/include_backtrace.rb, line 40
def get_override(package_name, default_version = nil)
  version = @overrides[package_name]
  return version if version

  return @parent.get_override(package_name, default_version) if @parent
  return default_version
end

Protected Instance Methods

collect(stack) click to toggle source
# File lib/fig/include_backtrace.rb, line 69
def collect(stack)
  if @parent
    @parent.collect(stack)
  end

  stack << @descriptor
end
dump_to_string() click to toggle source
# File lib/fig/include_backtrace.rb, line 63
def dump_to_string()
  string_handle = StringIO.new
  dump(string_handle)
  return string_handle.string
end