I, for one, welcome our new mechanized reviewer overlords. Adam
On Fri, Jun 19, 2009 at 12:27 AM, Eric Seidel<[email protected]> 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 > _______________________________________________ > webkit-dev mailing list > [email protected] > http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev > _______________________________________________ webkit-dev mailing list [email protected] http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

