You're seeing just the function perform, go back to Manifest module for more information.


perform(t()) :: t()

Performs the steps in the order given to the manifest.

(Each new call of add_step/1 prepends a Manifest.Step.t/0 to the list, then the list is reversed before performing.) If a step's succeeds without returning :no_rollback in the tuple, the Manifest.Step.parser/0 finds the identifier, and a Manifest.Step.rollback/0 is defined the rollback will be added to the :rollbacks stack. If a step fails, the :halt? will activate and no further work will be performed. The :errored key will be set to the operation that triggered the failure. Whether or not the step fails, a key-value pair will be added to the :previous field. The Manifest.Step.operation/0 will be the key of that key-value pair.

TL;DR: There's three paths a step can take:

  1. It returns {:ok, term} in which case it will add a rollback to the stack.
  2. It returns {:ok, :no_rollback, term} where no rollback will be added.
  3. It returns {:error, term} which will halt the Manifest and no further steps will be performed. You can then choose to roll it all back where it will pop the functions off the stack.

See digest/1 as it provides an easier way of extracting pertinent information on what happened during this function.