| Index: tools/auto_bisect/source_control.py
|
| diff --git a/tools/auto_bisect/source_control.py b/tools/auto_bisect/source_control.py
|
| index fa7ded63ed5d8864fa3abc927f85851740207586..fd3c4e336c929c4d02279d3ca7a5f34236824216 100644
|
| --- a/tools/auto_bisect/source_control.py
|
| +++ b/tools/auto_bisect/source_control.py
|
| @@ -5,6 +5,7 @@
|
| """This module contains the SourceControl class and related functions."""
|
|
|
| import os
|
| +import re
|
|
|
| from . import bisect_utils
|
|
|
| @@ -202,17 +203,22 @@ class GitSourceControl(SourceControl):
|
|
|
| return log_output == "master"
|
|
|
| - def SVNFindRev(self, revision, cwd=None):
|
| - """Maps directly to the 'git svn find-rev' command.
|
| + def SVNFindRev(self, git_revision, cwd=None):
|
| + """Finds a SVN revision OR git number for the given git hash.
|
| +
|
| + If "git svn find_rev <hash>" fails, then it runs
|
| + "git log --format=%b -1 origin/master <hash> and greps for
|
| + Cr-Commit-Position.
|
|
|
| Args:
|
| - revision: The git SHA1 to use.
|
| + git_revision: The git SHA1 to use.
|
|
|
| Returns:
|
| - An integer changelist #, otherwise None.
|
| + Git number (aka git commit position) OR an SVN revision as integer,
|
| + otherwise None.
|
| """
|
|
|
| - cmd = ['svn', 'find-rev', revision]
|
| + cmd = ['svn', 'find-rev', git_revision]
|
|
|
| output = bisect_utils.CheckRunGit(cmd, cwd)
|
| svn_revision = output.strip()
|
| @@ -220,6 +226,18 @@ class GitSourceControl(SourceControl):
|
| if bisect_utils.IsStringInt(svn_revision):
|
| return int(svn_revision)
|
|
|
| + # Retrieve commit position number from git log body for the given revision.
|
| + # TODO(prasadv): Use an appropriate command to find commit position instead
|
| + # of parsing the log. Resolve this once 407316 is fixed.
|
| + commit_position_pattern = 'Cr-Commit-Position: .*@\{#(?P<commit>[0-9]+)\}'
|
| + cmd = ['log', '--format=%b', '-1', 'origin/master', git_revision]
|
| + output = bisect_utils.CheckRunGit(cmd, cwd=cwd)
|
| + if output:
|
| + version_re = re.compile(commit_position_pattern)
|
| + commit_reg = version_re.search(output)
|
| + if commit_reg and bisect_utils.IsStringInt(commit_reg.group('commit')):
|
| + return int(commit_reg.group('commit'))
|
| +
|
| return None
|
|
|
| def QueryRevisionInfo(self, revision, cwd=None):
|
|
|