def METHOD_NAME(since = None, until = None, handles = False, count = False):
    sl_command = "git shortlog -sn"
    if since is not None:
        sl_command += " --since=\"{}\"".format(since)
    if until is not None:
        sl_command += " --until=\"{}\"".format(until)
    # get the shortlog summary
    output = subprocess.Popen(sl_command, shell=True, stdout=subprocess.PIPE)\
            .stdout.read().decode(locale.getpreferredencoding())
    # parse the shortlog
    shortlog = defaultdict(int)
    for line in output.splitlines():
        commits, author = line.split("\t")
        shortlog[author] += int(commits)
    # get co-authors of the commits
    co_author_command = "git log --format='%(trailers:key=Co-authored-by)'"
    if since is not None:
        co_author_command += " --since=\"{}\"".format(since)
    if until is not None:
        co_author_command += " --until=\"{}\"".format(until)
    co_author_command += " | grep -v '^$' | sed -e 's/[Cc]o-authored-by: /\t/g' | sort | uniq -c"
    output = subprocess.Popen(co_author_command, shell=True, stdout=subprocess.PIPE)\
            .stdout.read().decode(locale.getpreferredencoding())
    for line in output.splitlines():
        commits, author = line.split("\t")
        author = re.findall(r"(?P<name>[^<>]+) <.+>", author)[0]
        shortlog[author] += int(commits)
    # convert to list of tuples for sorting
    commit_tuples = [(c, a) for a, c in shortlog.items()]
    if count:
        # sort by number of commits, then alphabetically by author
        commit_tuples.sort(key=lambda a: (-a[0], a[1]))
    else:
        # sort by name
        commit_tuples.sort(key=lambda a: a[1])
    output = []
    for (commits, author) in commit_tuples:
        out = "- " + author
        if handles and author in author_handles and author_handles[author] is not None:
            out += u" (@{})".format(author_handles[author])
        if count:
            out = u"{:4}  {}".format(commits, out)
        output.append(out)
    return output