[webkit-dev] Darin Adler is a machine

Eric Seidel eric at webkit.org
Fri Jun 19 00:27:45 PDT 2009


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