OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2011 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 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 BUILD_ARCHIVE_TYPE = archive | 97 BUILD_ARCHIVE_TYPE = archive |
98 | 98 |
99 if BUILD_ARCHIVE_TYPE in ('linux', 'linux64', 'linux-chromiumos'): | 99 if BUILD_ARCHIVE_TYPE in ('linux', 'linux64', 'linux-chromiumos'): |
100 BUILD_ZIP_NAME = 'chrome-linux.zip' | 100 BUILD_ZIP_NAME = 'chrome-linux.zip' |
101 BUILD_DIR_NAME = 'chrome-linux' | 101 BUILD_DIR_NAME = 'chrome-linux' |
102 BUILD_EXE_NAME = 'chrome' | 102 BUILD_EXE_NAME = 'chrome' |
103 elif BUILD_ARCHIVE_TYPE in ('mac'): | 103 elif BUILD_ARCHIVE_TYPE in ('mac'): |
104 BUILD_ZIP_NAME = 'chrome-mac.zip' | 104 BUILD_ZIP_NAME = 'chrome-mac.zip' |
105 BUILD_DIR_NAME = 'chrome-mac' | 105 BUILD_DIR_NAME = 'chrome-mac' |
106 BUILD_EXE_NAME = 'Chromium.app/Contents/MacOS/Chromium' | 106 BUILD_EXE_NAME = 'Chromium.app/Contents/MacOS/Chromium' |
107 elif BUILD_ARCHIVE_TYPE in ('xp'): | 107 elif BUILD_ARCHIVE_TYPE in ('win'): |
108 BUILD_ZIP_NAME = 'chrome-win32.zip' | 108 BUILD_ZIP_NAME = 'chrome-win32.zip' |
109 BUILD_DIR_NAME = 'chrome-win32' | 109 BUILD_DIR_NAME = 'chrome-win32' |
110 BUILD_EXE_NAME = 'chrome.exe' | 110 BUILD_EXE_NAME = 'chrome.exe' |
111 | 111 |
112 | 112 |
113 def ParseDirectoryIndex(url): | 113 def ParseDirectoryIndex(url): |
114 """Parses the all_builds.txt index file. The format of this file is: | 114 """Parses the all_builds.txt index file. The format of this file is: |
115 mac/2011-02-16/75130 | 115 mac/2011-02-16/75130 |
116 mac/2011-02-16/75218 | 116 mac/2011-02-16/75218 |
117 mac/2011-02-16/75226 | 117 mac/2011-02-16/75226 |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
216 if response and response in ('g', 'b'): | 216 if response and response in ('g', 'b'): |
217 return response == 'g' | 217 return response == 'g' |
218 | 218 |
219 def main(): | 219 def main(): |
220 usage = ('%prog [options] [-- chromium-options]\n' | 220 usage = ('%prog [options] [-- chromium-options]\n' |
221 'Perform binary search on the snapshot builds.\n' | 221 'Perform binary search on the snapshot builds.\n' |
222 '\n' | 222 '\n' |
223 'Tip: add "-- --no-first-run" to bypass the first run prompts.') | 223 'Tip: add "-- --no-first-run" to bypass the first run prompts.') |
224 parser = optparse.OptionParser(usage=usage) | 224 parser = optparse.OptionParser(usage=usage) |
225 # Strangely, the default help output doesn't include the choice list. | 225 # Strangely, the default help output doesn't include the choice list. |
226 choices = ['mac', 'xp', 'linux', 'linux64'] | 226 choices = ['mac', 'win', 'linux', 'linux64'] |
227 # linux-chromiumos lacks a continuous archive http://crbug.com/78158 | 227 # linux-chromiumos lacks a continuous archive http://crbug.com/78158 |
228 parser.add_option('-a', '--archive', | 228 parser.add_option('-a', '--archive', |
229 choices = choices, | 229 choices = choices, |
230 help = 'The buildbot archive to bisect [%s].' % | 230 help = 'The buildbot archive to bisect [%s].' % |
231 '|'.join(choices)) | 231 '|'.join(choices)) |
232 parser.add_option('-b', '--bad', type = 'int', | 232 parser.add_option('-b', '--bad', type = 'int', |
233 help = 'The bad revision to bisect to.') | 233 help = 'The bad revision to bisect to.') |
234 parser.add_option('-g', '--good', type = 'int', | 234 parser.add_option('-g', '--good', type = 'int', |
235 help = 'The last known good revision to bisect from.') | 235 help = 'The last known good revision to bisect from.') |
236 parser.add_option('-p', '--profile', '--user-data-dir', type = 'str', | 236 parser.add_option('-p', '--profile', '--user-data-dir', type = 'str', |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
324 # We're done. Let the user know the results in an official manner. | 324 # We're done. Let the user know the results in an official manner. |
325 bad_revision = GetRevision(revlist[bad]) | 325 bad_revision = GetRevision(revlist[bad]) |
326 print('You are probably looking for build %d.' % bad_revision) | 326 print('You are probably looking for build %d.' % bad_revision) |
327 print('CHANGELOG URL:') | 327 print('CHANGELOG URL:') |
328 print(CHANGELOG_URL % (GetRevision(last_known_good_rev), bad_revision)) | 328 print(CHANGELOG_URL % (GetRevision(last_known_good_rev), bad_revision)) |
329 print('Built at revision:') | 329 print('Built at revision:') |
330 print(BUILD_VIEWVC_URL % bad_revision) | 330 print(BUILD_VIEWVC_URL % bad_revision) |
331 | 331 |
332 if __name__ == '__main__': | 332 if __name__ == '__main__': |
333 sys.exit(main()) | 333 sys.exit(main()) |
OLD | NEW |