Home | History | Annotate | Download | only in config
      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 
     32 class 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 
     52 class 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 
     65 committers_unable_to_review = [
     66     Committer("Aaron Boodman", "aa (at] chromium.org", "aboodman"),
     67     Committer("Abhishek Arya", "inferno (at] chromium.org", "inferno-sec"),
     68     Committer("Adam Langley", "agl (at] chromium.org", "agl"),
     69     Committer("Adrienne Walker", ["enne (at] google.com", "enne (at] chromium.org"], "enne"),
     70     Committer("Albert J. Wong", "ajwong (at] chromium.org"),
     71     Committer("Alejandro G. Castro", ["alex (at] igalia.com", "alex (at] webkit.org"]),
     72     Committer("Alexander Kellett", ["lypanov (at] mac.com", "a-lists001 (at] lypanov.net", "lypanov (at] kde.org"], "lypanov"),
     73     Committer("Alexander Pavlov", "apavlov (at] chromium.org", "apavlov"),
     74     Committer("Alexis Menard", ["alexis.menard (at] openbossa.org", "menard (at] kde.org"], "darktears"),
     75     Committer("Andre Boule", "aboule (at] apple.com"),
     76     Committer("Andrei Popescu", "andreip (at] google.com", "andreip"),
     77     Committer("Andrew Wellington", ["andrew (at] webkit.org", "proton (at] wiretapped.net"], "proton"),
     78     Committer("Andrew Scherkus", "scherkus (at] chromium.org", "scherkus"),
     79     Committer("Andrey Kosyakov", "caseq (at] chromium.org", "caseq"),
     80     Committer("Andras Becsi", ["abecsi (at] webkit.org", "abecsi (at] inf.u-szeged.hu"], "bbandix"),
     81     Committer("Andy Estes", "aestes (at] apple.com", "estes"),
     82     Committer("Anthony Ricaud", "rik (at] webkit.org", "rik"),
     83     Committer("Anton Muhin", "antonm (at] chromium.org", "antonm"),
     84     Committer("Balazs Kelemen", "kbalazs (at] webkit.org", "kbalazs"),
     85     Committer("Ben Murdoch", "benm (at] google.com", "benm"),
     86     Committer("Benjamin C Meyer", ["ben (at] meyerhome.net", "ben (at] webkit.org"], "icefox"),
     87     Committer("Benjamin Kalman", ["kalman (at] chromium.org", "kalman (at] google.com"], "kalman"),
     88     Committer("Benjamin Otte", ["otte (at] gnome.org", "otte (at] webkit.org"], "otte"),
     89     Committer("Brent Fulgham", "bfulgham (at] webkit.org", "bfulgham"),
     90     Committer("Brett Wilson", "brettw (at] chromium.org", "brettx"),
     91     Committer("Cameron McCormack", "cam (at] webkit.org", "heycam"),
     92     Committer("Carlos Garcia Campos", ["cgarcia (at] igalia.com", "carlosgc (at] gnome.org", "carlosgc (at] webkit.org"], "KaL"),
     93     Committer("Carol Szabo", "carol (at] webkit.org", "cszabo1"),
     94     Committer("Chang Shu", ["cshu (at] webkit.org", "Chang.Shu (at] nokia.com"], "cshu"),
     95     Committer("Chris Evans", "cevans (at] google.com"),
     96     Committer("Chris Petersen", "cpetersen (at] apple.com", "cpetersen"),
     97     Committer("Chris Rogers", "crogers (at] google.com", "crogers"),
     98     Committer("Christian Dywan", ["christian (at] twotoasts.de", "christian (at] webkit.org"]),
     99     Committer("Collin Jackson", "collinj (at] webkit.org"),
    100     Committer("Daniel Cheng", "dcheng (at] chromium.org", "dcheng"),
    101     Committer("David Smith", ["catfish.man (at] gmail.com", "dsmith (at] webkit.org"], "catfishman"),
    102     Committer("Dean Jackson", "dino (at] apple.com", "dino"),
    103     Committer("Diego Gonzalez", ["diegohcg (at] webkit.org", "diego.gonzalez (at] openbossa.org"], "diegohcg"),
    104     Committer("Dirk Pranke", "dpranke (at] chromium.org", "dpranke"),
    105     Committer("Drew Wilson", "atwilson (at] chromium.org", "atwilson"),
    106     Committer("Eli Fidler", "eli (at] staikos.net", "QBin"),
    107     Committer("Emil A Eklund", "eae (at] chromium.org", "eae"),
    108     Committer("Enrica Casucci", "enrica (at] apple.com"),
    109     Committer("Erik Arvidsson", "arv (at] chromium.org", "arv"),
    110     Committer("Eric Roman", "eroman (at] chromium.org", "eroman"),
    111     Committer("Eric Uhrhane", "ericu (at] chromium.org", "ericu"),
    112     Committer("Evan Martin", "evan (at] chromium.org", "evmar"),
    113     Committer("Evan Stade", "estade (at] chromium.org", "estade"),
    114     Committer("Fady Samuel", "fsamuel (at] chromium.org", "fsamuel"),
    115     Committer("Feng Qian", "feng (at] chromium.org"),
    116     Committer("Fumitoshi Ukai", "ukai (at] chromium.org", "ukai"),
    117     Committer("Gabor Loki", "loki (at] webkit.org", "loki04"),
    118     Committer("Gabor Rapcsanyi", ["rgabor (at] webkit.org", "rgabor (at] inf.u-szeged.hu"], "rgabor"),
    119     Committer("Girish Ramakrishnan", ["girish (at] forwardbias.in", "ramakrishnan.girish (at] gmail.com"]),
    120     Committer("Graham Dennis", ["Graham.Dennis (at] gmail.com", "gdennis (at] webkit.org"]),
    121     Committer("Greg Bolsinga", "bolsinga (at] apple.com"),
    122     Committer("Gyuyoung Kim", ["gyuyoung.kim (at] samsung.com", "gyuyoung.kim (at] webkit.org"], "gyuyoung"),
    123     Committer("Hans Wennborg", "hans (at] chromium.org", "hwennborg"),
    124     Committer("Hayato Ito", "hayato (at] chromium.org", "hayato"),
    125     Committer("Helder Correia", "helder (at] sencha.com", "helder"),
    126     Committer("Hin-Chung Lam", ["hclam (at] google.com", "hclam (at] chromium.org"]),
    127     Committer("Ilya Tikhonovsky", "loislo (at] chromium.org", "loislo"),
    128     Committer("Ivan Krsti\u0107", "ike (at] apple.com"),
    129     Committer("Jakob Petsovits", ["jpetsovits (at] rim.com", "jpetso (at] gmx.at"], "jpetso"),
    130     Committer("Jakub Wieczorek", "jwieczorek (at] webkit.org", "fawek"),
    131     Committer("James Hawkins", ["jhawkins (at] chromium.org", "jhawkins (at] google.com"], "jhawkins"),
    132     Committer("James Kozianski", ["koz (at] chromium.org", "koz (at] google.com"], "koz"),
    133     Committer("James Simonsen", "simonjam (at] chromium.org", "simonjam"),
    134     Committer("Jay Civelli", "jcivelli (at] chromium.org", "jcivelli"),
    135     Committer("Jeff Miller", "jeffm (at] apple.com", "jeffm"),
    136     Committer("Jenn Braithwaite", "jennb (at] chromium.org", "jennb"),
    137     Committer("Jens Alfke", ["snej (at] chromium.org", "jens (at] apple.com"]),
    138     Committer("Jer Noble", "jer.noble (at] apple.com", "jernoble"),
    139     Committer("Jeremy Moskovich", ["playmobil (at] google.com", "jeremy (at] chromium.org"], "jeremymos"),
    140     Committer("Jessie Berlin", ["jberlin (at] webkit.org", "jberlin (at] apple.com"]),
    141     Committer("Jesus Sanchez-Palencia", ["jesus (at] webkit.org", "jesus.palencia (at] openbossa.org"], "jeez_"),
    142     Committer("Jocelyn Turcotte", "jocelyn.turcotte (at] nokia.com", "jturcotte"),
    143     Committer("Jochen Eisinger", "jochen (at] chromium.org", "jochen__"),
    144     Committer("John Abd-El-Malek", "jam (at] chromium.org", "jam"),
    145     Committer("John Gregg", ["johnnyg (at] google.com", "johnnyg (at] chromium.org"], "johnnyg"),
    146     Committer("John Knottenbelt", "jknotten (at] chromium.org", "jknotten"),
    147     Committer("Johnny Ding", ["jnd (at] chromium.org", "johnnyding.webkit (at] gmail.com"], "johnnyding"),
    148     Committer("Joone Hur", ["joone.hur (at] collabora.co.uk", "joone (at] kldp.org", "joone (at] webkit.org"], "joone"),
    149     Committer("Joost de Valk", ["joost (at] webkit.org", "webkit-dev (at] joostdevalk.nl"], "Altha"),
    150     Committer("Julie Parent", ["jparent (at] google.com", "jparent (at] chromium.org"], "jparent"),
    151     Committer("Julien Chaffraix", ["jchaffraix (at] webkit.org", "julien.chaffraix (at] gmail.com"]),
    152     Committer("Jungshik Shin", "jshin (at] chromium.org"),
    153     Committer("Justin Schuh", "jschuh (at] chromium.org", "jschuh"),
    154     Committer("Keishi Hattori", "keishi (at] webkit.org", "keishi"),
    155     Committer("Kelly Norton", "knorton (at] google.com"),
    156     Committer("Kenji Imasaki", "imasaki (at] chromium.org", "imasaki"),
    157     Committer("Kent Hansen", "kent.hansen (at] nokia.com", "khansen"),
    158     Committer("Kimmo Kinnunen", ["kimmo.t.kinnunen (at] nokia.com", "kimmok (at] iki.fi", "ktkinnun (at] webkit.org"], "kimmok"),
    159     Committer("Kinuko Yasuda", "kinuko (at] chromium.org", "kinuko"),
    160     Committer("Krzysztof Kowalczyk", "kkowalczyk (at] gmail.com"),
    161     Committer("Kwang Yul Seo", ["kwangyul.seo (at] gmail.com", "skyul (at] company100.net", "kseo (at] webkit.org"], "kwangseo"),
    162     Committer("Leandro Pereira", ["leandro (at] profusion.mobi", "leandro (at] webkit.org"], "acidx"),
    163     Committer("Levi Weintraub", ["leviw (at] chromium.org", "leviw (at] google.com", "lweintraub (at] apple.com"], "leviw"),
    164     Committer("Lucas De Marchi", ["lucas.demarchi (at] profusion.mobi", "demarchi (at] webkit.org"], "demarchi"),
    165     Committer("Lucas Forschler", ["lforschler (at] apple.com"], "lforschler"),
    166     Committer("Luiz Agostini", ["luiz (at] webkit.org", "luiz.agostini (at] openbossa.org"], "lca"),
    167     Committer("Mads Ager", "ager (at] chromium.org"),
    168     Committer("Marcus Voltis Bulach", "bulach (at] chromium.org"),
    169     Committer("Mario Sanchez Prada", ["msanchez (at] igalia.com", "mario (at] webkit.org"], "msanchez"),
    170     Committer("Matt Delaney", "mdelaney (at] apple.com"),
    171     Committer("Matt Lilek", ["webkit (at] mattlilek.com", "pewtermoose (at] webkit.org"]),
    172     Committer("Matt Perry", "mpcomplete (at] chromium.org"),
    173     Committer("Maxime Britto", ["maxime.britto (at] gmail.com", "britto (at] apple.com"]),
    174     Committer("Maxime Simon", ["simon.maxime (at] gmail.com", "maxime.simon (at] webkit.org"], "maxime.simon"),
    175     Committer("Michael Nordman", "michaeln (at] google.com", "michaeln"),
    176     Committer("Michael Saboff", "msaboff (at] apple.com"),
    177     Committer("Michelangelo De Simone", "michelangelo (at] webkit.org", "michelangelo"),
    178     Committer("Mike Belshe", ["mbelshe (at] chromium.org", "mike (at] belshe.com"]),
    179     Committer("Mike Fenton", ["mifenton (at] rim.com", "mike.fenton (at] torchmobile.com"], "mfenton"),
    180     Committer("Mike Thole", ["mthole (at] mikethole.com", "mthole (at] apple.com"]),
    181     Committer("Mikhail Naganov", "mnaganov (at] chromium.org"),
    182     Committer("MORITA Hajime", "morrita (at] google.com", "morrita"),
    183     Committer("Nico Weber", ["thakis (at] chromium.org", "thakis (at] google.com"], "thakis"),
    184     Committer("Noam Rosenthal", "noam.rosenthal (at] nokia.com", "noamr"),
    185     Committer("Pam Greene", "pam (at] chromium.org", "pamg"),
    186     Committer("Patrick Gansterer", ["paroga (at] paroga.com", "paroga (at] webkit.org"], "paroga"),
    187     Committer("Pavel Podivilov", "podivilov (at] chromium.org", "podivilov"),
    188     Committer("Peter Kasting", ["pkasting (at] google.com", "pkasting (at] chromium.org"], "pkasting"),
    189     Committer("Peter Varga", ["pvarga (at] webkit.org", "pvarga (at] inf.u-szeged.hu"], "stampho"),
    190     Committer("Philippe Normand", ["pnormand (at] igalia.com", "philn (at] webkit.org"], "philn-tp"),
    191     Committer("Pierre d'Herbemont", ["pdherbemont (at] free.fr", "pdherbemont (at] apple.com"], "pdherbemont"),
    192     Committer("Pierre-Olivier Latour", "pol (at] apple.com", "pol"),
    193     Committer("Pratik Solanki", "psolanki (at] apple.com", "psolanki"),
    194     Committer("Qi Zhang", ["qi.2.zhang (at] nokia.com", "qi.zhang02180 (at] gmail.com"], "qi"),
    195     Committer("Renata Hodovan", "reni (at] webkit.org", "reni"),
    196     Committer("Robert Hogan", ["robert (at] webkit.org", "robert (at] roberthogan.net", "lists (at] roberthogan.net"], "mwenge"),
    197     Committer("Roland Steiner", "rolandsteiner (at] chromium.org"),
    198     Committer("Satish Sampath", "satish (at] chromium.org"),
    199     Committer("Scott Violet", "sky (at] chromium.org", "sky"),
    200     Committer("Sergio Villar Senin", ["svillar (at] igalia.com", "sergio (at] webkit.org"], "svillar"),
    201     Committer("Stephen White", "senorblanco (at] chromium.org", "senorblanco"),
    202     Committer("Trey Matteson", "trey (at] usa.net", "trey"),
    203     Committer("Tristan O'Tierney", ["tristan (at] otierney.net", "tristan (at] apple.com"]),
    204     Committer("Vangelis Kokkevis", "vangelis (at] chromium.org", "vangelis"),
    205     Committer("Victor Wang", "victorw (at] chromium.org", "victorw"),
    206     Committer("Vitaly Repeshko", "vitalyr (at] chromium.org"),
    207     Committer("William Siegrist", "wsiegrist (at] apple.com", "wms"),
    208     Committer("W. James MacLean", "wjmaclean (at] chromium.org", "wjmaclean"),
    209     Committer("Xiaomei Ji", "xji (at] chromium.org", "xji"),
    210     Committer("Yael Aharon", "yael.aharon (at] nokia.com", "yael"),
    211     Committer("Yaar Schnitman", ["yaar (at] chromium.org", "yaar (at] google.com"]),
    212     Committer("Yong Li", ["yong.li.webkit (at] gmail.com", "yong.li (at] torchmobile.com"], "yong"),
    213     Committer("Yongjun Zhang", "yongjun.zhang (at] nokia.com"),
    214     Committer("Yi Shen", ["yi.4.shen (at] nokia.com", "shenyi2006 (at] gmail.com"]),
    215     Committer("Yuta Kitamura", "yutak (at] chromium.org", "yutak"),
    216     Committer("Yuzo Fujishima", "yuzo (at] google.com", "yuzo"),
    217     Committer("Zhenyao Mo", "zmo (at] google.com", "zhenyao"),
    218     Committer("Zoltan Herczeg", "zherczeg (at] webkit.org", "zherczeg"),
    219     Committer("Zoltan Horvath", ["zoltan (at] webkit.org", "hzoltan (at] inf.u-szeged.hu", "horvath.zoltan.6 (at] 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 
    228 reviewers_list = [
    229     Reviewer("Ada Chan", "adachan (at] apple.com", "chanada"),
    230     Reviewer("Adam Barth", "abarth (at] webkit.org", "abarth"),
    231     Reviewer("Adam Roben", "aroben (at] apple.com", "aroben"),
    232     Reviewer("Adam Treat", ["treat (at] kde.org", "treat (at] webkit.org", "atreat (at] rim.com"], "manyoso"),
    233     Reviewer("Adele Peterson", "adele (at] apple.com", "adele"),
    234     Reviewer("Alexey Proskuryakov", ["ap (at] webkit.org", "ap (at] apple.com"], "ap"),
    235     Reviewer("Alice Liu", "alice.liu (at] apple.com", "aliu"),
    236     Reviewer("Alp Toker", ["alp (at] nuanti.com", "alp (at] atoker.com", "alp (at] webkit.org"], "alp"),
    237     Reviewer("Anders Carlsson", ["andersca (at] apple.com", "acarlsson (at] apple.com"], "andersca"),
    238     Reviewer("Andreas Kling", ["kling (at] webkit.org", "andreas.kling (at] nokia.com"], "kling"),
    239     Reviewer("Antonio Gomes", ["tonikitoo (at] webkit.org", "agomes (at] rim.com"], "tonikitoo"),
    240     Reviewer("Antti Koivisto", ["koivisto (at] iki.fi", "antti (at] apple.com", "antti.j.koivisto (at] nokia.com"], "anttik"),
    241     Reviewer("Ariya Hidayat", ["ariya.hidayat (at] gmail.com", "ariya (at] sencha.com", "ariya (at] webkit.org"], "ariya"),
    242     Reviewer("Benjamin Poulain", ["benjamin (at] webkit.org", "benjamin.poulain (at] nokia.com", "ikipou (at] gmail.com"], "benjaminp"),
    243     Reviewer("Beth Dakin", "bdakin (at] apple.com", "dethbakin"),
    244     Reviewer("Brady Eidson", "beidson (at] apple.com", "bradee-oh"),
    245     Reviewer("Brian Weinstein", "bweinstein (at] apple.com", "bweinstein"),
    246     Reviewer("Cameron Zwarich", ["zwarich (at] apple.com", "cwzwarich (at] apple.com", "cwzwarich (at] webkit.org"]),
    247     Reviewer("Chris Blumenberg", "cblu (at] apple.com", "cblu"),
    248     Reviewer("Chris Marrin", "cmarrin (at] apple.com", "cmarrin"),
    249     Reviewer("Chris Fleizach", "cfleizach (at] apple.com", "cfleizach"),
    250     Reviewer("Chris Jerdonek", "cjerdonek (at] webkit.org", "cjerdonek"),
    251     Reviewer(u"Csaba Osztrogon\u00e1c", "ossy (at] webkit.org", "ossy"),
    252     Reviewer("Dan Bernstein", ["mitz (at] webkit.org", "mitz (at] apple.com"], "mitzpettel"),
    253     Reviewer("Daniel Bates", "dbates (at] webkit.org", "dydz"),
    254     Reviewer("Darin Adler", "darin (at] apple.com", "darin"),
    255     Reviewer("Darin Fisher", ["fishd (at] chromium.org", "darin (at] chromium.org"], "fishd"),
    256     Reviewer("David Harrison", "harrison (at] apple.com", "harrison"),
    257     Reviewer("David Hyatt", "hyatt (at] apple.com", "hyatt"),
    258     Reviewer("David Kilzer", ["ddkilzer (at] webkit.org", "ddkilzer (at] apple.com"], "ddkilzer"),
    259     Reviewer("David Levin", "levin (at] chromium.org", "dave_levin"),
    260     Reviewer("Dimitri Glazkov", "dglazkov (at] chromium.org", "dglazkov"),
    261     Reviewer("Dirk Schulze", "krit (at] webkit.org", "krit"),
    262     Reviewer("Dmitry Titov", "dimich (at] chromium.org", "dimich"),
    263     Reviewer("Don Melton", "gramps (at] apple.com", "gramps"),
    264     Reviewer("Dumitru Daniliuc", "dumi (at] chromium.org", "dumi"),
    265     Reviewer("Eric Carlson", "eric.carlson (at] apple.com"),
    266     Reviewer("Eric Seidel", "eric (at] webkit.org", "eseidel"),
    267     Reviewer("Gavin Barraclough", "barraclough (at] apple.com", "gbarra"),
    268     Reviewer("Geoffrey Garen", "ggaren (at] apple.com", "ggaren"),
    269     Reviewer("George Staikos", ["staikos (at] kde.org", "staikos (at] webkit.org"]),
    270     Reviewer("Gustavo Noronha Silva", ["gns (at] gnome.org", "kov (at] webkit.org", "gustavo.noronha (at] collabora.co.uk"], "kov"),
    271     Reviewer("Holger Freyther", ["zecke (at] selfish.org", "zecke (at] webkit.org"], "zecke"),
    272     Reviewer("James Robinson", ["jamesr (at] chromium.org", "jamesr (at] google.com"], "jamesr"),
    273     Reviewer("Jan Alonzo", ["jmalonzo (at] gmail.com", "jmalonzo (at] webkit.org"], "janm"),
    274     Reviewer("Jeremy Orlow", "jorlow (at] chromium.org", "jorlow"),
    275     Reviewer("Jian Li", "jianli (at] chromium.org", "jianli"),
    276     Reviewer("John Sullivan", "sullivan (at] apple.com", "sullivan"),
    277     Reviewer("Jon Honeycutt", "jhoneycutt (at] apple.com", "jhoneycutt"),
    278     Reviewer("Joseph Pecoraro", ["joepeck (at] webkit.org", "pecoraro (at] apple.com"], "JoePeck"),
    279     Reviewer("Justin Garcia", "justin.garcia (at] apple.com", "justing"),
    280     Reviewer("Ken Kocienda", "kocienda (at] apple.com"),
    281     Reviewer("Kenneth Rohde Christiansen", ["kenneth (at] webkit.org", "kenneth.christiansen (at] openbossa.org", "kenneth.christiansen (at] gmail.com"], "kenne"),
    282     Reviewer("Kenneth Russell", "kbr (at] google.com", "kbr_google"),
    283     Reviewer("Kent Tamura", "tkent (at] chromium.org", "tkent"),
    284     Reviewer("Kevin Decker", "kdecker (at] apple.com", "superkevin"),
    285     Reviewer("Kevin McCullough", "kmccullough (at] apple.com", "maculloch"),
    286     Reviewer("Kevin Ollivier", ["kevino (at] theolliviers.com", "kevino (at] webkit.org"], "kollivier"),
    287     Reviewer("Lars Knoll", ["lars (at] trolltech.com", "lars (at] kde.org", "lars.knoll (at] nokia.com"], "lars"),
    288     Reviewer("Laszlo Gombos", "laszlo.1.gombos (at] nokia.com", "lgombos"),
    289     Reviewer("Maciej Stachowiak", "mjs (at] apple.com", "othermaciej"),
    290     Reviewer("Mark Rowe", "mrowe (at] apple.com", "bdash"),
    291     Reviewer("Martin Robinson", ["mrobinson (at] webkit.org", "mrobinson (at] igalia.com", "martin.james.robinson (at] gmail.com"], "mrobinson"),
    292     Reviewer("Mihai Parparita", "mihaip (at] chromium.org", "mihaip"),
    293     Reviewer("Nate Chapin", "japhet (at] chromium.org", "japhet"),
    294     Reviewer("Nikolas Zimmermann", ["zimmermann (at] kde.org", "zimmermann (at] physik.rwth-aachen.de", "zimmermann (at] webkit.org"], "wildfox"),
    295     Reviewer("Ojan Vafai", "ojan (at] chromium.org", "ojan"),
    296     Reviewer("Oliver Hunt", "oliver (at] apple.com", "olliej"),
    297     Reviewer("Pavel Feldman", "pfeldman (at] chromium.org", "pfeldman"),
    298     Reviewer("Richard Williamson", "rjw (at] apple.com", "rjw"),
    299     Reviewer("Rob Buis", ["rwlbuis (at] gmail.com", "rwlbuis (at] webkit.org"], "rwlbuis"),
    300     Reviewer("Ryosuke Niwa", "rniwa (at] webkit.org", "rniwa"),
    301     Reviewer("Sam Weinig", ["sam (at] webkit.org", "weinig (at] apple.com"], "weinig"),
    302     Reviewer("Shinichiro Hamaji", "hamaji (at] chromium.org", "hamaji"),
    303     Reviewer("Simon Fraser", "simon.fraser (at] apple.com", "smfr"),
    304     Reviewer("Simon Hausmann", ["hausmann (at] webkit.org", "hausmann (at] kde.org", "simon.hausmann (at] nokia.com"], "tronical"),
    305     Reviewer("Stephanie Lewis", "slewis (at] apple.com", "sundiamonde"),
    306     Reviewer("Steve Block", "steveblock (at] google.com", "steveblock"),
    307     Reviewer("Steve Falkenburg", "sfalken (at] apple.com", "sfalken"),
    308     Reviewer("Tim Omernick", "timo (at] apple.com"),
    309     Reviewer("Timothy Hatcher", ["timothy (at] apple.com", "timothy (at] hatcher.name"], "xenon"),
    310     Reviewer("Tony Chang", "tony (at] chromium.org", "tony^work"),
    311     Reviewer("Tony Gentilcore", "tonyg (at] chromium.org", "tonyg-cr"),
    312     Reviewer(u"Tor Arne Vestb\u00f8", ["vestbo (at] webkit.org", "tor.arne.vestbo (at] nokia.com"], "torarne"),
    313     Reviewer("Vicki Murley", "vicki (at] apple.com"),
    314     Reviewer("Xan Lopez", ["xan.lopez (at] gmail.com", "xan (at] gnome.org", "xan (at] webkit.org"], "xan"),
    315     Reviewer("Yury Semikhatsky", "yurys (at] chromium.org", "yurys"),
    316     Reviewer("Zack Rusin", "zack (at] kde.org", "zackr"),
    317 ]
    318 
    319 
    320 class 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