def rewind_transaction(name = nil)
raise Transaction::TransactionError, ___tmessage[:cannot_rewind_no_transaction] if @__transaction_checkpoint__.nil?
defined? @__transaction_block__ or @__transaction_block__ = nil
if @__transaction_block__ and name
nix = @__transaction_names__.index(name) + 1
raise Transaction::TransactionError, ___tmessage[:cannot_rewind_transaction_before_block] if nix < @__transaction_block__
end
if name.nil?
checkpoint = @__transaction_checkpoint__
__rewind_this_transaction
@__transaction_checkpoint__ = checkpoint
else
raise Transaction::TransactionError, ___tmessage[:cannot_rewind_named_transaction] % name.inspect unless @__transaction_names__.include?(name)
while @__transaction_names__.last != name
___tdebug_checkpoint
@__transaction_checkpoint__ = __rewind_this_transaction
___tdebug '<', ___tmessage[:rewind_transaction], name
@__transaction_level__ -= 1
@__transaction_names__.pop
end
checkpoint = @__transaction_checkpoint__
__rewind_this_transaction
@__transaction_checkpoint__ = checkpoint
end
___tdebug '|', "%s(%s)", ___tmessage[:rewind_transaction], name.inspect
___tdebug_checkpoint
self
end