transaction (Capistrano::Configuration::Execution)

    # File lib/capistrano/configuration/execution.rb, line 47
          def transaction
            raise ArgumentError, "expected a block" unless block_given?
            raise ScriptError, "transaction must be called from within a task" if task_call_frames.empty?

            return yield if transaction?

            logger.info "transaction: start"
            begin
              self.rollback_requests = []
              yield
              logger.info "transaction: commit"
            rescue Object => e
              rollback!
              raise
            ensure
              self.rollback_requests = nil if Thread.main == Thread.current
            end
          end