# File lib/r10k/task_runner.rb, line 21
  def run
    catch :abort do
      until @tasks.empty?
        current = @tasks.first
        current.task_runner = self
        begin
          current.call
        rescue Interrupt => e
          logger.error "Aborted!"
          $stderr.puts e.backtrace.join("\n").red if @trace
          @succeeded = false
          throw :abort
        rescue => e
          logger.error "Task #{current} failed while running: #{e.message}"
          $stderr.puts e.backtrace.join("\n").red if @trace

          @errors[current] = e
          @succeeded = false
        end
        @tasks.shift
      end
    end
  end