docs: def log(
          self, revrange=None, limit=None, firstparent=False, merges=None,
          path=None, follow=False
      ):
          """Get commit logs
  
          :param revrange: Either a single revision or a range of revisions as a
                           2-element list or tuple.
          :param int limit: Limit the number of log entries.
          :param bool firstparent: Only follow the first parent of merges.
          :param bool merges: True means only merges, False means no merges,
                              None means both merges and non-merges.
          :param str path: Only match commits containing changes on this path.
          :param bool follow: Follow file history across renames.
          :returns: log information
          :rtype: :class:`CommitLogEntry` or list of :class:`CommitLogEntry`
  
          If revrange is None, return a list of all log entries in reverse
          chronological order.
  
          If revrange is a single revision, return a single log entry.
  
          If revrange is a 2 element list [A,B] or tuple (A,B), return a list of log
          entries starting at B and following that branch back to A or one of its
          ancestors (not inclusive. If A is None, follow branch B back to the
          beginning of history. If B is None, list all descendants in reverse
          chronological order.
  
          """
          raise NotImplementedError