| Index: native_client_sdk/src/build_tools/build_version.py
|
| diff --git a/native_client_sdk/src/build_tools/build_version.py b/native_client_sdk/src/build_tools/build_version.py
|
| index ced1a2540d5cb0e85c113207a622edd069ef796c..91e1381bd49a031fa12ba8bf613033958dd8a84e 100644
|
| --- a/native_client_sdk/src/build_tools/build_version.py
|
| +++ b/native_client_sdk/src/build_tools/build_version.py
|
| @@ -29,10 +29,11 @@ def ChromeVersion():
|
| Chrome version string or trunk + svn rev.
|
| '''
|
| info = FetchVersionInfo()
|
| - if info.url == 'refs/heads/master':
|
| - return 'trunk.%s' % info.revision
|
| - else:
|
| - return ChromeVersionNoTrunk()
|
| + if info.url == 'git':
|
| + _, ref, revision = ParseCommitPosition(info)
|
| + if ref == 'refs/heads/master':
|
| + return 'trunk.%s' % revision
|
| + return ChromeVersionNoTrunk()
|
|
|
|
|
| def ChromeVersionNoTrunk():
|
| @@ -60,13 +61,24 @@ def ChromeRevision():
|
| '''Extract chrome revision from svn.
|
|
|
| Now that the Chrome source-of-truth is git, this will return the
|
| - Cr-Commit-Position instead. fortunately, this value is equal to the SVN
|
| + Cr-Commit-Position instead. Fortunately, this value is equal to the SVN
|
| revision if one exists.
|
|
|
| Returns:
|
| The Chrome revision as a string. e.g. "12345"
|
| '''
|
| - return FetchVersionInfo().revision
|
| + version = FetchGitCommitPosition()
|
| + return ParseCommitPosition(version.revision)[2]
|
| +
|
| +
|
| +def ChromeCommitPosition():
|
| + '''Return the full git sha and commit position.
|
| +
|
| + Returns:
|
| + A value like:
|
| + 0178d4831bd36b5fb9ff477f03dc43b11626a6dc-refs/heads/master@{#292238}
|
| + '''
|
| + return FetchGitCommitPosition().revision
|
|
|
|
|
| def NaClRevision():
|
| @@ -81,13 +93,13 @@ def NaClRevision():
|
|
|
| def FetchVersionInfo(directory=None,
|
| directory_regex_prior_to_src_url='chrome|blink|svn'):
|
| - """
|
| + '''
|
| Returns the last change (in the form of a branch, revision tuple),
|
| from some appropriate revision control system.
|
|
|
| TODO(binji): This is copied from lastchange.py. Remove this function and use
|
| lastchange.py directly when the dust settles. (see crbug.com/406783)
|
| - """
|
| + '''
|
| svn_url_regex = re.compile(
|
| r'.*/(' + directory_regex_prior_to_src_url + r')(/.*)')
|
|
|
| @@ -100,21 +112,47 @@ def FetchVersionInfo(directory=None,
|
|
|
|
|
| def FetchGitCommitPosition(directory=None):
|
| - """
|
| + '''
|
| Return the "commit-position" of the Chromium git repo. This should be
|
| equivalent to the SVN revision if one eixsts.
|
|
|
| This is a copy of the (recently reverted) change in lastchange.py.
|
| TODO(binji): Move this logic to lastchange.py when the dust settles.
|
| (see crbug.com/406783)
|
| - """
|
| + '''
|
| + hsh = ''
|
| + proc = lastchange.RunGitCommand(directory, ['rev-parse', 'HEAD'])
|
| + if proc:
|
| + output = proc.communicate()[0].strip()
|
| + if proc.returncode == 0 and output:
|
| + hsh = output
|
| + if not hsh:
|
| + return None
|
| + pos = ''
|
| proc = lastchange.RunGitCommand(directory,
|
| ['show', '-s', '--format=%B', 'HEAD'])
|
| if proc:
|
| output = proc.communicate()[0]
|
| if proc.returncode == 0 and output:
|
| for line in reversed(output.splitlines()):
|
| - match = re.search('Cr-Commit-Position: (.*)@{#(\d+)}', line)
|
| - if match:
|
| - return lastchange.VersionInfo(match.group(1), match.group(2))
|
| - return lastchange.VersionInfo(None, None)
|
| + if line.startswith('Cr-Commit-Position:'):
|
| + pos = line.rsplit()[-1].strip()
|
| + break
|
| + if not pos:
|
| + return lastchange.VersionInfo('git', hsh)
|
| + return lastchange.VersionInfo('git', '%s-%s' % (hsh, pos))
|
| +
|
| +
|
| +def ParseCommitPosition(commit_position):
|
| + '''
|
| + Parse a Chrome commit position into its components.
|
| +
|
| + Given a commit position like:
|
| + 0178d4831bd36b5fb9ff477f03dc43b11626a6dc-refs/heads/master@{#292238}
|
| + Returns:
|
| + ("0178d4831bd36b5fb9ff477f03dc43b11626a6dc", "refs/heads/master", "292238")
|
| + '''
|
| + m = re.match(r'([0-9a-fA-F]+)-([^@]+)@{#(\d+)}', commit_position)
|
| + if m:
|
| + return m.groups()
|
| + return None
|
|
|