class Redis::Pipeline::Multi

def commands

def commands
  if empty?
    []
  else
    [[:multi]] + super + [[:exec]]
  end
end

def finish(replies)

def finish(replies)
  exec = replies.last
  return if exec.nil? # The transaction failed because of WATCH.
  # EXEC command failed.
  raise exec if exec.is_a?(CommandError)
  if exec.size < futures.size
    # Some command wasn't recognized by Redis.
    raise replies.detect { |r| r.is_a?(CommandError) }
  end
  super(exec) do |reply|
    # Because an EXEC returns nested replies, hiredis won't be able to
    # convert an error reply to a CommandError instance itself. This is
    # specific to MULTI/EXEC, so we solve this here.
    reply.is_a?(::RuntimeError) ? CommandError.new(reply.message) : reply
  end
end