OLD | NEW |
| (Empty) |
1 # Copyright (c) 2011, Apple Inc. All rights reserved. | |
2 # Copyright (c) 2009, 2011, 2012 Google Inc. All rights reserved. | |
3 # | |
4 # Redistribution and use in source and binary forms, with or without | |
5 # modification, are permitted provided that the following conditions are | |
6 # met: | |
7 # | |
8 # * Redistributions of source code must retain the above copyright | |
9 # notice, this list of conditions and the following disclaimer. | |
10 # * Redistributions in binary form must reproduce the above | |
11 # copyright notice, this list of conditions and the following disclaimer | |
12 # in the documentation and/or other materials provided with the | |
13 # distribution. | |
14 # * Neither the name of Google Inc. nor the names of its | |
15 # contributors may be used to endorse or promote products derived from | |
16 # this software without specific prior written permission. | |
17 # | |
18 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
19 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
20 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
21 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
22 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
23 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
24 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
25 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
26 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
27 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
28 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
29 # | |
30 # WebKit's Python module for committer and reviewer validation. | |
31 | |
32 from webkitpy.common.editdistance import edit_distance | |
33 import fnmatch | |
34 | |
35 class Account(object): | |
36 def __init__(self, name, email_or_emails, irc_nickname_or_nicknames=None): | |
37 assert(name) | |
38 assert(email_or_emails) | |
39 self.full_name = name | |
40 if isinstance(email_or_emails, str): | |
41 self.emails = [email_or_emails] | |
42 else: | |
43 self.emails = email_or_emails | |
44 self.emails = map(lambda email: email.lower(), self.emails) # Emails ar
e case-insensitive. | |
45 if isinstance(irc_nickname_or_nicknames, str): | |
46 self.irc_nicknames = [irc_nickname_or_nicknames] | |
47 else: | |
48 self.irc_nicknames = irc_nickname_or_nicknames | |
49 self.can_commit = False | |
50 self.can_review = False | |
51 | |
52 def bugzilla_email(self): | |
53 # FIXME: We're assuming the first email is a valid bugzilla email, | |
54 # which might not be right. | |
55 return self.emails[0] | |
56 | |
57 def __str__(self): | |
58 return '"%s" <%s>' % (self.full_name, self.emails[0]) | |
59 | |
60 def contains_string(self, search_string): | |
61 string = search_string.lower() | |
62 if string in self.full_name.lower(): | |
63 return True | |
64 if self.irc_nicknames: | |
65 for nickname in self.irc_nicknames: | |
66 if string in nickname.lower(): | |
67 return True | |
68 for email in self.emails: | |
69 if string in email: | |
70 return True | |
71 return False | |
72 | |
73 def matches_glob(self, glob_string): | |
74 if fnmatch.fnmatch(self.full_name, glob_string): | |
75 return True | |
76 if self.irc_nicknames: | |
77 for nickname in self.irc_nicknames: | |
78 if fnmatch.fnmatch(nickname, glob_string): | |
79 return True | |
80 for email in self.emails: | |
81 if fnmatch.fnmatch(email, glob_string): | |
82 return True | |
83 return False | |
84 | |
85 | |
86 class Contributor(Account): | |
87 def __init__(self, name, email_or_emails, irc_nickname=None): | |
88 Account.__init__(self, name, email_or_emails, irc_nickname) | |
89 self.is_contributor = True | |
90 | |
91 | |
92 class Committer(Contributor): | |
93 def __init__(self, name, email_or_emails, irc_nickname=None): | |
94 Contributor.__init__(self, name, email_or_emails, irc_nickname) | |
95 self.can_commit = True | |
96 | |
97 | |
98 class Reviewer(Committer): | |
99 def __init__(self, name, email_or_emails, irc_nickname=None): | |
100 Committer.__init__(self, name, email_or_emails, irc_nickname) | |
101 self.can_review = True | |
102 | |
103 | |
104 # This is a list of email addresses that have bugzilla accounts but are not | |
105 # used for contributing (such as mailing lists). | |
106 | |
107 | |
108 watchers_who_are_not_contributors = [ | |
109 Account("Chromium Compositor Bugs", ["cc-bugs@chromium.org"], ""), | |
110 Account("Chromium Media Reviews", ["feature-media-reviews@chromium.org"], ""
), | |
111 Account("David Levin", ["levin+threading@chromium.org"], ""), | |
112 Account("David Levin", ["levin+watchlist@chromium.org"], ""), | |
113 Account("Kent Tamura", ["tkent+wkapi@chromium.org"], ""), | |
114 Account("Mike West", ["mkwst+watchlist@chromium.org"], ""), | |
115 ] | |
116 | |
117 | |
118 # This is a list of people (or bots) who are neither committers nor reviewers, b
ut get | |
119 # frequently CC'ed by others on Bugzilla bugs, so their names should be | |
120 # supported by autocomplete. No review needed to add to the list. | |
121 | |
122 | |
123 contributors_who_are_not_committers = [ | |
124 Contributor("Adobe Bug Tracker", "WebkitBugTracker@adobe.com"), | |
125 Contributor("Aharon Lanin", "aharon@google.com"), | |
126 Contributor("Alan Cutter", "alancutter@chromium.org", "alancutter"), | |
127 Contributor("Alan Stearns", "stearns@adobe.com", "astearns"), | |
128 Contributor("Alejandro Pineiro", "apinheiro@igalia.com"), | |
129 Contributor("Alexey Marinichev", ["amarinichev@chromium.org", "amarinichev@g
oogle.com"], "amarinichev"), | |
130 Contributor("Andras Piroska", "pandras@inf.u-szeged.hu", "andris88"), | |
131 Contributor("Anne van Kesteren", "annevk@annevk.nl", "annevk"), | |
132 Contributor("Annie Sullivan", "sullivan@chromium.org", "annie"), | |
133 Contributor("Anton Vayvod", "avayvod@chromium.org", "avayvod"), | |
134 Contributor("Aryeh Gregor", "ayg@aryeh.name", "AryehGregor"), | |
135 Contributor("Balazs Ankes", "bank@inf.u-szeged.hu", "abalazs"), | |
136 Contributor("Bem Jones-Bey", "bjonesbe@adobe.com", "bemjb"), | |
137 Contributor("Brian Salomon", "bsalomon@google.com"), | |
138 Contributor("Christian Biesinger", "cbiesinger@chromium.org", "cbiesinger"), | |
139 Contributor("Commit Queue", "commit-queue@webkit.org"), | |
140 Contributor("Daniel Sievers", "sievers@chromium.org"), | |
141 Contributor("David Dorwin", "ddorwin@chromium.org", "ddorwin"), | |
142 Contributor("David Reveman", "reveman@chromium.org", "reveman"), | |
143 Contributor("Dongsung Huang", "luxtella@company100.net", "Huang"), | |
144 Contributor("Douglas Davidson", "ddavidso@apple.com"), | |
145 Contributor("Douglas Stockwell", "dstockwell@chromium.org", "dstockwell"), | |
146 Contributor("Edward O'Connor", "eoconnor@apple.com", "hober"), | |
147 Contributor("Eric Penner", "epenner@chromium.org", "epenner"), | |
148 Contributor("Felician Marton", ["felician@inf.u-szeged.hu", "marton.felician
.zoltan@stud.u-szeged.hu"], "Felician"), | |
149 Contributor("Finnur Thorarinsson", ["finnur@chromium.org", "finnur.webkit@gm
ail.com"], "finnur"), | |
150 Contributor("Forms Bugs", "forms-bugs@chromium.org"), | |
151 Contributor("Gabor Ballabas", "gaborb@inf.u-szeged.hu", "bgabor"), | |
152 Contributor("Grace Kloba", "klobag@chromium.org", "klobag"), | |
153 Contributor("Greg Simon", "gregsimon@chromium.org", "gregsimon"), | |
154 Contributor("Hao Zheng", "zhenghao@chromium.org"), | |
155 Contributor("Harald Alvestrand", "hta@google.com", "hta"), | |
156 Contributor("Ian Hickson", "ian@hixie.ch", "hixie"), | |
157 Contributor("Jae Hyun Park", "jae.park@company100.net", "jaepark"), | |
158 Contributor("Jonathan Backer", "backer@chromium.org", "backer"), | |
159 Contributor("Jeff Timanus", ["twiz@chromium.org", "twiz@google.com"], "twiz"
), | |
160 Contributor("Jing Zhao", "jingzhao@chromium.org"), | |
161 Contributor("John Bates", ["jbates@google.com", "jbates@chromium.org"], "jba
tes"), | |
162 Contributor("John Bauman", ["jbauman@chromium.org", "jbauman@google.com"], "
jbauman"), | |
163 Contributor("John Mellor", "johnme@chromium.org", "johnme"), | |
164 Contributor("Kulanthaivel Palanichamy", "kulanthaivel@codeaurora.org", "kvel
"), | |
165 Contributor("Koji Hara", "kojih@chromium.org", "kojih"), | |
166 Contributor("Koji Ishii", "kojiishi@gmail.com"), | |
167 Contributor("Michael Pruett", "michael@68k.org", "mpruett"), | |
168 Contributor("Mihai Balan", "mibalan@adobe.com", "miChou"), | |
169 Contributor("Mihai Maerean", "mmaerean@adobe.com", "mmaerean"), | |
170 Contributor("Min Qin", "qinmin@chromium.org"), | |
171 Contributor("Nandor Huszka", "hnandor@inf.u-szeged.hu", "hnandor"), | |
172 Contributor("Nils Barth", "nbarth@chromium.org", "nbarth"), | |
173 Contributor("Oliver Varga", ["voliver@inf.u-szeged.hu", "Varga.Oliver@stud.u
-szeged.hu"], "TwistO"), | |
174 Contributor("Peter Gal", "galpeter@inf.u-szeged.hu", "elecro"), | |
175 Contributor("Peter Linss", "peter.linss@hp.com", "plinss"), | |
176 Contributor("Radar WebKit Bug Importer", "webkit-bug-importer@group.apple.co
m"), | |
177 Contributor("Raul Hudea", "rhudea@adobe.com", "rhudea"), | |
178 Contributor("Roland Takacs", "rtakacs@inf.u-szeged.hu", "rtakacs"), | |
179 Contributor("Tab Atkins", ["tabatkins@google.com", "jackalmage@gmail.com"],
"tabatkins"), | |
180 Contributor("Tamas Czene", ["tczene@inf.u-szeged.hu", "Czene.Tamas@stud.u-sz
eged.hu"], "tczene"), | |
181 Contributor("Tien-Ren Chen", "trchen@chromium.org", "trchen"), | |
182 Contributor("Tim 'mithro' Ansell", "mithro@mithis.com", "mithro"), | |
183 Contributor("Tim Volodine", "timvolodine@chromium.org", "timvolodine"), | |
184 Contributor("WebKit Review Bot", "webkit.review.bot@gmail.com", "sheriff-bot
"), | |
185 Contributor("Web Components Team", "webcomponents-bugzilla@chromium.org"), | |
186 Contributor("Wyatt Carss", ["wcarss@chromium.org", "wcarss@google.com"], "wc
arss"), | |
187 Contributor("Zeev Lieber", "zlieber@chromium.org"), | |
188 Contributor("Zsolt Feher", "feherzs@inf.u-szeged.hu", "Smith"), | |
189 ] | |
190 | |
191 | |
192 # This is intended as a canonical, machine-readable list of all non-reviewer | |
193 # committers for WebKit. If your name is missing here and you are a committer, | |
194 # please add it. No review needed. All reviewers are committers, so this list | |
195 # is only of committers who are not reviewers. | |
196 | |
197 | |
198 committers_unable_to_review = [ | |
199 Committer("Aaron Boodman", "aa@chromium.org", "aboodman"), | |
200 Committer("Aaron Colwell", "acolwell@chromium.org", "acolwell"), | |
201 Committer("Adam Bergkvist", "adam.bergkvist@ericsson.com", "adambe"), | |
202 Committer("Adam Kallai", "kadam@inf.u-szeged.hu", "kadam"), | |
203 Committer("Adam Klein", "adamk@chromium.org", "aklein"), | |
204 Committer("Adam Langley", "agl@chromium.org", "agl"), | |
205 Committer("Ademar de Souza Reis Jr", ["ademar.reis@gmail.com", "ademar@webki
t.org"], "ademar"), | |
206 Committer("Albert J. Wong", "ajwong@chromium.org"), | |
207 Committer("Alec Flett", ["alecflett@chromium.org", "alecflett@google.com"],
"alecf"), | |
208 Committer(u"Alexander F\u00e6r\u00f8y", ["ahf@0x90.dk", "alexander.faeroy@no
kia.com"], "ahf"), | |
209 Committer("Alexander Kellett", ["lypanov@mac.com", "a-lists001@lypanov.net",
"lypanov@kde.org"], "lypanov"), | |
210 Committer("Alexandre Elias", ["aelias@chromium.org", "aelias@google.com"], "
aelias"), | |
211 Committer("Alexandru Chiculita", "achicu@adobe.com", "achicu"), | |
212 Committer("Alice Boxhall", "aboxhall@chromium.org", "aboxhall"), | |
213 Committer("Alok Priyadarshi", "alokp@chromium.org", "alokp"), | |
214 Committer("Ami Fischman", ["fischman@chromium.org", "fischman@google.com"],
"fischman"), | |
215 Committer("Amruth Raj", "amruthraj@motorola.com", "amruthraj"), | |
216 Committer("Andre Boule", "aboule@apple.com"), | |
217 Committer("Andrei Bucur", "abucur@adobe.com", "abucur"), | |
218 Committer("Andrei Popescu", "andreip@google.com", "andreip"), | |
219 Committer("Andrew Wellington", ["andrew@webkit.org", "proton@wiretapped.net"
], "proton"), | |
220 Committer("Andrew Scherkus", "scherkus@chromium.org", "scherkus"), | |
221 Committer("Andrey Adaykin", "aandrey@chromium.org", "aandrey"), | |
222 Committer("Andrey Kosyakov", "caseq@chromium.org", "caseq"), | |
223 Committer("Andras Becsi", ["abecsi@webkit.org", "andras.becsi@digia.com"], "
bbandix"), | |
224 Committer("Andy Wingo", "wingo@igalia.com", "wingo"), | |
225 Committer("Anna Cavender", "annacc@chromium.org", "annacc"), | |
226 Committer("Anthony Ricaud", "rik@webkit.org", "rik"), | |
227 Committer("Antoine Labour", "piman@chromium.org", "piman"), | |
228 Committer("Antoine Quint", "graouts@apple.com", "graouts"), | |
229 Committer("Anton D'Auria", "adauria@apple.com", "antonlefou"), | |
230 Committer("Anton Muhin", "antonm@chromium.org", "antonm"), | |
231 Committer("Arko Saha", "arko@motorola.com", "arkos"), | |
232 Committer("Arvid Nilsson", ["anilsson@blackberry.com", "anilsson@rim.com"],
"anilsson"), | |
233 Committer("Balazs Kelemen", "kbalazs@webkit.org", "kbalazs"), | |
234 Committer("Bear Travis", "betravis@adobe.com", "betravis"), | |
235 Committer("Ben Murdoch", "benm@google.com", "benm"), | |
236 Committer("Ben Wells", "benwells@chromium.org", "benwells"), | |
237 Committer("Benjamin C Meyer", ["ben@meyerhome.net", "ben@webkit.org"], "icef
ox"), | |
238 Committer("Benjamin Kalman", ["kalman@chromium.org", "kalman@google.com"], "
kalman"), | |
239 Committer("Benjamin Otte", ["otte@gnome.org", "otte@webkit.org"], "otte"), | |
240 Committer("Bill Budge", ["bbudge@chromium.org", "bbudge@gmail.com"], "bbudge
"), | |
241 Committer("Brett Wilson", "brettw@chromium.org", "brettx"), | |
242 Committer("Bruno de Oliveira Abinader", ["bruno.abinader@basyskom.com", "bru
noabinader@gmail.com"], "abinader"), | |
243 Committer("Byungwoo Lee", ["bw80.lee@samsung.com", "bw80.lee@gmail.com"], "b
yungwoo"), | |
244 Committer("Cameron McCormack", ["cam@mcc.id.au", "cam@webkit.org"], "heycam"
), | |
245 Committer("Carol Szabo", ["carol@webkit.org", "carol.szabo@nokia.com"], "csz
abo1"), | |
246 Committer("Cary Clark", ["caryclark@google.com", "caryclark@chromium.org"],
"caryclark"), | |
247 Committer("Charles Reis", "creis@chromium.org", "creis"), | |
248 Committer("Charles Wei", ["charles.wei@torchmobile.com.cn"], "cswei"), | |
249 Committer("Chris Evans", ["cevans@google.com", "cevans@chromium.org"]), | |
250 Committer("Chris Guillory", ["ctguil@chromium.org", "chris.guillory@google.c
om"], "ctguil"), | |
251 Committer("Chris Petersen", "cpetersen@apple.com", "cpetersen"), | |
252 Committer("Christian Dywan", ["christian@twotoasts.de", "christian@webkit.or
g", "christian@lanedo.com"]), | |
253 Committer("Christophe Dumez", ["dchris@gmail.com", "ch.dumez@sisa.samsung.co
m"], "cdumez"), | |
254 Committer("Claudio Saavedra", "csaavedra@igalia.com", "claudio___"), | |
255 Committer("Collin Jackson", "collinj@webkit.org", "collinjackson"), | |
256 Committer("Cris Neckar", "cdn@chromium.org", "cneckar"), | |
257 Committer("Dan Winship", "danw@gnome.org", "danw"), | |
258 Committer("Dana Jansens", "danakj@chromium.org", "danakj"), | |
259 Committer("Daniel Cheng", "dcheng@chromium.org", "dcheng"), | |
260 Committer("Dave Barton", "dbarton@mathscribe.com", "davebarton"), | |
261 Committer("Dave Tharp", "dtharp@codeaurora.org", "dtharp"), | |
262 Committer("David Michael Barr", ["davidbarr@chromium.org", "davidbarr@google
.com", "b@rr-dav.id.au"], "barrbrain"), | |
263 Committer("David Grogan", ["dgrogan@chromium.org", "dgrogan@google.com"], "d
grogan"), | |
264 Committer("David Smith", ["catfish.man@gmail.com", "dsmith@webkit.org"], "ca
tfishman"), | |
265 Committer("Diego Gonzalez", ["diegohcg@webkit.org", "diego.gonzalez@openboss
a.org"], "diegohcg"), | |
266 Committer("Dinu Jacob", "dinu.s.jacob@intel.com", "dsjacob"), | |
267 Committer("Dmitry Gorbik", "dgorbik@apple.com", "dgorbik"), | |
268 Committer("Dmitry Lomov", ["dslomov@google.com", "dslomov@chromium.org"], "d
slomov"), | |
269 Committer("Dominic Cooney", ["dominicc@chromium.org", "dominicc@google.com"]
, "dominicc"), | |
270 Committer("Dominic Mazzoni", ["dmazzoni@google.com", "dmazzoni@chromium.org"
], "dmazzoni"), | |
271 Committer(u"Dominik R\u00f6ttsches", ["dominik.rottsches@intel.com", "d-r@ro
ettsches.de"], "drott"), | |
272 Committer("Dongwoo Joshua Im", ["dw.im@samsung.com", "dwim79@gmail.com"], "d
wim"), | |
273 Committer("Drew Wilson", "atwilson@chromium.org", "atwilson"), | |
274 Committer("Eli Fidler", ["efidler@blackberry.com", "efidler@rim.com"], "efid
ler"), | |
275 Committer("Elliot Poger", "epoger@chromium.org", "epoger"), | |
276 Committer("Erik Arvidsson", "arv@chromium.org", "arv"), | |
277 Committer("Eric Roman", "eroman@chromium.org", "eroman"), | |
278 Committer("Eric Uhrhane", "ericu@chromium.org", "ericu"), | |
279 Committer("Eugene Klyuchnikov", "eustas@chromium.org", "eustas"), | |
280 Committer("Evan Martin", "evan@chromium.org", "evmar"), | |
281 Committer("Evan Stade", "estade@chromium.org", "estade"), | |
282 Committer("Fady Samuel", "fsamuel@chromium.org", "fsamuel"), | |
283 Committer("Feng Qian", "feng@chromium.org"), | |
284 Committer("Florin Malita", ["fmalita@chromium.org", "fmalita@google.com"], "
fmalita"), | |
285 Committer("Fumitoshi Ukai", "ukai@chromium.org", "ukai"), | |
286 Committer("Gabor Loki", "loki@webkit.org", "loki04"), | |
287 Committer("Gabor Rapcsanyi", ["rgabor@webkit.org", "rgabor@inf.u-szeged.hu"]
, "rgabor"), | |
288 Committer("Gavin Peters", ["gavinp@chromium.org", "gavinp@webkit.org", "gavi
np@google.com"], "gavinp"), | |
289 Committer("Girish Ramakrishnan", ["girish@forwardbias.in", "ramakrishnan.gir
ish@gmail.com"], "girishr"), | |
290 Committer("Glenn Adams", "glenn@skynav.com", "gasubic"), | |
291 Committer("Graham Dennis", ["Graham.Dennis@gmail.com", "gdennis@webkit.org"]
), | |
292 Committer("Greg Bolsinga", "bolsinga@apple.com"), | |
293 Committer("Gregg Tavares", ["gman@chromium.org", "gman@google.com"], "gman")
, | |
294 Committer("Grzegorz Czajkowski", "g.czajkowski@samsung.com", "grzegorz"), | |
295 Committer("Hans Muller", "giles_joplin@yahoo.com", "hansmuller"), | |
296 Committer("Hans Wennborg", "hans@chromium.org", "hwennborg"), | |
297 Committer("Hayato Ito", "hayato@chromium.org", "hayato"), | |
298 Committer("Hironori Bono", "hbono@chromium.org", "hbono"), | |
299 Committer("Helder Correia", "helder.correia@nokia.com", "helder"), | |
300 Committer("Hin-Chung Lam", ["hclam@google.com", "hclam@chromium.org"]), | |
301 Committer("Hugo Parente Lima", "hugo.lima@openbossa.org", "hugopl"), | |
302 Committer("Ian Vollick", "vollick@chromium.org", "vollick"), | |
303 Committer("Igor Trindade Oliveira", ["igor.oliveira@webkit.org", "igor.o@sis
a.samsung.com"], "igoroliveira"), | |
304 Committer("Ilya Sherman", "isherman@chromium.org", "isherman"), | |
305 Committer("Ilya Tikhonovsky", "loislo@chromium.org", "loislo"), | |
306 Committer("Ivan Krsti\u0107", "ike@apple.com"), | |
307 Committer("Jacky Jiang", ["jkjiang@webkit.org", "zkjiang008@gmail.com", "zha
jiang@blackberry.com", "zhajiang@rim.com"], "jkjiang"), | |
308 Committer("Jakob Petsovits", ["jpetsovits@blackberry.com", "jpetsovits@rim.c
om", "jpetso@gmx.at"], "jpetso"), | |
309 Committer("Jakub Wieczorek", "jwieczorek@webkit.org", "fawek"), | |
310 Committer("James Hawkins", ["jhawkins@chromium.org", "jhawkins@google.com"],
"jhawkins"), | |
311 Committer("James Kozianski", ["koz@chromium.org", "koz@google.com"], "koz"), | |
312 Committer("James Simonsen", "simonjam@chromium.org", "simonjam"), | |
313 Committer("Janos Badics", "jbadics@inf.u-szeged.hu", "dicska"), | |
314 Committer("Jarred Nicholls", ["jarred@webkit.org", "jarred@sencha.com"], "ja
rrednicholls"), | |
315 Committer("Jason Liu", ["jason.liu@torchmobile.com.cn", "jasonliuwebkit@gmai
l.com"], "jasonliu"), | |
316 Committer("Jay Civelli", "jcivelli@chromium.org", "jcivelli"), | |
317 Committer("Jeff Miller", "jeffm@apple.com", "jeffm7"), | |
318 Committer("Jeffrey Pfau", ["jeffrey@endrift.com", "jpfau@apple.com"], "jpfau
"), | |
319 Committer("Jenn Braithwaite", "jennb@chromium.org", "jennb"), | |
320 Committer("Jens Alfke", ["snej@chromium.org", "jens@apple.com"]), | |
321 Committer("Jeremy Moskovich", ["playmobil@google.com", "jeremy@chromium.org"
], "jeremymos"), | |
322 Committer("Jesus Sanchez-Palencia", ["jesus@webkit.org", "jesus.palencia@ope
nbossa.org"], "jeez_"), | |
323 Committer("Jia Pu", "jpu@apple.com"), | |
324 Committer("Joanmarie Diggs", "jdiggs@igalia.com", "joanie"), | |
325 Committer("Joe Thomas", "joethomas@motorola.com", "joethomas"), | |
326 Committer("John Abd-El-Malek", "jam@chromium.org", "jam"), | |
327 Committer("John Gregg", ["johnnyg@google.com", "johnnyg@chromium.org"], "joh
nnyg"), | |
328 Committer("John Knottenbelt", "jknotten@chromium.org", "jknotten"), | |
329 Committer("Johnny Ding", ["jnd@chromium.org", "johnnyding.webkit@gmail.com"]
, "johnnyding"), | |
330 Committer("Jon Lee", "jonlee@apple.com", "jonlee"), | |
331 Committer("Jonathan Dong", ["jonathan.dong.webkit@gmail.com"], "jondong"), | |
332 Committer("Joone Hur", ["joone@webkit.org", "joone.hur@intel.com"], "joone")
, | |
333 Committer("Joost de Valk", ["joost@webkit.org", "webkit-dev@joostdevalk.nl"]
, "Altha"), | |
334 Committer("Joshua Bell", ["jsbell@chromium.org", "jsbell@google.com"], "jsbe
ll"), | |
335 Committer("Julie Parent", ["jparent@google.com", "jparent@chromium.org"], "j
parent"), | |
336 Committer("Jungshik Shin", "jshin@chromium.org"), | |
337 Committer("Justin Novosad", ["junov@google.com", "junov@chromium.org"], "jun
ov"), | |
338 Committer("Justin Schuh", "jschuh@chromium.org", "jschuh"), | |
339 Committer("Kangil Han", ["kangil.han@samsung.com", "kangil.han@gmail.com"],
"kangil"), | |
340 Committer("Karen Grunberg", "kareng@chromium.org", "kareng"), | |
341 Committer("Kaustubh Atrawalkar", ["kaustubh@motorola.com"], "silverroots"), | |
342 Committer("Keishi Hattori", "keishi@webkit.org", "keishi"), | |
343 Committer("Kelly Norton", "knorton@alum.mit.edu"), | |
344 Committer("Ken Buchanan", "kenrb@chromium.org", "kenrb"), | |
345 Committer("Kenichi Ishibashi", "bashi@chromium.org", "bashi"), | |
346 Committer("Kenji Imasaki", "imasaki@chromium.org", "imasaki"), | |
347 Committer("Kent Hansen", "kent.hansen@nokia.com", "khansen"), | |
348 Committer("Kihong Kwon", "kihong.kwon@samsung.com", "kihong"), | |
349 Committer(u"Kim Gr\u00f6nholm", "kim.1.gronholm@nokia.com"), | |
350 Committer("Kimmo Kinnunen", ["kimmo.t.kinnunen@nokia.com", "kimmok@iki.fi",
"ktkinnun@webkit.org"], "kimmok"), | |
351 Committer("Kinuko Yasuda", "kinuko@chromium.org", "kinuko"), | |
352 Committer("Kiran Muppala", "cmuppala@apple.com", "kiranm"), | |
353 Committer("Konrad Piascik", ["kpiascik@blackberry.com", "kpiascik@rim.com"],
"kpiascik"), | |
354 Committer("Kristof Kosztyo", "kkristof@inf.u-szeged.hu", "kkristof"), | |
355 Committer("Krzysztof Kowalczyk", "kkowalczyk@gmail.com"), | |
356 Committer("Kwang Yul Seo", ["skyul@company100.net", "kseo@webkit.org"], "kse
o"), | |
357 Committer("Lauro Neto", "lauro.neto@openbossa.org", "lmoura"), | |
358 Committer("Leandro Gracia Gil", "leandrogracia@chromium.org", "leandrogracia
"), | |
359 Committer("Leandro Pereira", ["leandro@profusion.mobi", "leandro@webkit.org"
], "acidx"), | |
360 Committer("Leo Yang", ["leoyang@blackberry.com", "leoyang@rim.com", "leoyang
@webkit.org", "leoyang.webkit@gmail.com"], "leoyang"), | |
361 Committer("Li Yin", ["li.yin@intel.com"], "liyin"), | |
362 Committer("Lucas De Marchi", ["demarchi@webkit.org", "lucas.demarchi@profusi
on.mobi"], "demarchi"), | |
363 Committer("Lucas Forschler", ["lforschler@apple.com"], "lforschler"), | |
364 Committer("Luciano Wolf", "luciano.wolf@openbossa.org", "luck"), | |
365 Committer("Luke Macpherson", ["macpherson@chromium.org", "macpherson@google.
com"], "macpherson"), | |
366 Committer("Mads Ager", "ager@chromium.org"), | |
367 Committer("Mahesh Kulkarni", ["mahesh.kulkarni@nokia.com", "maheshk@webkit.o
rg"], "maheshk"), | |
368 Committer("Marcus Voltis Bulach", "bulach@chromium.org"), | |
369 Committer("Mario Sanchez Prada", ["mario@webkit.org", "mario.prada@samsung.c
om"], "msanchez"), | |
370 Committer("Mark Lam", "mark.lam@apple.com", "mlam"), | |
371 Committer("Mark Pilgrim", "pilgrim@chromium.org", "pilgrim_google"), | |
372 Committer("Mary Wu", ["mary.wu@torchmobile.com.cn", "wwendy2007@gmail.com"],
"marywu"), | |
373 Committer("Matt Delaney", "mdelaney@apple.com"), | |
374 Committer("Matt Falkenhagen", "falken@chromium.org", "falken"), | |
375 Committer("Matt Lilek", ["mlilek@apple.com", "webkit@mattlilek.com", "pewter
moose@webkit.org"], "pewtermoose"), | |
376 Committer("Matt Perry", "mpcomplete@chromium.org"), | |
377 Committer("Max Vujovic", ["mvujovic@adobe.com", "maxvujovic@gmail.com"], "mv
ujovic"), | |
378 Committer("Maxime Britto", ["maxime.britto@gmail.com", "britto@apple.com"]), | |
379 Committer("Maxime Simon", ["simon.maxime@gmail.com", "maxime.simon@webkit.or
g"], "maxime.simon"), | |
380 Committer(u"Michael Br\u00fcning", ["michael.bruning@digia.com", "michaelbru
ening@gmail.com"], "mibrunin"), | |
381 Committer("Michael Nordman", "michaeln@google.com", "michaeln"), | |
382 Committer("Michelangelo De Simone", "michelangelo@webkit.org", "michelangelo
"), | |
383 Committer("Mihnea Ovidenie", "mihnea@adobe.com", "mihnea"), | |
384 Committer("Mike Belshe", ["mbelshe@chromium.org", "mike@belshe.com"]), | |
385 Committer("Mike Fenton", ["mifenton@blackberry.com", "mifenton@rim.com", "mi
ke.fenton@torchmobile.com"], "mfenton"), | |
386 Committer("Mike Lawther", "mikelawther@chromium.org", "mikelawther"), | |
387 Committer("Mike Reed", "reed@google.com", "reed"), | |
388 Committer("Mike Thole", ["mthole@mikethole.com", "mthole@apple.com"]), | |
389 Committer("Mike West", ["mkwst@chromium.org", "mike@mikewest.org"], "mkwst")
, | |
390 Committer("Mikhail Naganov", "mnaganov@chromium.org"), | |
391 Committer("Mikhail Pozdnyakov", "mikhail.pozdnyakov@intel.com", "MPozdnyakov
"), | |
392 Committer("Naoki Takano", ["honten@chromium.org", "takano.naoki@gmail.com"],
"honten"), | |
393 Committer("Nat Duca", ["nduca@chromium.org", "nduca@google.com"], "nduca"), | |
394 Committer("Nayan Kumar K", ["nayankk@motorola.com", "nayankk@gmail.com"], "x
c0ffee"), | |
395 Committer("Nima Ghanavatian", ["nghanavatian@blackberry.com", "nghanavatian@
rim.com", "nima.ghanavatian@gmail.com"], "nghanavatian"), | |
396 Committer("Noel Gordon", ["noel.gordon@gmail.com", "noel@chromium.org", "noe
l@google.com"], "noel"), | |
397 Committer("Pablo Flouret", ["pablof@motorola.com", "pf@parb.es"], "pablof"), | |
398 Committer("Pam Greene", "pam@chromium.org", "pamg"), | |
399 Committer("Patrick Gansterer", ["paroga@paroga.com", "paroga@webkit.org"], "
paroga"), | |
400 Committer("Pavel Podivilov", "podivilov@chromium.org", "podivilov"), | |
401 Committer("Peter Beverloo", ["peter@chromium.org", "peter@webkit.org", "beve
rloo@google.com"], "beverloo"), | |
402 Committer("Peter Kasting", ["pkasting@google.com", "pkasting@chromium.org"],
"pkasting"), | |
403 Committer("Peter Varga", ["pvarga@webkit.org", "pvarga@inf.u-szeged.hu"], "s
tampho"), | |
404 Committer("Pierre d'Herbemont", ["pdherbemont@free.fr", "pdherbemont@apple.c
om"], "pdherbemont"), | |
405 Committer("Pierre-Olivier Latour", "pol@apple.com", "pol"), | |
406 Committer("Pierre Rossi", "pierre.rossi@gmail.com", "elproxy"), | |
407 Committer("Pratik Solanki", "psolanki@apple.com", "psolanki"), | |
408 Committer("Pravin D", ["pravind@webkit.org", "pravin.d@samsung.com"], "pravi
nd"), | |
409 Committer("Qi Zhang", "qi.zhang02180@gmail.com", "qi"), | |
410 Committer("Rafael Antognolli", "antognolli@profusion.mobi", "antognolli"), | |
411 Committer("Rafael Brandao", "rafael.lobo@openbossa.org", "rafaelbrandao"), | |
412 Committer("Rafael Weinstein", "rafaelw@chromium.org", "rafaelw"), | |
413 Committer("Raphael Kubo da Costa", ["rakuco@webkit.org", "rakuco@FreeBSD.org
", "raphael.kubo.da.costa@intel.com"], "rakuco"), | |
414 Committer("Ravi Kasibhatla", "ravi.kasibhatla@motorola.com", "kphanee"), | |
415 Committer("Raymond Toy", ["rtoy@google.com", "rtoy@chromium.org"], "rtoy"), | |
416 Committer("Renata Hodovan", "reni@webkit.org", "reni"), | |
417 Committer("Robert Hogan", ["robert@webkit.org", "robert@roberthogan.net", "l
ists@roberthogan.net"], "rhogan"), | |
418 Committer("Robert Kroeger", "rjkroege@chromium.org", "rjkroege"), | |
419 Committer("Roger Fong", "roger_fong@apple.com", "rfong"), | |
420 Committer("Roland Steiner", "rolandsteiner@chromium.org"), | |
421 Committer("Ryuan Choi", ["ryuan.choi@samsung.com", "ryuan.choi@gmail.com"],"
ryuan"), | |
422 Committer("Sadrul Habib Chowdhury", "sadrul@chromium.org", ["sadrul", "sadru
lhc"]), | |
423 Committer(u"Sami Ky\u00f6stil\u00e4", "skyostil@chromium.org", "skyostil"), | |
424 Committer("Satish Sampath", "satish@chromium.org"), | |
425 Committer("Scott Violet", "sky@chromium.org", "sky"), | |
426 Committer("Sergio Villar Senin", ["svillar@igalia.com", "sergio@webkit.org"]
, "svillar"), | |
427 Committer("Shawn Singh", "shawnsingh@chromium.org", "shawnsingh"), | |
428 Committer("Shinya Kawanaka", "shinyak@chromium.org", "shinyak"), | |
429 Committer("Siddharth Mathur", "siddharth.mathur@nokia.com", "simathur"), | |
430 Committer("Silvia Pfeiffer", "silviapf@chromium.org", "silvia"), | |
431 Committer("Simon Pena", "spena@igalia.com", "spenap"), | |
432 Committer("Steve Lacey", "sjl@chromium.org", "stevela"), | |
433 Committer("Sudarsana Nagineni", ["naginenis@gmail.com", "sudarsana.nagineni@
linux.intel.com", "sudarsana.nagineni@intel.com"], "babu"), | |
434 Committer("Szilard Ledan-Muntean", "szledan@inf.u-szeged.hu", "szledan"), | |
435 Committer("Taiju Tsuiki", "tzik@chromium.org", "tzik"), | |
436 Committer("Takashi Sakamoto", "tasak@google.com", "tasak"), | |
437 Committer("Takashi Toyoshima", ["toyoshim@chromium.org", "toyoshim+watchlist
@chromium.org"], "toyoshim"), | |
438 Committer("Terry Anderson", "tdanderson@chromium.org", "tdanderson"), | |
439 Committer("Thiago Marcos P. Santos", ["tmpsantos@gmail.com", "thiago.santos@
intel.com"], "tmpsantos"), | |
440 Committer("Thomas Sepez", "tsepez@chromium.org", "tsepez"), | |
441 Committer("Tom Hudson", ["tomhudson@google.com", "tomhudson@chromium.org"],
"tomhudson"), | |
442 Committer("Tom Zakrajsek", "tomz@codeaurora.org", "tomz"), | |
443 Committer("Tommy Widenflycht", "tommyw@google.com", "tommyw"), | |
444 Committer("Trey Matteson", "trey@usa.net", "trey"), | |
445 Committer("Tristan O'Tierney", ["tristan@otierney.net", "tristan@apple.com"]
), | |
446 Committer("Vangelis Kokkevis", "vangelis@chromium.org", "vangelis"), | |
447 Committer("Viatcheslav Ostapenko", ["ostap73@gmail.com", "v.ostapenko@samsun
g.com", "v.ostapenko@sisa.samsung.com"], "ostap"), | |
448 Committer("Victor Carbune", ["vcarbune@chromium.org", "victor@rosedu.org"],
"vcarbune"), | |
449 Committer("Victor Wang", "victorw@chromium.org", "victorw"), | |
450 Committer("Victoria Kirst", ["vrk@chromium.org", "vrk@google.com"], "vrk"), | |
451 Committer("Vincent Scheib", "scheib@chromium.org", "scheib"), | |
452 Committer("Vineet Chaudhary", "rgf748@motorola.com", "vineetc"), | |
453 Committer("Vitaly Repeshko", "vitalyr@chromium.org"), | |
454 Committer("Vivek Galatage", ["vivekg@webkit.org", "vivek.vg@samsung.com"], "
vivekg"), | |
455 Committer("William Siegrist", "wsiegrist@apple.com", "wms"), | |
456 Committer("W. James MacLean", "wjmaclean@chromium.org", "seumas"), | |
457 Committer("Xianzhu Wang", ["wangxianzhu@chromium.org", "phnixwxz@gmail.com",
"wangxianzhu@google.com"], "wangxianzhu"), | |
458 Committer("Xiaohai Wei", ["james.wei@intel.com", "wistoch@chromium.org"], "w
istoch"), | |
459 Committer("Xiaomei Ji", "xji@chromium.org", "xji"), | |
460 Committer("Xingnan Wang", "xingnan.wang@intel.com", "xingnan"), | |
461 Committer("Yael Aharon", "yael@webkit.org", "yael"), | |
462 Committer("Yaar Schnitman", ["yaar@chromium.org", "yaar@google.com"]), | |
463 Committer("Yi Shen", ["max.hong.shen@gmail.com", "yi.shen@sisa.samsung.com",
"yi.4.shen@nokia.com"]), | |
464 Committer("Yongjun Zhang", ["yongjun_zhang@apple.com", "yongjun.zhang@nokia.
com"]), | |
465 Committer("Yoshifumi Inoue", "yosin@chromium.org", "yosin"), | |
466 Committer("Yuqiang Xian", "yuqiang.xian@intel.com"), | |
467 Committer("Yuzo Fujishima", "yuzo@google.com", "yuzo"), | |
468 Committer("Zalan Bujtas", ["zalan@apple.com", "zbujtas@gmail.com", "zalan.bu
jtas@nokia.com"], "zalan"), | |
469 Committer("Zeno Albisser", ["zeno@webkit.org", "zeno.albisser@nokia.com"], "
zalbisser"), | |
470 Committer("Zhenyao Mo", "zmo@google.com", "zhenyao"), | |
471 Committer("Zoltan Arvai", "zarvai@inf.u-szeged.hu", "azbest_hu"), | |
472 Committer("Zoltan Horvath", ["zoltan@webkit.org", "hzoltan@inf.u-szeged.hu",
"horvath.zoltan.6@stud.u-szeged.hu"], "zoltan"), | |
473 Committer(u"\u017dan Dober\u0161ek", "zandobersek@gmail.com", "zdobersek"), | |
474 ] | |
475 | |
476 | |
477 # This is intended as a canonical, machine-readable list of all reviewers for | |
478 # WebKit. If your name is missing here and you are a reviewer, please add it. | |
479 # No review needed. | |
480 | |
481 | |
482 reviewers_list = [ | |
483 Reviewer("Abhishek Arya", "inferno@chromium.org", "inferno-sec"), | |
484 Reviewer("Ada Chan", "adachan@apple.com", "chanada"), | |
485 Reviewer("Adam Barth", "abarth@webkit.org", "abarth"), | |
486 Reviewer("Adam Roben", ["aroben@webkit.org", "aroben@apple.com"], "aroben"), | |
487 Reviewer("Adam Treat", ["treat@kde.org", "treat@webkit.org"], "manyoso"), | |
488 Reviewer("Adele Peterson", "adele@apple.com", "adele"), | |
489 Reviewer("Adrienne Walker", ["enne@google.com", "enne@chromium.org"], "enne"
), | |
490 Reviewer("Alejandro G. Castro", ["alex@igalia.com", "alex@webkit.org"], "ale
xg__"), | |
491 Reviewer("Alexander Pavlov", ["apavlov@chromium.org", "pavlov81@gmail.com"],
"apavlov"), | |
492 Reviewer("Alexey Proskuryakov", ["ap@webkit.org", "ap@apple.com"], "ap"), | |
493 Reviewer("Alexis Menard", ["alexis@webkit.org", "menard@kde.org"], "darktear
s"), | |
494 Reviewer("Alice Liu", "alice.liu@apple.com", "aliu"), | |
495 Reviewer("Allan Sandfeld Jensen", ["allan.jensen@digia.com", "kde@carewolf.c
om", "sandfeld@kde.org", "allan.jensen@nokia.com"], "carewolf"), | |
496 Reviewer("Alp Toker", ["alp@nuanti.com", "alp@atoker.com", "alp@webkit.org"]
, "alp"), | |
497 Reviewer("Anders Carlsson", ["andersca@apple.com", "acarlsson@apple.com"], "
andersca"), | |
498 Reviewer("Andreas Kling", ["akling@apple.com", "kling@webkit.org", "awesomek
ling@apple.com", "andreas.kling@nokia.com"], "kling"), | |
499 Reviewer("Andy Estes", "aestes@apple.com", "estes"), | |
500 Reviewer("Antonio Gomes", ["tonikitoo@webkit.org", "a1.gomes@sisa.samsung.co
m", "antonio.netto@samsung.com", "antonio.gomes@openbossa.org"], "tonikitoo"), | |
501 Reviewer("Antti Koivisto", ["koivisto@iki.fi", "antti@apple.com", "antti.j.k
oivisto@nokia.com"], "anttik"), | |
502 Reviewer("Ariya Hidayat", ["ariya.hidayat@gmail.com", "ariya@sencha.com", "a
riya@webkit.org"], "ariya"), | |
503 Reviewer("Benjamin Poulain", ["benjamin@webkit.org", "benjamin.poulain@nokia
.com", "ikipou@gmail.com"], "benjaminp"), | |
504 Reviewer("Beth Dakin", "bdakin@apple.com", "dethbakin"), | |
505 Reviewer("Brady Eidson", "beidson@apple.com", "bradee-oh"), | |
506 Reviewer("Brent Fulgham", "bfulgham@webkit.org", "bfulgham"), | |
507 Reviewer("Brian Weinstein", "bweinstein@apple.com", "bweinstein"), | |
508 Reviewer("Caio Marcelo de Oliveira Filho", ["cmarcelo@webkit.org", "cmarcelo
@gmail.com", "caio.oliveira@openbossa.org"], "cmarcelo"), | |
509 Reviewer("Cameron Zwarich", ["zwarich@apple.com", "cwzwarich@apple.com", "cw
zwarich@webkit.org"]), | |
510 Reviewer("Carlos Garcia Campos", ["cgarcia@igalia.com", "carlosgc@gnome.org"
, "carlosgc@webkit.org"], "KaL"), | |
511 Reviewer("Chang Shu", ["cshu@webkit.org", "c.shu@sisa.samsung.com"], "cshu")
, | |
512 Reviewer("Chris Blumenberg", "cblu@apple.com", "cblu"), | |
513 Reviewer("Chris Marrin", "cmarrin@apple.com", "cmarrin"), | |
514 Reviewer("Chris Fleizach", "cfleizach@apple.com", "cfleizach"), | |
515 Reviewer("Chris Jerdonek", "cjerdonek@webkit.org", "cjerdonek"), | |
516 Reviewer("Chris Rogers", "crogers@google.com", "crogers"), | |
517 Reviewer(u"Csaba Osztrogon\u00e1c", "ossy@webkit.org", "ossy"), | |
518 Reviewer("Dan Bernstein", ["mitz@webkit.org", "mitz@apple.com"], "mitzpettel
"), | |
519 Reviewer("Daniel Bates", "dbates@webkit.org", "dydz"), | |
520 Reviewer("Darin Adler", "darin@apple.com", "darin"), | |
521 Reviewer("Darin Fisher", ["fishd@chromium.org", "darin@chromium.org"], "fish
d"), | |
522 Reviewer("David Harrison", "harrison@apple.com", "harrison"), | |
523 Reviewer("David Hyatt", "hyatt@apple.com", ["dhyatt", "hyatt"]), | |
524 Reviewer("David Kilzer", ["ddkilzer@webkit.org", "ddkilzer@apple.com"], "ddk
ilzer"), | |
525 Reviewer("David Levin", "levin@chromium.org", "dave_levin"), | |
526 Reviewer("Dean Jackson", "dino@apple.com", "dino"), | |
527 Reviewer("Dimitri Glazkov", "dglazkov@chromium.org", "dglazkov"), | |
528 Reviewer("Dirk Pranke", "dpranke@chromium.org", "dpranke"), | |
529 Reviewer("Dirk Schulze", "krit@webkit.org", "krit"), | |
530 Reviewer("Dmitry Titov", "dimich@chromium.org", "dimich"), | |
531 Reviewer("Don Melton", "gramps@apple.com", "gramps"), | |
532 Reviewer("Dumitru Daniliuc", "dumi@chromium.org", "dumi"), | |
533 Reviewer("Elliott Sprehn", ["esprehn@chromium.org", "esprehn+autocc@chromium
.org"], "esprehn"), | |
534 Reviewer("Emil A Eklund", "eae@chromium.org", "eae"), | |
535 Reviewer("Enrica Casucci", "enrica@apple.com", "enrica"), | |
536 Reviewer("Eric Carlson", "eric.carlson@apple.com", "eric_carlson"), | |
537 Reviewer("Eric Seidel", "eric@webkit.org", "eseidel"), | |
538 Reviewer("Filip Pizlo", "fpizlo@apple.com", "pizlo"), | |
539 Reviewer("Gavin Barraclough", "barraclough@apple.com", "gbarra"), | |
540 Reviewer("Geoffrey Garen", "ggaren@apple.com", "ggaren"), | |
541 Reviewer("George Staikos", ["staikos@kde.org", "staikos@webkit.org"]), | |
542 Reviewer("Gustavo Noronha Silva", ["gns@gnome.org", "kov@webkit.org", "gusta
vo.noronha@collabora.co.uk", "gustavo.noronha@collabora.com"], "kov"), | |
543 Reviewer("Gyuyoung Kim", ["gyuyoung.kim@samsung.com", "gyuyoung.kim@webkit.o
rg"], "gyuyoung"), | |
544 Reviewer("Hajime Morrita", ["morrita@google.com", "morrita@chromium.org"], "
morrita"), | |
545 Reviewer("Holger Freyther", ["zecke@selfish.org", "zecke@webkit.org"], "zeck
e"), | |
546 Reviewer("James Robinson", ["jamesr@chromium.org", "jamesr@google.com"], "ja
mesr"), | |
547 Reviewer("Jan Alonzo", ["jmalonzo@gmail.com", "jmalonzo@webkit.org"], "janm"
), | |
548 Reviewer("Jer Noble", "jer.noble@apple.com", "jernoble"), | |
549 Reviewer("Jeremy Orlow", ["jorlow@webkit.org", "jorlow@chromium.org"], "jorl
ow"), | |
550 Reviewer("Jessie Berlin", ["jberlin@webkit.org", "jberlin@apple.com"], "jess
ieberlin"), | |
551 Reviewer("Jian Li", "jianli@chromium.org", "jianli"), | |
552 Reviewer("Jocelyn Turcotte", ["jocelyn.turcotte@digia.com", "jocelyn.turcott
e@nokia.com"], "jturcotte"), | |
553 Reviewer("Jochen Eisinger", "jochen@chromium.org", "jochen__"), | |
554 Reviewer("John Sullivan", "sullivan@apple.com", "sullivan"), | |
555 Reviewer("Jon Honeycutt", "jhoneycutt@apple.com", "jhoneycutt"), | |
556 Reviewer("Joseph Pecoraro", ["joepeck@webkit.org", "pecoraro@apple.com"], "J
oePeck"), | |
557 Reviewer("Julien Chaffraix", ["jchaffraix@webkit.org", "julien.chaffraix@gma
il.com", "jchaffraix@google.com", "jchaffraix@codeaurora.org"], "jchaffraix"), | |
558 Reviewer("Justin Garcia", "justin.garcia@apple.com", "justing"), | |
559 Reviewer("Ken Kocienda", "kocienda@apple.com"), | |
560 Reviewer("Kenneth Rohde Christiansen", ["kenneth@webkit.org", "kenneth.r.chr
istiansen@intel.com", "kenneth.christiansen@gmail.com"], ["kenneth_", "kenneth",
"kenne"]), | |
561 Reviewer("Kenneth Russell", ["kbr@google.com", "kbr@chromium.org"], ["kbr_go
ogle", "kbrgg"]), | |
562 Reviewer("Kent Tamura", ["tkent@chromium.org", "tkent@google.com"], "tkent")
, | |
563 Reviewer("Kentaro Hara", ["haraken@chromium.org"], "haraken"), | |
564 Reviewer("Kevin Decker", "kdecker@apple.com", "superkevin"), | |
565 Reviewer("Kevin McCullough", "kmccullough@apple.com", "maculloch"), | |
566 Reviewer("Kevin Ollivier", ["kevino@theolliviers.com", "kevino@webkit.org"],
"kollivier"), | |
567 Reviewer("Lars Knoll", ["lars@trolltech.com", "lars@kde.org", "lars.knoll@no
kia.com"], "lars"), | |
568 Reviewer("Laszlo Gombos", ["laszlo.gombos@webkit.org", "l.gombos@samsung.com
", "laszlo.gombos@gmail.com", "laszlo.1.gombos@nokia.com"], "lgombos"), | |
569 Reviewer("Levi Weintraub", ["leviw@chromium.org", "leviw@google.com", "lwein
traub@apple.com"], "leviw"), | |
570 Reviewer("Luiz Agostini", ["luiz@webkit.org", "luiz.agostini@openbossa.org"]
, "lca"), | |
571 Reviewer("Maciej Stachowiak", "mjs@apple.com", "othermaciej"), | |
572 Reviewer("Mark Hahnenberg", "mhahnenberg@apple.com", "mhahnenberg"), | |
573 Reviewer("Mark Rowe", "mrowe@apple.com", "bdash"), | |
574 Reviewer("Martin Robinson", ["mrobinson@webkit.org", "mrobinson@igalia.com",
"martin.james.robinson@gmail.com"], "mrobinson"), | |
575 Reviewer("Michael Saboff", "msaboff@apple.com", "msaboff"), | |
576 Reviewer("Mihai Parparita", "mihaip@chromium.org", "mihaip"), | |
577 Reviewer("Nate Chapin", "japhet@chromium.org", ["japhet", "natechapin"]), | |
578 Reviewer("Nico Weber", ["thakis@chromium.org", "thakis@google.com"], "thakis
"), | |
579 Reviewer("Nikolas Zimmermann", ["zimmermann@kde.org", "zimmermann@physik.rwt
h-aachen.de", "zimmermann@webkit.org", "nzimmermann@blackberry.com", "nzimmerman
n@rim.com"], "wildfox"), | |
580 Reviewer("Noam Rosenthal", ["noam@webkit.org", "noam.rosenthal@nokia.com"],
"noamr"), | |
581 Reviewer("Ojan Vafai", ["ojan@chromium.org", "ojan.autocc@gmail.com"], "ojan
"), | |
582 Reviewer("Oliver Hunt", "oliver@apple.com", "olliej"), | |
583 Reviewer("Pavel Feldman", ["pfeldman@chromium.org", "pfeldman@google.com"],
"pfeldman"), | |
584 Reviewer("Philip Rogers", ["pdr@google.com", "pdr@chromium.org"], "pdr"), | |
585 Reviewer("Philippe Normand", ["pnormand@igalia.com", "philn@webkit.org", "ph
iln@igalia.com"], ["philn-tp", "pnormand"]), | |
586 Reviewer("Richard Williamson", "rjw@apple.com", "rjw"), | |
587 Reviewer("Rob Buis", ["rwlbuis@gmail.com", "rwlbuis@webkit.org", "rbuis@blac
kberry.com", "rbuis@rim.com"], "rwlbuis"), | |
588 Reviewer("Ryosuke Niwa", "rniwa@webkit.org", "rniwa"), | |
589 Reviewer("Sam Weinig", ["sam@webkit.org", "weinig@apple.com"], "weinig"), | |
590 Reviewer("Shinichiro Hamaji", "hamaji@chromium.org", "hamaji"), | |
591 Reviewer("Simon Fraser", "simon.fraser@apple.com", "smfr"), | |
592 Reviewer("Simon Hausmann", ["hausmann@webkit.org", "hausmann@kde.org", "simo
n.hausmann@digia.com"], "tronical"), | |
593 Reviewer("Stephanie Lewis", "slewis@apple.com", "sundiamonde"), | |
594 Reviewer("Stephen Chenney", "schenney@chromium.org", "schenney"), | |
595 Reviewer("Stephen White", "senorblanco@chromium.org", "senorblanco"), | |
596 Reviewer("Steve Block", ["steveblock@chromium.org", "steveblock@google.com"]
, "steveblock"), | |
597 Reviewer("Steve Falkenburg", "sfalken@apple.com", "sfalken"), | |
598 Reviewer("Tim Omernick", "timo@apple.com"), | |
599 Reviewer("Timothy Hatcher", ["timothy@apple.com", "timothy@hatcher.name"], "
xenon"), | |
600 Reviewer("Tim Horton", "timothy_horton@apple.com", "thorton"), | |
601 Reviewer("Tony Chang", "tony@chromium.org", "tony^work"), | |
602 Reviewer("Tony Gentilcore", "tonyg@chromium.org", "tonyg-cr"), | |
603 Reviewer(u"Tor Arne Vestb\u00f8", ["vestbo@webkit.org", "tor.arne.vestbo@nok
ia.com"], "torarne"), | |
604 Reviewer("Vicki Murley", "vicki@apple.com"), | |
605 Reviewer("Vsevolod Vlasov", "vsevik@chromium.org", "vsevik"), | |
606 Reviewer("Xan Lopez", ["xan.lopez@gmail.com", "xan@gnome.org", "xan@webkit.o
rg", "xlopez@igalia.com"], "xan"), | |
607 Reviewer("Yong Li", ["yong.li.webkit@outlook.com"], "yoli"), | |
608 Reviewer("Yury Semikhatsky", "yurys@chromium.org", "yurys"), | |
609 Reviewer("Yuta Kitamura", "yutak@chromium.org", "yutak"), | |
610 Reviewer("Zack Rusin", "zack@kde.org", "zackr"), | |
611 Reviewer("Zoltan Herczeg", ["zherczeg@webkit.org", "zherczeg@inf.u-szeged.hu
"], "zherczeg"), | |
612 ] | |
613 | |
614 class CommitterList(object): | |
615 | |
616 # Committers and reviewers are passed in to allow easy testing | |
617 def __init__(self, | |
618 committers=committers_unable_to_review, | |
619 reviewers=reviewers_list, | |
620 contributors=contributors_who_are_not_committers, | |
621 watchers=watchers_who_are_not_contributors): | |
622 self._accounts = watchers + contributors + committers + reviewers | |
623 self._contributors = contributors + committers + reviewers | |
624 self._committers = committers + reviewers | |
625 self._reviewers = reviewers | |
626 self._contributors_by_name = {} | |
627 self._accounts_by_email = {} | |
628 self._accounts_by_login = {} | |
629 | |
630 def accounts(self): | |
631 return self._accounts | |
632 | |
633 def contributors(self): | |
634 return self._contributors | |
635 | |
636 def committers(self): | |
637 return self._committers | |
638 | |
639 def reviewers(self): | |
640 return self._reviewers | |
641 | |
642 def _name_to_contributor_map(self): | |
643 if not len(self._contributors_by_name): | |
644 for contributor in self._contributors: | |
645 assert(contributor.full_name) | |
646 assert(contributor.full_name.lower() not in self._contributors_b
y_name) # We should never have duplicate names. | |
647 self._contributors_by_name[contributor.full_name.lower()] = cont
ributor | |
648 return self._contributors_by_name | |
649 | |
650 def _email_to_account_map(self): | |
651 if not len(self._accounts_by_email): | |
652 for account in self._accounts: | |
653 for email in account.emails: | |
654 assert(email not in self._accounts_by_email) # We should ne
ver have duplicate emails. | |
655 self._accounts_by_email[email] = account | |
656 return self._accounts_by_email | |
657 | |
658 def _login_to_account_map(self): | |
659 if not len(self._accounts_by_login): | |
660 for account in self._accounts: | |
661 if account.emails: | |
662 login = account.bugzilla_email() | |
663 assert(login not in self._accounts_by_login) # We should ne
ver have duplicate emails. | |
664 self._accounts_by_login[login] = account | |
665 return self._accounts_by_login | |
666 | |
667 def _contributor_only(self, record): | |
668 if record and not record.is_contributor: | |
669 return None | |
670 return record | |
671 | |
672 def _committer_only(self, record): | |
673 if record and not record.can_commit: | |
674 return None | |
675 return record | |
676 | |
677 def _reviewer_only(self, record): | |
678 if record and not record.can_review: | |
679 return None | |
680 return record | |
681 | |
682 def committer_by_name(self, name): | |
683 return self._committer_only(self.contributor_by_name(name)) | |
684 | |
685 def contributor_by_irc_nickname(self, irc_nickname): | |
686 for contributor in self.contributors(): | |
687 # FIXME: This should do case-insensitive comparison or assert that a
ll IRC nicknames are in lowercase | |
688 if contributor.irc_nicknames and irc_nickname in contributor.irc_nic
knames: | |
689 return contributor | |
690 return None | |
691 | |
692 def contributors_by_search_string(self, string): | |
693 glob_matches = filter(lambda contributor: contributor.matches_glob(strin
g), self.contributors()) | |
694 return glob_matches or filter(lambda contributor: contributor.contains_s
tring(string), self.contributors()) | |
695 | |
696 def contributors_by_email_username(self, string): | |
697 string = string + '@' | |
698 result = [] | |
699 for contributor in self.contributors(): | |
700 for email in contributor.emails: | |
701 if email.startswith(string): | |
702 result.append(contributor) | |
703 break | |
704 return result | |
705 | |
706 def _contributor_name_shorthands(self, contributor): | |
707 if ' ' not in contributor.full_name: | |
708 return [] | |
709 split_fullname = contributor.full_name.split() | |
710 first_name = split_fullname[0] | |
711 last_name = split_fullname[-1] | |
712 return first_name, last_name, first_name + last_name[0], first_name + '
' + last_name[0] | |
713 | |
714 def _tokenize_contributor_name(self, contributor): | |
715 full_name_in_lowercase = contributor.full_name.lower() | |
716 tokens = [full_name_in_lowercase] + full_name_in_lowercase.split() | |
717 if contributor.irc_nicknames: | |
718 return tokens + [nickname.lower() for nickname in contributor.irc_ni
cknames if len(nickname) > 5] | |
719 return tokens | |
720 | |
721 def contributors_by_fuzzy_match(self, string): | |
722 string_in_lowercase = string.lower() | |
723 | |
724 # 1. Exact match for fullname, email and irc_nicknames | |
725 account = self.contributor_by_name(string_in_lowercase) or self.account_
by_email(string_in_lowercase) or self.contributor_by_irc_nickname(string_in_lowe
rcase) | |
726 if account: | |
727 return [account], 0 | |
728 | |
729 # 2. Exact match for email username (before @) | |
730 accounts = self.contributors_by_email_username(string_in_lowercase) | |
731 if accounts and len(accounts) == 1: | |
732 return accounts, 0 | |
733 | |
734 # 3. Exact match for first name, last name, and first name + initial com
binations such as "Dan B" and "Tim H" | |
735 accounts = [contributor for contributor in self.contributors() if string
in self._contributor_name_shorthands(contributor)] | |
736 if accounts and len(accounts) == 1: | |
737 return accounts, 0 | |
738 | |
739 # 4. Finally, fuzzy-match using edit-distance | |
740 string = string_in_lowercase | |
741 contributorWithMinDistance = [] | |
742 minDistance = len(string) / 2 - 1 | |
743 for contributor in self.contributors(): | |
744 tokens = self._tokenize_contributor_name(contributor) | |
745 editdistances = [edit_distance(token, string) for token in tokens if
abs(len(token) - len(string)) <= minDistance] | |
746 if not editdistances: | |
747 continue | |
748 distance = min(editdistances) | |
749 if distance == minDistance: | |
750 contributorWithMinDistance.append(contributor) | |
751 elif distance < minDistance: | |
752 contributorWithMinDistance = [contributor] | |
753 minDistance = distance | |
754 if not len(contributorWithMinDistance): | |
755 return [], len(string) | |
756 return contributorWithMinDistance, minDistance | |
757 | |
758 def account_by_login(self, login): | |
759 return self._login_to_account_map().get(login.lower()) if login else Non
e | |
760 | |
761 def account_by_email(self, email): | |
762 return self._email_to_account_map().get(email.lower()) if email else Non
e | |
763 | |
764 def contributor_by_name(self, name): | |
765 return self._name_to_contributor_map().get(name.lower()) if name else No
ne | |
766 | |
767 def contributor_by_email(self, email): | |
768 return self._contributor_only(self.account_by_email(email)) | |
769 | |
770 def committer_by_email(self, email): | |
771 return self._committer_only(self.account_by_email(email)) | |
772 | |
773 def reviewer_by_email(self, email): | |
774 return self._reviewer_only(self.account_by_email(email)) | |
OLD | NEW |