#!/usr/bin/env python
# -*- coding: utf-8 -*-

from webkitpy.common.checkout.scm import default_scm
from webkitpy.common.checkout.checkout import Checkout
from webkitpy.common.system.executive import Executive
from webkitpy.common.net.bugzilla import Bugzilla
from xml.sax.saxutils import unescape
import sys
import os

scm = default_scm()

gtk_dirs = ['gtk', 'gobject', 'soup', 'cairo', 'gstreamer']
log_dirs = []
for root, dirs, dummy in os.walk(scm.checkout_root):
    for d in dirs:
        if d in gtk_dirs:
            log_dirs.append(os.path.join(root, d))

command = ['git', 'log', '--pretty=%H', sys.argv[1] + '..', '--']
command.extend (log_dirs)
revisions = Executive().run_command(command).splitlines()

co = Checkout(scm)
bugs = {}
for rev in revisions:
    info = co.commit_info_for_revision(scm.svn_revision_from_git_commit(rev))
    if not info:
        print "Error: no commit info found for git revision %s" % (rev)
        continue
    bug_id = info.bug_id()
    if bug_id:
        author_name = info.author_name()
        authors = bugs.setdefault(bug_id, [])
        if author_name not in authors:
            authors.append(author_name)

bugzilla = Bugzilla()
for bug_id in bugs:
    try:
        bug_title = bugzilla.fetch_bug_dictionary(bug_id)['title']
    except:
        print "Error getting info for bug #%s" % (bug_id)
        continue
    bug_title = unescape(bug_title, {"&apos;": "'", "&quot;": '"'})
    print u"Bug %s – %s (%s)" % (bug_id, bug_title, ", ".join (bugs[bug_id]))
