[webkit-dev] Darin Adler is a machine

Eric Seidel eric at webkit.org
Fri Jun 19 02:42:51 PDT 2009


At request of folks in #webkit I ended up making the script nicer...
now that I have it all fancy, I've posted it on a bug:
https://bugs.webkit.org/show_bug.cgi?id=26533

Maybe it can be stripped for parts some day...  Or maybe we should use
it to clean up the ChangeLogs to actually have nice names for all
reviewers. :)

Either way, back to real work...

-eric

On Fri, Jun 19, 2009 at 12:27 AM, Eric Seidel<eric at webkit.org> wrote:
> There really is no other way to describe it.  Thanks to Darin for his
> un-ending reviews!
>
> (Reviews to WebCore since 2008-08-10, aka the last 10 months.)
> ./reviewers.py WebCore/ChangeLog WebCore/ChangeLog-2009-06-16
>
> Darin Adler 609
> Sam Weinig 319
> Eric Seidel 313
> David Hyatt 236
> Dan Bernstein 208
> Oliver Hunt 202
> Simon Fraser 159
> Timothy Hatcher 147
> Alexey Proskuryakov 139
> Mark Rowe 116
> Dimitri Glazkov 101
> Simon Hausmann 99
> Holger Hans Peter Freyther 94
> Adam Roben 91
> Anders Carlsson 83
> Geoffrey Garen 74
> Darin Fisher 68
> Maciej Stachowiak 68
> Adele Peterson 66
> George Staikos 59
> Beth Dakin 52
> Antti Koivisto 46
> John Sullivan 36
> Cameron Zwarich 36
> Gustavo Noronha 34
> Nikolas Zimmermann 33
> Kevin McCullough 31
> Tor Arne Vestbø 29
> Kevin Ollivier 29
> Justin Garcia 24
> Brady Eidson 22
> David Kilzer 21
> Xan Lopez 17
> Alp Toker 17
> Steve Falkenburg 11
> Kevin Decker 11
> Ariya Hidayat 11
> Jan Alonzo 10
> Jon Honeycutt 8
> David Levin 8
> Gavin Barraclough 7
> Ada Chan 7
>
> (Oh, and please don't actually take that list to mean anything.  It
> only includes WebCore, not JavaScriptCore or WebKit and I'm sure it's
> fraught with all sorts of other errors.)
>
> The script I used (hand written, with love):
>
> reviewers.py:
>
> #!/usr/bin/python
>
> import sys
> import re
>
> changelog_paths = sys.argv[1:]
>
> reviewer_counts = {}
>
> name_mappings = {
>    'Adele' : 'Adele Peterson',
>    'Alexey' : 'Alexey Proskuryakov',
>    'Anders' : 'Anders Carlsson',
>    'Antti' : 'Antti Koivisto',
>    'Beth' : 'Beth Dakin',
>    'cpst' : 'Cameron Zwarich',
>    'Darin Alder' : 'Darin Adler',
>    'Darin' : 'Darin Adler', # Possible collision!
>    'Dave Hyatt' : 'David Hyatt',
>    'Dave Kilzer' : 'David Kilzer',
>    'Eric Siedel' : 'Eric Seidel',
>    'Eric' : 'Eric Seidel',
>    'eseidel' : "Eric Seidel",
>    'Geoff Garen' : 'Geoffrey Garen',
>    'Geoff' : 'Geoffrey Garen',
>    'ggaren' : 'Geoffrey Garen',
>    'Holger Freyther' : 'Holger Hans Peter Freyther',
>    'Holger' : 'Holger Hans Peter Freyther',
>    'hyatt' : 'David Hyatt',
>    'Jon Homeycutt' : 'Jon Honeycutt',
>    'Lars' : 'Lars Knoll',
>    'Maciej' : 'Maciej Stachowiak',
>    'Mark' : 'Mark Rowe',
>    'Mitz Pettel' : 'Dan Bernstein',
>    'Mitz' : 'Dan Bernstein',
>    'Mitzpettel' : 'Dan Bernstein',
>    'Niko Zimmermann' : 'Nikolas Zimmermann',
>    'Niko' : 'Nikolas Zimmermann',
>    'Oliver' : 'Oliver Hunt',
>    'olliej' : 'Oliver Hunt',
>    'Sam' : 'Sam Weinig',
>    'Simon' : 'Simon Fraser', # Possible collision!
>    'Tim' : 'Timothy Hatcher',
>    'Tim Hatcher' : 'Timothy Hatcher',
>    'weinig' : 'Sam Weinig',
>    'Tor Arne' : u'Tor Arne Vestb\xc3'
> }
>
> multi_reviewer_joins = [
>    ', and ', # bad grammar!
>    ' and ',
>    ', ',
>    ' & ',
>    '/',
>    '. Math checked by ',
> ]
>
> remove_prefixes = [
>    'Mr. ',
>    'and done with ',
>    'previously by ',
>    '(unofficially) ',
>    'okayed by ',
> ]
>
> def split_reviewers(reviewer_string):
>    reviewers = [reviewer_string]
>    for join in multi_reviewer_joins:
>        split_reviewers = []
>        for reviewer in reviewers:
>            split_reviewers.extend(reviewer.split(join))
>        reviewers = split_reviewers
>    return reviewers
>
> for changelog_path in changelog_paths:
>    change_log = open(changelog_path)
>    for line in change_log:
>        line = line.rstrip('\n')
>        match = re.match("^\s+Reviewed by (.*?)\.?$", line) # Discard
> everything after the first period
>        if not match:
>            continue
>        reviewer_string = match.group(1)
>
>        reviewer_string = re.sub('\.\s+Landed by .*', '',
> reviewer_string) # remove "Landed by ..."
>        reviewer_string = re.sub('\.\s+Landed \(and tweaked\) by .*',
> '', reviewer_string) # remove "Landed by ..."
>
>        reviewer_string = re.sub('\s+<.*>', '', reviewer_string) #
> remove email addresses
>        reviewer_string = re.sub('".*" ', '', reviewer_string) #
> remove wrestler names :)
>        reviewer_string = re.sub("'.*' ", '', reviewer_string) #
> remove wrestler names :)
>
>        for prefix in remove_prefixes:
>            reviewer_string = reviewer_string.replace(prefix, '')
>
>        reviewers = split_reviewers(reviewer_string)
>
>        for reviewer in reviewers:
>            if reviewer in name_mappings:
>                reviewer = name_mappings[reviewer]
>
>            reviewer_counts[reviewer] = reviewer_counts.get(reviewer, 0) + 1
>
> reveiwer_count_pairs = reviewer_counts.items()
>
> reveiwer_count_pairs.sort(key = lambda pair: pair[1], reverse=True)
>
> for pair in reveiwer_count_pairs:
>    print "%s %d" % pair
>
> last_names = {}
> for pair in reveiwer_count_pairs:
>    names = pair[0].split(' ')
>    last_name = names[-1]
>    if last_name in last_names:
>        print "WARNING: " + last_name + " matches, \"" + pair[0] + "\"
> may appear twice!"
>    last_names[last_name] = 1
>


More information about the webkit-dev mailing list