• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2009, Google Inc. All rights reserved.
2#
3# Redistribution and use in source and binary forms, with or without
4# modification, are permitted provided that the following conditions are
5# met:
6#
7#     * Redistributions of source code must retain the above copyright
8# notice, this list of conditions and the following disclaimer.
9#     * Redistributions in binary form must reproduce the above
10# copyright notice, this list of conditions and the following disclaimer
11# in the documentation and/or other materials provided with the
12# distribution.
13#     * Neither the name of Google Inc. nor the names of its
14# contributors may be used to endorse or promote products derived from
15# this software without specific prior written permission.
16#
17# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28#
29# WebKit's Python module for committer and reviewer validation
30
31
32class Committer:
33
34    def __init__(self, name, email_or_emails, irc_nickname=None):
35        self.full_name = name
36        if isinstance(email_or_emails, str):
37            self.emails = [email_or_emails]
38        else:
39            self.emails = email_or_emails
40        self.irc_nickname = irc_nickname
41        self.can_review = False
42
43    def bugzilla_email(self):
44        # FIXME: We're assuming the first email is a valid bugzilla email,
45        # which might not be right.
46        return self.emails[0]
47
48    def __str__(self):
49        return '"%s" <%s>' % (self.full_name, self.emails[0])
50
51
52class Reviewer(Committer):
53
54    def __init__(self, name, email_or_emails, irc_nickname=None):
55        Committer.__init__(self, name, email_or_emails, irc_nickname)
56        self.can_review = True
57
58
59# This is intended as a canonical, machine-readable list of all non-reviewer
60# committers for WebKit.  If your name is missing here and you are a committer,
61# please add it.  No review needed.  All reviewers are committers, so this list
62# is only of committers who are not reviewers.
63
64
65committers_unable_to_review = [
66    Committer("Aaron Boodman", "aa@chromium.org", "aboodman"),
67    Committer("Abhishek Arya", "inferno@chromium.org", "inferno-sec"),
68    Committer("Adam Langley", "agl@chromium.org", "agl"),
69    Committer("Adrienne Walker", ["enne@google.com", "enne@chromium.org"], "enne"),
70    Committer("Albert J. Wong", "ajwong@chromium.org"),
71    Committer("Alejandro G. Castro", ["alex@igalia.com", "alex@webkit.org"]),
72    Committer("Alexander Kellett", ["lypanov@mac.com", "a-lists001@lypanov.net", "lypanov@kde.org"], "lypanov"),
73    Committer("Alexander Pavlov", "apavlov@chromium.org", "apavlov"),
74    Committer("Alexis Menard", ["alexis.menard@openbossa.org", "menard@kde.org"], "darktears"),
75    Committer("Andre Boule", "aboule@apple.com"),
76    Committer("Andrei Popescu", "andreip@google.com", "andreip"),
77    Committer("Andrew Wellington", ["andrew@webkit.org", "proton@wiretapped.net"], "proton"),
78    Committer("Andrew Scherkus", "scherkus@chromium.org", "scherkus"),
79    Committer("Andrey Kosyakov", "caseq@chromium.org", "caseq"),
80    Committer("Andras Becsi", ["abecsi@webkit.org", "abecsi@inf.u-szeged.hu"], "bbandix"),
81    Committer("Andy Estes", "aestes@apple.com", "estes"),
82    Committer("Anthony Ricaud", "rik@webkit.org", "rik"),
83    Committer("Anton Muhin", "antonm@chromium.org", "antonm"),
84    Committer("Balazs Kelemen", "kbalazs@webkit.org", "kbalazs"),
85    Committer("Ben Murdoch", "benm@google.com", "benm"),
86    Committer("Benjamin C Meyer", ["ben@meyerhome.net", "ben@webkit.org"], "icefox"),
87    Committer("Benjamin Kalman", ["kalman@chromium.org", "kalman@google.com"], "kalman"),
88    Committer("Benjamin Otte", ["otte@gnome.org", "otte@webkit.org"], "otte"),
89    Committer("Brent Fulgham", "bfulgham@webkit.org", "bfulgham"),
90    Committer("Brett Wilson", "brettw@chromium.org", "brettx"),
91    Committer("Cameron McCormack", "cam@webkit.org", "heycam"),
92    Committer("Carlos Garcia Campos", ["cgarcia@igalia.com", "carlosgc@gnome.org", "carlosgc@webkit.org"], "KaL"),
93    Committer("Carol Szabo", "carol@webkit.org", "cszabo1"),
94    Committer("Chang Shu", ["cshu@webkit.org", "Chang.Shu@nokia.com"], "cshu"),
95    Committer("Chris Evans", "cevans@google.com"),
96    Committer("Chris Petersen", "cpetersen@apple.com", "cpetersen"),
97    Committer("Chris Rogers", "crogers@google.com", "crogers"),
98    Committer("Christian Dywan", ["christian@twotoasts.de", "christian@webkit.org"]),
99    Committer("Collin Jackson", "collinj@webkit.org"),
100    Committer("Daniel Cheng", "dcheng@chromium.org", "dcheng"),
101    Committer("David Smith", ["catfish.man@gmail.com", "dsmith@webkit.org"], "catfishman"),
102    Committer("Dean Jackson", "dino@apple.com", "dino"),
103    Committer("Diego Gonzalez", ["diegohcg@webkit.org", "diego.gonzalez@openbossa.org"], "diegohcg"),
104    Committer("Dirk Pranke", "dpranke@chromium.org", "dpranke"),
105    Committer("Drew Wilson", "atwilson@chromium.org", "atwilson"),
106    Committer("Eli Fidler", "eli@staikos.net", "QBin"),
107    Committer("Emil A Eklund", "eae@chromium.org", "eae"),
108    Committer("Enrica Casucci", "enrica@apple.com"),
109    Committer("Erik Arvidsson", "arv@chromium.org", "arv"),
110    Committer("Eric Roman", "eroman@chromium.org", "eroman"),
111    Committer("Eric Uhrhane", "ericu@chromium.org", "ericu"),
112    Committer("Evan Martin", "evan@chromium.org", "evmar"),
113    Committer("Evan Stade", "estade@chromium.org", "estade"),
114    Committer("Fady Samuel", "fsamuel@chromium.org", "fsamuel"),
115    Committer("Feng Qian", "feng@chromium.org"),
116    Committer("Fumitoshi Ukai", "ukai@chromium.org", "ukai"),
117    Committer("Gabor Loki", "loki@webkit.org", "loki04"),
118    Committer("Gabor Rapcsanyi", ["rgabor@webkit.org", "rgabor@inf.u-szeged.hu"], "rgabor"),
119    Committer("Girish Ramakrishnan", ["girish@forwardbias.in", "ramakrishnan.girish@gmail.com"]),
120    Committer("Graham Dennis", ["Graham.Dennis@gmail.com", "gdennis@webkit.org"]),
121    Committer("Greg Bolsinga", "bolsinga@apple.com"),
122    Committer("Gyuyoung Kim", ["gyuyoung.kim@samsung.com", "gyuyoung.kim@webkit.org"], "gyuyoung"),
123    Committer("Hans Wennborg", "hans@chromium.org", "hwennborg"),
124    Committer("Hayato Ito", "hayato@chromium.org", "hayato"),
125    Committer("Helder Correia", "helder@sencha.com", "helder"),
126    Committer("Hin-Chung Lam", ["hclam@google.com", "hclam@chromium.org"]),
127    Committer("Ilya Tikhonovsky", "loislo@chromium.org", "loislo"),
128    Committer("Ivan Krsti\u0107", "ike@apple.com"),
129    Committer("Jakob Petsovits", ["jpetsovits@rim.com", "jpetso@gmx.at"], "jpetso"),
130    Committer("Jakub Wieczorek", "jwieczorek@webkit.org", "fawek"),
131    Committer("James Hawkins", ["jhawkins@chromium.org", "jhawkins@google.com"], "jhawkins"),
132    Committer("James Kozianski", ["koz@chromium.org", "koz@google.com"], "koz"),
133    Committer("James Simonsen", "simonjam@chromium.org", "simonjam"),
134    Committer("Jay Civelli", "jcivelli@chromium.org", "jcivelli"),
135    Committer("Jeff Miller", "jeffm@apple.com", "jeffm"),
136    Committer("Jenn Braithwaite", "jennb@chromium.org", "jennb"),
137    Committer("Jens Alfke", ["snej@chromium.org", "jens@apple.com"]),
138    Committer("Jer Noble", "jer.noble@apple.com", "jernoble"),
139    Committer("Jeremy Moskovich", ["playmobil@google.com", "jeremy@chromium.org"], "jeremymos"),
140    Committer("Jessie Berlin", ["jberlin@webkit.org", "jberlin@apple.com"]),
141    Committer("Jesus Sanchez-Palencia", ["jesus@webkit.org", "jesus.palencia@openbossa.org"], "jeez_"),
142    Committer("Jocelyn Turcotte", "jocelyn.turcotte@nokia.com", "jturcotte"),
143    Committer("Jochen Eisinger", "jochen@chromium.org", "jochen__"),
144    Committer("John Abd-El-Malek", "jam@chromium.org", "jam"),
145    Committer("John Gregg", ["johnnyg@google.com", "johnnyg@chromium.org"], "johnnyg"),
146    Committer("John Knottenbelt", "jknotten@chromium.org", "jknotten"),
147    Committer("Johnny Ding", ["jnd@chromium.org", "johnnyding.webkit@gmail.com"], "johnnyding"),
148    Committer("Joone Hur", ["joone.hur@collabora.co.uk", "joone@kldp.org", "joone@webkit.org"], "joone"),
149    Committer("Joost de Valk", ["joost@webkit.org", "webkit-dev@joostdevalk.nl"], "Altha"),
150    Committer("Julie Parent", ["jparent@google.com", "jparent@chromium.org"], "jparent"),
151    Committer("Julien Chaffraix", ["jchaffraix@webkit.org", "julien.chaffraix@gmail.com"]),
152    Committer("Jungshik Shin", "jshin@chromium.org"),
153    Committer("Justin Schuh", "jschuh@chromium.org", "jschuh"),
154    Committer("Keishi Hattori", "keishi@webkit.org", "keishi"),
155    Committer("Kelly Norton", "knorton@google.com"),
156    Committer("Kenji Imasaki", "imasaki@chromium.org", "imasaki"),
157    Committer("Kent Hansen", "kent.hansen@nokia.com", "khansen"),
158    Committer("Kimmo Kinnunen", ["kimmo.t.kinnunen@nokia.com", "kimmok@iki.fi", "ktkinnun@webkit.org"], "kimmok"),
159    Committer("Kinuko Yasuda", "kinuko@chromium.org", "kinuko"),
160    Committer("Krzysztof Kowalczyk", "kkowalczyk@gmail.com"),
161    Committer("Kwang Yul Seo", ["kwangyul.seo@gmail.com", "skyul@company100.net", "kseo@webkit.org"], "kwangseo"),
162    Committer("Leandro Pereira", ["leandro@profusion.mobi", "leandro@webkit.org"], "acidx"),
163    Committer("Levi Weintraub", ["leviw@chromium.org", "leviw@google.com", "lweintraub@apple.com"], "leviw"),
164    Committer("Lucas De Marchi", ["lucas.demarchi@profusion.mobi", "demarchi@webkit.org"], "demarchi"),
165    Committer("Lucas Forschler", ["lforschler@apple.com"], "lforschler"),
166    Committer("Luiz Agostini", ["luiz@webkit.org", "luiz.agostini@openbossa.org"], "lca"),
167    Committer("Mads Ager", "ager@chromium.org"),
168    Committer("Marcus Voltis Bulach", "bulach@chromium.org"),
169    Committer("Mario Sanchez Prada", ["msanchez@igalia.com", "mario@webkit.org"], "msanchez"),
170    Committer("Matt Delaney", "mdelaney@apple.com"),
171    Committer("Matt Lilek", ["webkit@mattlilek.com", "pewtermoose@webkit.org"]),
172    Committer("Matt Perry", "mpcomplete@chromium.org"),
173    Committer("Maxime Britto", ["maxime.britto@gmail.com", "britto@apple.com"]),
174    Committer("Maxime Simon", ["simon.maxime@gmail.com", "maxime.simon@webkit.org"], "maxime.simon"),
175    Committer("Michael Nordman", "michaeln@google.com", "michaeln"),
176    Committer("Michael Saboff", "msaboff@apple.com"),
177    Committer("Michelangelo De Simone", "michelangelo@webkit.org", "michelangelo"),
178    Committer("Mike Belshe", ["mbelshe@chromium.org", "mike@belshe.com"]),
179    Committer("Mike Fenton", ["mifenton@rim.com", "mike.fenton@torchmobile.com"], "mfenton"),
180    Committer("Mike Thole", ["mthole@mikethole.com", "mthole@apple.com"]),
181    Committer("Mikhail Naganov", "mnaganov@chromium.org"),
182    Committer("MORITA Hajime", "morrita@google.com", "morrita"),
183    Committer("Nico Weber", ["thakis@chromium.org", "thakis@google.com"], "thakis"),
184    Committer("Noam Rosenthal", "noam.rosenthal@nokia.com", "noamr"),
185    Committer("Pam Greene", "pam@chromium.org", "pamg"),
186    Committer("Patrick Gansterer", ["paroga@paroga.com", "paroga@webkit.org"], "paroga"),
187    Committer("Pavel Podivilov", "podivilov@chromium.org", "podivilov"),
188    Committer("Peter Kasting", ["pkasting@google.com", "pkasting@chromium.org"], "pkasting"),
189    Committer("Peter Varga", ["pvarga@webkit.org", "pvarga@inf.u-szeged.hu"], "stampho"),
190    Committer("Philippe Normand", ["pnormand@igalia.com", "philn@webkit.org"], "philn-tp"),
191    Committer("Pierre d'Herbemont", ["pdherbemont@free.fr", "pdherbemont@apple.com"], "pdherbemont"),
192    Committer("Pierre-Olivier Latour", "pol@apple.com", "pol"),
193    Committer("Pratik Solanki", "psolanki@apple.com", "psolanki"),
194    Committer("Qi Zhang", ["qi.2.zhang@nokia.com", "qi.zhang02180@gmail.com"], "qi"),
195    Committer("Renata Hodovan", "reni@webkit.org", "reni"),
196    Committer("Robert Hogan", ["robert@webkit.org", "robert@roberthogan.net", "lists@roberthogan.net"], "mwenge"),
197    Committer("Roland Steiner", "rolandsteiner@chromium.org"),
198    Committer("Satish Sampath", "satish@chromium.org"),
199    Committer("Scott Violet", "sky@chromium.org", "sky"),
200    Committer("Sergio Villar Senin", ["svillar@igalia.com", "sergio@webkit.org"], "svillar"),
201    Committer("Stephen White", "senorblanco@chromium.org", "senorblanco"),
202    Committer("Trey Matteson", "trey@usa.net", "trey"),
203    Committer("Tristan O'Tierney", ["tristan@otierney.net", "tristan@apple.com"]),
204    Committer("Vangelis Kokkevis", "vangelis@chromium.org", "vangelis"),
205    Committer("Victor Wang", "victorw@chromium.org", "victorw"),
206    Committer("Vitaly Repeshko", "vitalyr@chromium.org"),
207    Committer("William Siegrist", "wsiegrist@apple.com", "wms"),
208    Committer("W. James MacLean", "wjmaclean@chromium.org", "wjmaclean"),
209    Committer("Xiaomei Ji", "xji@chromium.org", "xji"),
210    Committer("Yael Aharon", "yael.aharon@nokia.com", "yael"),
211    Committer("Yaar Schnitman", ["yaar@chromium.org", "yaar@google.com"]),
212    Committer("Yong Li", ["yong.li.webkit@gmail.com", "yong.li@torchmobile.com"], "yong"),
213    Committer("Yongjun Zhang", "yongjun.zhang@nokia.com"),
214    Committer("Yi Shen", ["yi.4.shen@nokia.com", "shenyi2006@gmail.com"]),
215    Committer("Yuta Kitamura", "yutak@chromium.org", "yutak"),
216    Committer("Yuzo Fujishima", "yuzo@google.com", "yuzo"),
217    Committer("Zhenyao Mo", "zmo@google.com", "zhenyao"),
218    Committer("Zoltan Herczeg", "zherczeg@webkit.org", "zherczeg"),
219    Committer("Zoltan Horvath", ["zoltan@webkit.org", "hzoltan@inf.u-szeged.hu", "horvath.zoltan.6@stud.u-szeged.hu"], "zoltan"),
220]
221
222
223# This is intended as a canonical, machine-readable list of all reviewers for
224# WebKit.  If your name is missing here and you are a reviewer, please add it.
225# No review needed.
226
227
228reviewers_list = [
229    Reviewer("Ada Chan", "adachan@apple.com", "chanada"),
230    Reviewer("Adam Barth", "abarth@webkit.org", "abarth"),
231    Reviewer("Adam Roben", "aroben@apple.com", "aroben"),
232    Reviewer("Adam Treat", ["treat@kde.org", "treat@webkit.org", "atreat@rim.com"], "manyoso"),
233    Reviewer("Adele Peterson", "adele@apple.com", "adele"),
234    Reviewer("Alexey Proskuryakov", ["ap@webkit.org", "ap@apple.com"], "ap"),
235    Reviewer("Alice Liu", "alice.liu@apple.com", "aliu"),
236    Reviewer("Alp Toker", ["alp@nuanti.com", "alp@atoker.com", "alp@webkit.org"], "alp"),
237    Reviewer("Anders Carlsson", ["andersca@apple.com", "acarlsson@apple.com"], "andersca"),
238    Reviewer("Andreas Kling", ["kling@webkit.org", "andreas.kling@nokia.com"], "kling"),
239    Reviewer("Antonio Gomes", ["tonikitoo@webkit.org", "agomes@rim.com"], "tonikitoo"),
240    Reviewer("Antti Koivisto", ["koivisto@iki.fi", "antti@apple.com", "antti.j.koivisto@nokia.com"], "anttik"),
241    Reviewer("Ariya Hidayat", ["ariya.hidayat@gmail.com", "ariya@sencha.com", "ariya@webkit.org"], "ariya"),
242    Reviewer("Benjamin Poulain", ["benjamin@webkit.org", "benjamin.poulain@nokia.com", "ikipou@gmail.com"], "benjaminp"),
243    Reviewer("Beth Dakin", "bdakin@apple.com", "dethbakin"),
244    Reviewer("Brady Eidson", "beidson@apple.com", "bradee-oh"),
245    Reviewer("Brian Weinstein", "bweinstein@apple.com", "bweinstein"),
246    Reviewer("Cameron Zwarich", ["zwarich@apple.com", "cwzwarich@apple.com", "cwzwarich@webkit.org"]),
247    Reviewer("Chris Blumenberg", "cblu@apple.com", "cblu"),
248    Reviewer("Chris Marrin", "cmarrin@apple.com", "cmarrin"),
249    Reviewer("Chris Fleizach", "cfleizach@apple.com", "cfleizach"),
250    Reviewer("Chris Jerdonek", "cjerdonek@webkit.org", "cjerdonek"),
251    Reviewer(u"Csaba Osztrogon\u00e1c", "ossy@webkit.org", "ossy"),
252    Reviewer("Dan Bernstein", ["mitz@webkit.org", "mitz@apple.com"], "mitzpettel"),
253    Reviewer("Daniel Bates", "dbates@webkit.org", "dydz"),
254    Reviewer("Darin Adler", "darin@apple.com", "darin"),
255    Reviewer("Darin Fisher", ["fishd@chromium.org", "darin@chromium.org"], "fishd"),
256    Reviewer("David Harrison", "harrison@apple.com", "harrison"),
257    Reviewer("David Hyatt", "hyatt@apple.com", "hyatt"),
258    Reviewer("David Kilzer", ["ddkilzer@webkit.org", "ddkilzer@apple.com"], "ddkilzer"),
259    Reviewer("David Levin", "levin@chromium.org", "dave_levin"),
260    Reviewer("Dimitri Glazkov", "dglazkov@chromium.org", "dglazkov"),
261    Reviewer("Dirk Schulze", "krit@webkit.org", "krit"),
262    Reviewer("Dmitry Titov", "dimich@chromium.org", "dimich"),
263    Reviewer("Don Melton", "gramps@apple.com", "gramps"),
264    Reviewer("Dumitru Daniliuc", "dumi@chromium.org", "dumi"),
265    Reviewer("Eric Carlson", "eric.carlson@apple.com"),
266    Reviewer("Eric Seidel", "eric@webkit.org", "eseidel"),
267    Reviewer("Gavin Barraclough", "barraclough@apple.com", "gbarra"),
268    Reviewer("Geoffrey Garen", "ggaren@apple.com", "ggaren"),
269    Reviewer("George Staikos", ["staikos@kde.org", "staikos@webkit.org"]),
270    Reviewer("Gustavo Noronha Silva", ["gns@gnome.org", "kov@webkit.org", "gustavo.noronha@collabora.co.uk"], "kov"),
271    Reviewer("Holger Freyther", ["zecke@selfish.org", "zecke@webkit.org"], "zecke"),
272    Reviewer("James Robinson", ["jamesr@chromium.org", "jamesr@google.com"], "jamesr"),
273    Reviewer("Jan Alonzo", ["jmalonzo@gmail.com", "jmalonzo@webkit.org"], "janm"),
274    Reviewer("Jeremy Orlow", "jorlow@chromium.org", "jorlow"),
275    Reviewer("Jian Li", "jianli@chromium.org", "jianli"),
276    Reviewer("John Sullivan", "sullivan@apple.com", "sullivan"),
277    Reviewer("Jon Honeycutt", "jhoneycutt@apple.com", "jhoneycutt"),
278    Reviewer("Joseph Pecoraro", ["joepeck@webkit.org", "pecoraro@apple.com"], "JoePeck"),
279    Reviewer("Justin Garcia", "justin.garcia@apple.com", "justing"),
280    Reviewer("Ken Kocienda", "kocienda@apple.com"),
281    Reviewer("Kenneth Rohde Christiansen", ["kenneth@webkit.org", "kenneth.christiansen@openbossa.org", "kenneth.christiansen@gmail.com"], "kenne"),
282    Reviewer("Kenneth Russell", "kbr@google.com", "kbr_google"),
283    Reviewer("Kent Tamura", "tkent@chromium.org", "tkent"),
284    Reviewer("Kevin Decker", "kdecker@apple.com", "superkevin"),
285    Reviewer("Kevin McCullough", "kmccullough@apple.com", "maculloch"),
286    Reviewer("Kevin Ollivier", ["kevino@theolliviers.com", "kevino@webkit.org"], "kollivier"),
287    Reviewer("Lars Knoll", ["lars@trolltech.com", "lars@kde.org", "lars.knoll@nokia.com"], "lars"),
288    Reviewer("Laszlo Gombos", "laszlo.1.gombos@nokia.com", "lgombos"),
289    Reviewer("Maciej Stachowiak", "mjs@apple.com", "othermaciej"),
290    Reviewer("Mark Rowe", "mrowe@apple.com", "bdash"),
291    Reviewer("Martin Robinson", ["mrobinson@webkit.org", "mrobinson@igalia.com", "martin.james.robinson@gmail.com"], "mrobinson"),
292    Reviewer("Mihai Parparita", "mihaip@chromium.org", "mihaip"),
293    Reviewer("Nate Chapin", "japhet@chromium.org", "japhet"),
294    Reviewer("Nikolas Zimmermann", ["zimmermann@kde.org", "zimmermann@physik.rwth-aachen.de", "zimmermann@webkit.org"], "wildfox"),
295    Reviewer("Ojan Vafai", "ojan@chromium.org", "ojan"),
296    Reviewer("Oliver Hunt", "oliver@apple.com", "olliej"),
297    Reviewer("Pavel Feldman", "pfeldman@chromium.org", "pfeldman"),
298    Reviewer("Richard Williamson", "rjw@apple.com", "rjw"),
299    Reviewer("Rob Buis", ["rwlbuis@gmail.com", "rwlbuis@webkit.org"], "rwlbuis"),
300    Reviewer("Ryosuke Niwa", "rniwa@webkit.org", "rniwa"),
301    Reviewer("Sam Weinig", ["sam@webkit.org", "weinig@apple.com"], "weinig"),
302    Reviewer("Shinichiro Hamaji", "hamaji@chromium.org", "hamaji"),
303    Reviewer("Simon Fraser", "simon.fraser@apple.com", "smfr"),
304    Reviewer("Simon Hausmann", ["hausmann@webkit.org", "hausmann@kde.org", "simon.hausmann@nokia.com"], "tronical"),
305    Reviewer("Stephanie Lewis", "slewis@apple.com", "sundiamonde"),
306    Reviewer("Steve Block", "steveblock@google.com", "steveblock"),
307    Reviewer("Steve Falkenburg", "sfalken@apple.com", "sfalken"),
308    Reviewer("Tim Omernick", "timo@apple.com"),
309    Reviewer("Timothy Hatcher", ["timothy@apple.com", "timothy@hatcher.name"], "xenon"),
310    Reviewer("Tony Chang", "tony@chromium.org", "tony^work"),
311    Reviewer("Tony Gentilcore", "tonyg@chromium.org", "tonyg-cr"),
312    Reviewer(u"Tor Arne Vestb\u00f8", ["vestbo@webkit.org", "tor.arne.vestbo@nokia.com"], "torarne"),
313    Reviewer("Vicki Murley", "vicki@apple.com"),
314    Reviewer("Xan Lopez", ["xan.lopez@gmail.com", "xan@gnome.org", "xan@webkit.org"], "xan"),
315    Reviewer("Yury Semikhatsky", "yurys@chromium.org", "yurys"),
316    Reviewer("Zack Rusin", "zack@kde.org", "zackr"),
317]
318
319
320class CommitterList:
321
322    # Committers and reviewers are passed in to allow easy testing
323
324    def __init__(self,
325                 committers=committers_unable_to_review,
326                 reviewers=reviewers_list):
327        self._committers = committers + reviewers
328        self._reviewers = reviewers
329        self._committers_by_email = {}
330
331    def committers(self):
332        return self._committers
333
334    def reviewers(self):
335        return self._reviewers
336
337    def _email_to_committer_map(self):
338        if not len(self._committers_by_email):
339            for committer in self._committers:
340                for email in committer.emails:
341                    self._committers_by_email[email] = committer
342        return self._committers_by_email
343
344    def committer_by_name(self, name):
345        # This could be made into a hash lookup if callers need it to be fast.
346        for committer in self.committers():
347            if committer.full_name == name:
348                return committer
349
350    def committer_by_email(self, email):
351        return self._email_to_committer_map().get(email)
352
353    def reviewer_by_email(self, email):
354        committer = self.committer_by_email(email)
355        if committer and not committer.can_review:
356            return None
357        return committer
358