| OLD | NEW |
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """Small utility library of python functions used during SDK building. | 5 """Small utility library of python functions used during SDK building. |
| 6 """ | 6 """ |
| 7 | 7 |
| 8 import os | 8 import os |
| 9 import re | 9 import re |
| 10 import sys | 10 import sys |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 VERSION_PATH = os.path.join(SRC_DIR, 'chrome', 'VERSION') | 22 VERSION_PATH = os.path.join(SRC_DIR, 'chrome', 'VERSION') |
| 23 | 23 |
| 24 | 24 |
| 25 def ChromeVersion(): | 25 def ChromeVersion(): |
| 26 '''Extract chrome version from src/chrome/VERSION + svn. | 26 '''Extract chrome version from src/chrome/VERSION + svn. |
| 27 | 27 |
| 28 Returns: | 28 Returns: |
| 29 Chrome version string or trunk + svn rev. | 29 Chrome version string or trunk + svn rev. |
| 30 ''' | 30 ''' |
| 31 info = FetchVersionInfo() | 31 info = FetchVersionInfo() |
| 32 if info.url == 'refs/heads/master': | 32 if info.url == 'git': |
| 33 return 'trunk.%s' % info.revision | 33 _, ref, revision = ParseCommitPosition(info) |
| 34 else: | 34 if ref == 'refs/heads/master': |
| 35 return ChromeVersionNoTrunk() | 35 return 'trunk.%s' % revision |
| 36 return ChromeVersionNoTrunk() |
| 36 | 37 |
| 37 | 38 |
| 38 def ChromeVersionNoTrunk(): | 39 def ChromeVersionNoTrunk(): |
| 39 '''Extract the chrome version from src/chrome/VERSION. | 40 '''Extract the chrome version from src/chrome/VERSION. |
| 40 Ignore whether this is a trunk build. | 41 Ignore whether this is a trunk build. |
| 41 | 42 |
| 42 Returns: | 43 Returns: |
| 43 Chrome version string. | 44 Chrome version string. |
| 44 ''' | 45 ''' |
| 45 exec(open(VERSION_PATH).read()) | 46 exec(open(VERSION_PATH).read()) |
| 46 return '%s.%s.%s.%s' % (MAJOR, MINOR, BUILD, PATCH) | 47 return '%s.%s.%s.%s' % (MAJOR, MINOR, BUILD, PATCH) |
| 47 | 48 |
| 48 | 49 |
| 49 def ChromeMajorVersion(): | 50 def ChromeMajorVersion(): |
| 50 '''Extract chrome major version from src/chrome/VERSION. | 51 '''Extract chrome major version from src/chrome/VERSION. |
| 51 | 52 |
| 52 Returns: | 53 Returns: |
| 53 Chrome major version. | 54 Chrome major version. |
| 54 ''' | 55 ''' |
| 55 exec(open(VERSION_PATH, 'r').read()) | 56 exec(open(VERSION_PATH, 'r').read()) |
| 56 return str(MAJOR) | 57 return str(MAJOR) |
| 57 | 58 |
| 58 | 59 |
| 59 def ChromeRevision(): | 60 def ChromeRevision(): |
| 60 '''Extract chrome revision from svn. | 61 '''Extract chrome revision from svn. |
| 61 | 62 |
| 62 Now that the Chrome source-of-truth is git, this will return the | 63 Now that the Chrome source-of-truth is git, this will return the |
| 63 Cr-Commit-Position instead. fortunately, this value is equal to the SVN | 64 Cr-Commit-Position instead. Fortunately, this value is equal to the SVN |
| 64 revision if one exists. | 65 revision if one exists. |
| 65 | 66 |
| 66 Returns: | 67 Returns: |
| 67 The Chrome revision as a string. e.g. "12345" | 68 The Chrome revision as a string. e.g. "12345" |
| 68 ''' | 69 ''' |
| 69 return FetchVersionInfo().revision | 70 version = FetchGitCommitPosition() |
| 71 return ParseCommitPosition(version.revision)[2] |
| 72 |
| 73 |
| 74 def ChromeCommitPosition(): |
| 75 '''Return the full git sha and commit position. |
| 76 |
| 77 Returns: |
| 78 A value like: |
| 79 0178d4831bd36b5fb9ff477f03dc43b11626a6dc-refs/heads/master@{#292238} |
| 80 ''' |
| 81 return FetchGitCommitPosition().revision |
| 70 | 82 |
| 71 | 83 |
| 72 def NaClRevision(): | 84 def NaClRevision(): |
| 73 '''Extract NaCl revision from svn. | 85 '''Extract NaCl revision from svn. |
| 74 | 86 |
| 75 Returns: | 87 Returns: |
| 76 The NaCl revision as a string. e.g. "12345" | 88 The NaCl revision as a string. e.g. "12345" |
| 77 ''' | 89 ''' |
| 78 nacl_dir = os.path.join(SRC_DIR, 'native_client') | 90 nacl_dir = os.path.join(SRC_DIR, 'native_client') |
| 79 return FetchVersionInfo(nacl_dir, 'native_client').revision | 91 return FetchVersionInfo(nacl_dir, 'native_client').revision |
| 80 | 92 |
| 81 | 93 |
| 82 def FetchVersionInfo(directory=None, | 94 def FetchVersionInfo(directory=None, |
| 83 directory_regex_prior_to_src_url='chrome|blink|svn'): | 95 directory_regex_prior_to_src_url='chrome|blink|svn'): |
| 84 """ | 96 ''' |
| 85 Returns the last change (in the form of a branch, revision tuple), | 97 Returns the last change (in the form of a branch, revision tuple), |
| 86 from some appropriate revision control system. | 98 from some appropriate revision control system. |
| 87 | 99 |
| 88 TODO(binji): This is copied from lastchange.py. Remove this function and use | 100 TODO(binji): This is copied from lastchange.py. Remove this function and use |
| 89 lastchange.py directly when the dust settles. (see crbug.com/406783) | 101 lastchange.py directly when the dust settles. (see crbug.com/406783) |
| 90 """ | 102 ''' |
| 91 svn_url_regex = re.compile( | 103 svn_url_regex = re.compile( |
| 92 r'.*/(' + directory_regex_prior_to_src_url + r')(/.*)') | 104 r'.*/(' + directory_regex_prior_to_src_url + r')(/.*)') |
| 93 | 105 |
| 94 version_info = (lastchange.FetchSVNRevision(directory, svn_url_regex) or | 106 version_info = (lastchange.FetchSVNRevision(directory, svn_url_regex) or |
| 95 lastchange.FetchGitSVNRevision(directory, svn_url_regex) or | 107 lastchange.FetchGitSVNRevision(directory, svn_url_regex) or |
| 96 FetchGitCommitPosition(directory)) | 108 FetchGitCommitPosition(directory)) |
| 97 if not version_info: | 109 if not version_info: |
| 98 version_info = lastchange.VersionInfo(None, None) | 110 version_info = lastchange.VersionInfo(None, None) |
| 99 return version_info | 111 return version_info |
| 100 | 112 |
| 101 | 113 |
| 102 def FetchGitCommitPosition(directory=None): | 114 def FetchGitCommitPosition(directory=None): |
| 103 """ | 115 ''' |
| 104 Return the "commit-position" of the Chromium git repo. This should be | 116 Return the "commit-position" of the Chromium git repo. This should be |
| 105 equivalent to the SVN revision if one eixsts. | 117 equivalent to the SVN revision if one eixsts. |
| 106 | 118 |
| 107 This is a copy of the (recently reverted) change in lastchange.py. | 119 This is a copy of the (recently reverted) change in lastchange.py. |
| 108 TODO(binji): Move this logic to lastchange.py when the dust settles. | 120 TODO(binji): Move this logic to lastchange.py when the dust settles. |
| 109 (see crbug.com/406783) | 121 (see crbug.com/406783) |
| 110 """ | 122 ''' |
| 123 hsh = '' |
| 124 proc = lastchange.RunGitCommand(directory, ['rev-parse', 'HEAD']) |
| 125 if proc: |
| 126 output = proc.communicate()[0].strip() |
| 127 if proc.returncode == 0 and output: |
| 128 hsh = output |
| 129 if not hsh: |
| 130 return None |
| 131 pos = '' |
| 111 proc = lastchange.RunGitCommand(directory, | 132 proc = lastchange.RunGitCommand(directory, |
| 112 ['show', '-s', '--format=%B', 'HEAD']) | 133 ['show', '-s', '--format=%B', 'HEAD']) |
| 113 if proc: | 134 if proc: |
| 114 output = proc.communicate()[0] | 135 output = proc.communicate()[0] |
| 115 if proc.returncode == 0 and output: | 136 if proc.returncode == 0 and output: |
| 116 for line in reversed(output.splitlines()): | 137 for line in reversed(output.splitlines()): |
| 117 match = re.search('Cr-Commit-Position: (.*)@{#(\d+)}', line) | 138 if line.startswith('Cr-Commit-Position:'): |
| 118 if match: | 139 pos = line.rsplit()[-1].strip() |
| 119 return lastchange.VersionInfo(match.group(1), match.group(2)) | 140 break |
| 120 return lastchange.VersionInfo(None, None) | 141 if not pos: |
| 142 return lastchange.VersionInfo('git', hsh) |
| 143 return lastchange.VersionInfo('git', '%s-%s' % (hsh, pos)) |
| 144 |
| 145 |
| 146 def ParseCommitPosition(commit_position): |
| 147 ''' |
| 148 Parse a Chrome commit position into its components. |
| 149 |
| 150 Given a commit position like: |
| 151 0178d4831bd36b5fb9ff477f03dc43b11626a6dc-refs/heads/master@{#292238} |
| 152 Returns: |
| 153 ("0178d4831bd36b5fb9ff477f03dc43b11626a6dc", "refs/heads/master", "292238") |
| 154 ''' |
| 155 m = re.match(r'([0-9a-fA-F]+)-([^@]+)@{#(\d+)}', commit_position) |
| 156 if m: |
| 157 return m.groups() |
| 158 return None |
| OLD | NEW |