Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(183)

Side by Side Diff: tools/bisect-builds.py

Issue 497823003: bisect-builds.py: Support for bisecting official builds for win64 and mac64 platforms. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Snapshot Build Bisect Tool 6 """Snapshot Build Bisect Tool
7 7
8 This script bisects a snapshot archive using binary search. It starts at 8 This script bisects a snapshot archive using binary search. It starts at
9 a bad revision (it will try to guess HEAD) and asks for a last known-good 9 a bad revision (it will try to guess HEAD) and asks for a last known-good
10 revision. It will then binary search across this revision range by downloading, 10 revision. It will then binary search across this revision range by downloading,
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 # Search pattern to be matched in the json output from 70 # Search pattern to be matched in the json output from
71 # BLINK_GITHASH_TO_SVN_URL to get the blink revision (svn revision). 71 # BLINK_GITHASH_TO_SVN_URL to get the blink revision (svn revision).
72 BLINK_SEARCH_PATTERN = ( 72 BLINK_SEARCH_PATTERN = (
73 r'.*git-svn-id: svn://svn.chromium.org/blink/trunk@(\d+) ') 73 r'.*git-svn-id: svn://svn.chromium.org/blink/trunk@(\d+) ')
74 74
75 SEARCH_PATTERN = { 75 SEARCH_PATTERN = {
76 'chromium': CHROMIUM_SEARCH_PATTERN, 76 'chromium': CHROMIUM_SEARCH_PATTERN,
77 'blink': BLINK_SEARCH_PATTERN, 77 'blink': BLINK_SEARCH_PATTERN,
78 } 78 }
79 79
80 CREDENTIAL_ERROR_MESSAGE = ('You are attempting to access protected data with '
81 'no configured credentials')
82
80 ############################################################################### 83 ###############################################################################
81 84
82 import httplib 85 import httplib
83 import json 86 import json
84 import optparse 87 import optparse
85 import os 88 import os
86 import re 89 import re
87 import shlex 90 import shlex
88 import shutil 91 import shutil
89 import subprocess 92 import subprocess
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 # It uses "git svn find-rev <SHA1>" command to convert git hash to svn 130 # It uses "git svn find-rev <SHA1>" command to convert git hash to svn
128 # revision number. 131 # revision number.
129 self.use_local_repo = use_local_repo 132 self.use_local_repo = use_local_repo
130 133
131 # Set some internal members: 134 # Set some internal members:
132 # _listing_platform_dir = Directory that holds revisions. Ends with a '/'. 135 # _listing_platform_dir = Directory that holds revisions. Ends with a '/'.
133 # _archive_extract_dir = Uncompressed directory in the archive_name file. 136 # _archive_extract_dir = Uncompressed directory in the archive_name file.
134 # _binary_name = The name of the executable to run. 137 # _binary_name = The name of the executable to run.
135 if self.platform in ('linux', 'linux64', 'linux-arm'): 138 if self.platform in ('linux', 'linux64', 'linux-arm'):
136 self._binary_name = 'chrome' 139 self._binary_name = 'chrome'
137 elif self.platform == 'mac': 140 elif self.platform in ('mac', 'mac64'):
138 self.archive_name = 'chrome-mac.zip' 141 self.archive_name = 'chrome-mac.zip'
139 self._archive_extract_dir = 'chrome-mac' 142 self._archive_extract_dir = 'chrome-mac'
140 elif self.platform == 'win': 143 elif self.platform in ('win', 'win64'):
141 self.archive_name = 'chrome-win32.zip' 144 self.archive_name = 'chrome-win32.zip'
142 self._archive_extract_dir = 'chrome-win32' 145 self._archive_extract_dir = 'chrome-win32'
143 self._binary_name = 'chrome.exe' 146 self._binary_name = 'chrome.exe'
144 else: 147 else:
145 raise Exception('Invalid platform: %s' % self.platform) 148 raise Exception('Invalid platform: %s' % self.platform)
146 149
147 if is_official: 150 if is_official:
148 if self.platform == 'linux': 151 if self.platform == 'linux':
149 self._listing_platform_dir = 'precise32/' 152 self._listing_platform_dir = 'precise32/'
150 self.archive_name = 'chrome-precise32.zip' 153 self.archive_name = 'chrome-precise32.zip'
151 self._archive_extract_dir = 'chrome-precise32' 154 self._archive_extract_dir = 'chrome-precise32'
152 elif self.platform == 'linux64': 155 elif self.platform == 'linux64':
153 self._listing_platform_dir = 'precise64/' 156 self._listing_platform_dir = 'precise64/'
154 self.archive_name = 'chrome-precise64.zip' 157 self.archive_name = 'chrome-precise64.zip'
155 self._archive_extract_dir = 'chrome-precise64' 158 self._archive_extract_dir = 'chrome-precise64'
156 elif self.platform == 'mac': 159 elif self.platform == 'mac':
157 self._listing_platform_dir = 'mac/' 160 self._listing_platform_dir = 'mac/'
158 self._binary_name = 'Google Chrome.app/Contents/MacOS/Google Chrome' 161 self._binary_name = 'Google Chrome.app/Contents/MacOS/Google Chrome'
162 elif self.platform == 'mac64':
163 self._listing_platform_dir = 'mac64/'
164 self._binary_name = 'Google Chrome.app/Contents/MacOS/Google Chrome'
159 elif self.platform == 'win': 165 elif self.platform == 'win':
160 self._listing_platform_dir = 'win/' 166 self._listing_platform_dir = 'win/'
161 self.archive_name = 'chrome-win.zip' 167 self.archive_name = 'chrome-win.zip'
162 self._archive_extract_dir = 'chrome-win' 168 self._archive_extract_dir = 'chrome-win'
169 elif self.platform == 'win64':
170 self._listing_platform_dir = 'win64/'
171 self.archive_name = 'chrome-win64.zip'
172 self._archive_extract_dir = 'chrome-win64'
163 else: 173 else:
164 if self.platform in ('linux', 'linux64', 'linux-arm'): 174 if self.platform in ('linux', 'linux64', 'linux-arm'):
165 self.archive_name = 'chrome-linux.zip' 175 self.archive_name = 'chrome-linux.zip'
166 self._archive_extract_dir = 'chrome-linux' 176 self._archive_extract_dir = 'chrome-linux'
167 if self.platform == 'linux': 177 if self.platform == 'linux':
168 self._listing_platform_dir = 'Linux/' 178 self._listing_platform_dir = 'Linux/'
169 elif self.platform == 'linux64': 179 elif self.platform == 'linux64':
170 self._listing_platform_dir = 'Linux_x64/' 180 self._listing_platform_dir = 'Linux_x64/'
171 elif self.platform == 'linux-arm': 181 elif self.platform == 'linux-arm':
172 self._listing_platform_dir = 'Linux_ARM_Cross-Compile/' 182 self._listing_platform_dir = 'Linux_ARM_Cross-Compile/'
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
417 print ('Follow the instructions in this document ' 427 print ('Follow the instructions in this document '
418 'http://dev.chromium.org/developers/how-tos/install-depot-tools' 428 'http://dev.chromium.org/developers/how-tos/install-depot-tools'
419 ' to install depot_tools and then try again.') 429 ' to install depot_tools and then try again.')
420 sys.exit(1) 430 sys.exit(1)
421 gsutil_path = os.path.join(gsutil_path, 'third_party', 'gsutil', 'gsutil') 431 gsutil_path = os.path.join(gsutil_path, 'third_party', 'gsutil', 'gsutil')
422 gsutil = subprocess.Popen([sys.executable, gsutil_path] + args, 432 gsutil = subprocess.Popen([sys.executable, gsutil_path] + args,
423 stdout=subprocess.PIPE, stderr=subprocess.PIPE, 433 stdout=subprocess.PIPE, stderr=subprocess.PIPE,
424 env=None) 434 env=None)
425 stdout, stderr = gsutil.communicate() 435 stdout, stderr = gsutil.communicate()
426 if gsutil.returncode: 436 if gsutil.returncode:
427 if re.findall(r'status[ |=]40[1|3]', stderr): 437 if (re.findall(r'status[ |=]40[1|3]', stderr) or
438 stderr.startswith(CREDENTIAL_ERROR_MESSAGE)):
428 print ('Follow these steps to configure your credentials and try' 439 print ('Follow these steps to configure your credentials and try'
429 ' running the bisect-builds.py again.:\n' 440 ' running the bisect-builds.py again.:\n'
430 ' 1. Run "python %s config" and follow its instructions.\n' 441 ' 1. Run "python %s config" and follow its instructions.\n'
431 ' 2. If you have a @google.com account, use that account.\n' 442 ' 2. If you have a @google.com account, use that account.\n'
432 ' 3. For the project-id, just enter 0.' % gsutil_path) 443 ' 3. For the project-id, just enter 0.' % gsutil_path)
433 sys.exit(1) 444 sys.exit(1)
434 else: 445 else:
435 raise Exception('Error running the gsutil command') 446 raise Exception('Error running the gsutil command: %s' % stderr)
436 return stdout 447 return stdout
437 448
438 def GsutilList(bucket): 449 def GsutilList(bucket):
439 query = 'gs://%s/' % bucket 450 query = 'gs://%s/' % bucket
440 stdout = RunGsutilCommand(['ls', query]) 451 stdout = RunGsutilCommand(['ls', query])
441 return [url[len(query):].strip('/') for url in stdout.splitlines()] 452 return [url[len(query):].strip('/') for url in stdout.splitlines()]
442 453
443 # Download the revlist and filter for just the range between good and bad. 454 # Download the revlist and filter for just the range between good and bad.
444 minrev = min(self.good_revision, self.bad_revision) 455 minrev = min(self.good_revision, self.bad_revision)
445 maxrev = max(self.good_revision, self.bad_revision) 456 maxrev = max(self.good_revision, self.bad_revision)
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after
946 ' Official versions (e.g. 1.0.1000.0) for official builds. (-o)\n' 957 ' Official versions (e.g. 1.0.1000.0) for official builds. (-o)\n'
947 ' SVN revisions (e.g. 123456) for chromium builds, from trunk.\n' 958 ' SVN revisions (e.g. 123456) for chromium builds, from trunk.\n'
948 ' Use base_trunk_revision from http://omahaproxy.appspot.com/\n' 959 ' Use base_trunk_revision from http://omahaproxy.appspot.com/\n'
949 ' for earlier revs.\n' 960 ' for earlier revs.\n'
950 ' Chrome\'s about: build number and omahaproxy branch_revision\n' 961 ' Chrome\'s about: build number and omahaproxy branch_revision\n'
951 ' are incorrect, they are from branches.\n' 962 ' are incorrect, they are from branches.\n'
952 '\n' 963 '\n'
953 'Tip: add "-- --no-first-run" to bypass the first run prompts.') 964 'Tip: add "-- --no-first-run" to bypass the first run prompts.')
954 parser = optparse.OptionParser(usage=usage) 965 parser = optparse.OptionParser(usage=usage)
955 # Strangely, the default help output doesn't include the choice list. 966 # Strangely, the default help output doesn't include the choice list.
956 choices = ['mac', 'win', 'linux', 'linux64', 'linux-arm'] 967 choices = ['mac', 'mac64', 'win', 'win64', 'linux', 'linux64', 'linux-arm']
957 # linux-chromiumos lacks a continuous archive http://crbug.com/78158 968 # linux-chromiumos lacks a continuous archive http://crbug.com/78158
958 parser.add_option('-a', '--archive', 969 parser.add_option('-a', '--archive',
959 choices=choices, 970 choices=choices,
960 help='The buildbot archive to bisect [%s].' % 971 help='The buildbot archive to bisect [%s].' %
961 '|'.join(choices)) 972 '|'.join(choices))
962 parser.add_option('-o', 973 parser.add_option('-o',
963 action='store_true', 974 action='store_true',
964 dest='official_builds', 975 dest='official_builds',
965 help='Bisect across official Chrome builds (internal ' 976 help='Bisect across official Chrome builds (internal '
966 'only) instead of Chromium archives.') 977 'only) instead of Chromium archives.')
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
1134 1145
1135 print 'CHANGELOG URL:' 1146 print 'CHANGELOG URL:'
1136 if opts.official_builds: 1147 if opts.official_builds:
1137 print OFFICIAL_CHANGELOG_URL % (min_chromium_rev, max_chromium_rev) 1148 print OFFICIAL_CHANGELOG_URL % (min_chromium_rev, max_chromium_rev)
1138 else: 1149 else:
1139 print ' ' + CHANGELOG_URL % (min_chromium_rev, max_chromium_rev) 1150 print ' ' + CHANGELOG_URL % (min_chromium_rev, max_chromium_rev)
1140 1151
1141 1152
1142 if __name__ == '__main__': 1153 if __name__ == '__main__':
1143 sys.exit(main()) 1154 sys.exit(main())
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698