InvocationChain tracks the chain of task invocations to detect circular dependencies.

Namespace
Methods
A
M
T
Constants
EMPTY = EmptyInvocationChain.new
 
Class Public methods
append(invocation, chain)

Class level append.

# File lib/rake/invocation_chain.rb, line 28
def self.append(invocation, chain)
  chain.append(invocation)
end
Instance Public methods
append(invocation)

Append an invocation to the chain of invocations. It is an error if the invocation already listed.

# File lib/rake/invocation_chain.rb, line 15
def append(invocation)
  if member?(invocation)
    fail RuntimeError, "Circular dependency detected: #{to_s} => #{invocation}"
  end
  conj(invocation)
end
member?(invocation)

Is the invocation already in the chain?

# File lib/rake/invocation_chain.rb, line 9
def member?(invocation)
  head == invocation || tail.member?(invocation)
end
to_s()

Convert to string, ie: TOP => invocation => invocation

# File lib/rake/invocation_chain.rb, line 23
def to_s
  "#{prefix}#{head}"
end