<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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