]> Cypherpunks repositories - gostls13.git/commitdiff
codereview: allow multiple email addresses in CONTRIBUTORS
authorRuss Cox <rsc@golang.org>
Thu, 1 Jul 2010 06:34:11 +0000 (23:34 -0700)
committerRuss Cox <rsc@golang.org>
Thu, 1 Jul 2010 06:34:11 +0000 (23:34 -0700)
R=r
CC=golang-dev
https://golang.org/cl/1650041

lib/codereview/codereview.py

index 1ece1fa3aed0d88e7c6925d040ea60902530a93d..2d0977caaea2a70bed34cd93ef92fc852c7af628 100644 (file)
@@ -101,6 +101,7 @@ if __name__ == "__main__":
 server = "codereview.appspot.com"
 server_url_base = None
 defaultcc = None
+contributors = {}
 
 #######################################################################
 # Change list parsing.
@@ -1021,22 +1022,17 @@ def CheckContributor(ui, repo, user=None):
        return userline
 
 def FindContributor(ui, repo, user, warn=True):
-       try:
-               f = open(repo.root + '/CONTRIBUTORS', 'r')
-       except:
-               raise util.Abort("cannot open %s: %s" % (repo.root+'/CONTRIBUTORS', ExceptionDetail()))
-       for line in f.readlines():
-               line = line.rstrip()
-               if line.startswith('#'):
-                       continue
-               match = re.match(r"(.*) <(.*)>", line)
-               if not match:
-                       continue
-               if line == user or match.group(2).lower() == user.lower():
-                       return match.group(2), line
-       if warn:
-               ui.warn("warning: cannot find %s in CONTRIBUTORS\n" % (user,))
-       return None, None
+       m = re.match(r".*<(.*)>", user)
+       if m:
+               user = m.group(1).lower()
+
+       if user not in contributors:
+               if warn:
+                       ui.warn("warning: cannot find %s in CONTRIBUTORS\n" % (user,))
+               return None, None
+       
+       user, email = contributors[user]
+       return email, "%s <%s>" % (user, email)
 
 def submit(ui, repo, *pats, **opts):
        """submit change to remote repository
@@ -1615,7 +1611,7 @@ class opt(object):
        pass
 
 def RietveldSetup(ui, repo):
-       global defaultcc, upload_options, rpc, server, server_url_base, force_google_account, verbosity
+       global defaultcc, upload_options, rpc, server, server_url_base, force_google_account, verbosity, contributors
 
        # Read repository-specific options from lib/codereview/codereview.cfg
        try:
@@ -1626,6 +1622,26 @@ def RietveldSetup(ui, repo):
        except:
                pass
 
+       try:
+               f = open(repo.root + '/CONTRIBUTORS', 'r')
+       except:
+               raise util.Abort("cannot open %s: %s" % (repo.root+'/CONTRIBUTORS', ExceptionDetail()))
+       for line in f:
+               # CONTRIBUTORS is a list of lines like:
+               #       Person <email>
+               #       Person <email> <alt-email>
+               # The first email address is the one used in commit logs.
+               if line.startswith('#'):
+                       continue
+               m = re.match(r"([^<>]+\S)\s+(<[^<>\s]+>)((\s+<[^<>\s]+>)*)\s*$", line)
+               if m:
+                       name = m.group(1)
+                       email = m.group(2)[1:-1]
+                       contributors[email.lower()] = (name, email)
+                       for extra in m.group(3).split():
+                               contributors[extra[1:-1].lower()] = (name, email)
+       
+
        # TODO(rsc): If the repository config has no codereview section,
        # do not enable the extension.  This allows users to
        # put the extension in their global .hgrc but only