| Index: scm.py | 
| diff --git a/scm.py b/scm.py | 
| index d23ab62d60d924f31e0e7eb6716649da0fa67bcd..2e135558801223059bba50f4fa0b892f1f7e5571 100644 | 
| --- a/scm.py | 
| +++ b/scm.py | 
| @@ -14,6 +14,10 @@ import xml.dom.minidom | 
|  | 
| import gclient_utils | 
|  | 
| +def ValidateEmail(email): | 
| + return (re.match(r"^[a-zA-Z0-9._%-+]+@[a-zA-Z0-9._%-]+.[a-zA-Z]{2,6}$", email) | 
| +         is not None) | 
| + | 
|  | 
| class GIT(object): | 
| COMMAND = "git" | 
| @@ -78,10 +82,15 @@ class GIT(object): | 
|  | 
| @staticmethod | 
| def GetBranchRef(cwd): | 
| -    """Returns the short branch name, e.g. 'master'.""" | 
| +    """Returns the full branch reference, e.g. 'refs/heads/master'.""" | 
| return GIT.Capture(['symbolic-ref', 'HEAD'], cwd).strip() | 
|  | 
| @staticmethod | 
| +  def GetBranch(cwd): | 
| +    """Returns the short branch name, e.g. 'master'.""" | 
| +    return GIT.ShortBranchName(GIT.BranchRef(cwd)) | 
| + | 
| +  @staticmethod | 
| def IsGitSvn(cwd): | 
| """Returns true if this repo looks like it's using git-svn.""" | 
| # If you have any "svn-remote.*" config keys, we think you're using svn. | 
| @@ -140,7 +149,7 @@ class GIT(object): | 
| e.g. 'origin', 'refs/heads/master' | 
| """ | 
| remote = '.' | 
| -    branch = GIT.ShortBranchName(GIT.GetBranchRef(cwd)) | 
| +    branch = GIT.GetBranch(cwd) | 
| upstream_branch = None | 
| upstream_branch = GIT.Capture( | 
| ['config', 'branch.%s.merge' % branch], error_ok=True).strip() | 
| @@ -181,6 +190,21 @@ class GIT(object): | 
| diff[i] = '--- %s' % diff[i+1][4:] | 
| return ''.join(diff) | 
|  | 
| +  @staticmethod | 
| +  def GetPatchName(cwd): | 
| +    """Constructs a name for this patch.""" | 
| +    short_sha = GIT.Capture(['rev-parse', '--short=4', 'HEAD'], cwd).strip() | 
| +    return "%s-%s" % (GIT.GetBranch(cwd), short_sha) | 
| + | 
| +  @staticmethod | 
| +  def GetCheckoutRoot(cwd): | 
| +    """Returns the top level directory of the current repository. | 
| + | 
| +    The directory is returned as an absolute path. | 
| +    """ | 
| +    return os.path.abspath(GIT.Capture(['rev-parse', '--show-cdup'], | 
| +                                       cwd).strip()) | 
| + | 
|  | 
| class SVN(object): | 
| COMMAND = "svn" | 
|  |