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

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

Issue 463243002: bisect-builds.py: Minor bug fixes for blink bisect and better error handling. (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 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 self.githash_svn_dict.update(new_dict) 314 self.githash_svn_dict.update(new_dict)
315 return revisions 315 return revisions
316 316
317 def _GetSVNRevisionFromGitHashWithoutGitCheckout(self, git_sha1, depot): 317 def _GetSVNRevisionFromGitHashWithoutGitCheckout(self, git_sha1, depot):
318 json_url = GITHASH_TO_SVN_URL[depot] % git_sha1 318 json_url = GITHASH_TO_SVN_URL[depot] % git_sha1
319 try: 319 try:
320 response = urllib.urlopen(json_url) 320 response = urllib.urlopen(json_url)
321 except urllib.HTTPError as error: 321 except urllib.HTTPError as error:
322 msg = 'HTTP Error %d for %s' % (error.getcode(), git_sha1) 322 msg = 'HTTP Error %d for %s' % (error.getcode(), git_sha1)
323 return None 323 return None
324 data = json.loads(response.read()[4:]) 324 try:
325 response_data = response.read()
326 data = json.loads(response_data[4:])
327 except ValueError:
328 print 'Response string for %s is "%s"' % (json_url, response_data)
329 raise ValueError
325 if 'message' in data: 330 if 'message' in data:
326 message = data['message'].split('\n') 331 message = data['message'].split('\n')
327 message = [line for line in message if line.strip()] 332 message = [line for line in message if line.strip()]
328 search_pattern = re.compile(SEARCH_PATTERN[depot]) 333 search_pattern = re.compile(SEARCH_PATTERN[depot])
329 result = search_pattern.search(message[len(message)-1]) 334 result = search_pattern.search(message[len(message)-1])
330 if result: 335 if result:
331 return result.group(1) 336 return result.group(1)
332 print 'Failed to get svn revision number for %s' % git_sha1 337 print 'Failed to get svn revision number for %s' % git_sha1
333 raise ValueError 338 raise ValueError
334 339
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after
835 for f in [_GetDownloadPath(revlist[down_pivot]), 840 for f in [_GetDownloadPath(revlist[down_pivot]),
836 _GetDownloadPath(revlist[up_pivot])]: 841 _GetDownloadPath(revlist[up_pivot])]:
837 try: 842 try:
838 os.unlink(f) 843 os.unlink(f)
839 except OSError: 844 except OSError:
840 pass 845 pass
841 sys.exit(0) 846 sys.exit(0)
842 847
843 rev = revlist[pivot] 848 rev = revlist[pivot]
844 849
845 return (revlist[minrev], revlist[maxrev]) 850 return (revlist[minrev], revlist[maxrev], context)
846 851
847 852
848 def GetBlinkDEPSRevisionForChromiumRevision(rev): 853 def GetBlinkDEPSRevisionForChromiumRevision(rev):
849 """Returns the blink revision that was in REVISIONS file at 854 """Returns the blink revision that was in REVISIONS file at
850 chromium revision |rev|.""" 855 chromium revision |rev|."""
851 # . doesn't match newlines without re.DOTALL, so this is safe. 856 # . doesn't match newlines without re.DOTALL, so this is safe.
852 blink_re = re.compile(r'webkit_revision\D*(\d+)') 857 blink_re = re.compile(r'webkit_revision\D*(\d+)')
853 url = urllib.urlopen(DEPS_FILE % rev) 858 url = urllib.urlopen(DEPS_FILE % rev)
854 m = blink_re.search(url.read()) 859 m = blink_re.search(url.read())
855 url.close() 860 url.close()
856 if m: 861 if m:
857 return int(m.group(1)) 862 return int(m.group(1))
858 else: 863 else:
859 raise Exception('Could not get Blink revision for Chromium rev %d' % rev) 864 raise Exception('Could not get Blink revision for Chromium rev %d' % rev)
860 865
861 866
862 def GetBlinkRevisionForChromiumRevision(self, rev): 867 def GetBlinkRevisionForChromiumRevision(self, rev):
Robert Sesek 2014/08/12 21:41:24 Rename self -> context
pshenoy 2014/08/13 18:13:41 Done.
863 """Returns the blink revision that was in REVISIONS file at 868 """Returns the blink revision that was in REVISIONS file at
864 chromium revision |rev|.""" 869 chromium revision |rev|."""
865 def _IsRevisionNumber(revision): 870 def _IsRevisionNumber(revision):
866 if isinstance(revision, int): 871 if isinstance(revision, int):
867 return True 872 return True
868 else: 873 else:
869 return revision.isdigit() 874 return revision.isdigit()
870 if str(rev) in self.githash_svn_dict: 875 if str(rev) in self.githash_svn_dict:
871 rev = self.githash_svn_dict[str(rev)] 876 rev = self.githash_svn_dict[str(rev)]
872 file_url = '%s/%s%s/REVISIONS' % (self.base_url, 877 file_url = '%s/%s%s/REVISIONS' % (self.base_url,
873 self._listing_platform_dir, rev) 878 self._listing_platform_dir, rev)
874 url = urllib.urlopen(file_url) 879 url = urllib.urlopen(file_url)
875 data = json.loads(url.read()) 880 try:
881 response = url.read()
882 data = json.loads(response)
883 except ValueError:
884 print 'Response from %s: "%s"' % (file_url, response)
885 raise ValueError
876 url.close() 886 url.close()
877 if 'webkit_revision' in data: 887 if 'webkit_revision' in data:
878 blink_rev = data['webkit_revision'] 888 blink_rev = data['webkit_revision']
879 if not _IsRevisionNumber(blink_rev): 889 if not _IsRevisionNumber(blink_rev):
880 blink_rev = self.GetSVNRevisionFromGitHash(blink_rev, 'blink') 890 blink_rev = int(self.GetSVNRevisionFromGitHash(blink_rev, 'blink'))
881 return blink_rev 891 return blink_rev
882 else: 892 else:
883 raise Exception('Could not get blink revision for cr rev %d' % rev) 893 raise Exception('Could not get blink revision for cr rev %d' % rev)
884 894
885 895
886 def FixChromiumRevForBlink(revisions_final, revisions, self, rev): 896 def FixChromiumRevForBlink(revisions_final, revisions, self, rev):
887 """Returns the chromium revision that has the correct blink revision 897 """Returns the chromium revision that has the correct blink revision
888 for blink bisect, DEPS and REVISIONS file might not match since 898 for blink bisect, DEPS and REVISIONS file might not match since
889 blink snapshots point to tip of tree blink. 899 blink snapshots point to tip of tree blink.
890 Note: The revisions_final variable might get modified to include 900 Note: The revisions_final variable might get modified to include
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
1082 print('Number of times to run (%d) must be greater than or equal to 1.' % 1092 print('Number of times to run (%d) must be greater than or equal to 1.' %
1083 opts.times) 1093 opts.times)
1084 parser.print_help() 1094 parser.print_help()
1085 return 1 1095 return 1
1086 1096
1087 if opts.asan: 1097 if opts.asan:
1088 evaluator = IsGoodASANBuild 1098 evaluator = IsGoodASANBuild
1089 else: 1099 else:
1090 evaluator = AskIsGoodBuild 1100 evaluator = AskIsGoodBuild
1091 1101
1092 (min_chromium_rev, max_chromium_rev) = Bisect( 1102 (min_chromium_rev, max_chromium_rev, context) = Bisect(
Robert Sesek 2014/08/12 20:50:11 Why do you need to return context if you're not us
pshenoy 2014/08/12 21:05:06 'context' is passed in GetBlinkRevisionForChromium
Robert Sesek 2014/08/12 21:41:24 Ah, makes sense. Why don't we switch from passing
pshenoy 2014/08/13 18:13:41 Done.
1093 base_url, opts.archive, opts.official_builds, opts.aura, opts.asan, 1103 base_url, opts.archive, opts.official_builds, opts.aura, opts.asan,
1094 opts.use_local_repo, good_rev, bad_rev, opts.times, opts.command, 1104 opts.use_local_repo, good_rev, bad_rev, opts.times, opts.command,
1095 args, opts.profile, opts.flash_path, opts.pdf_path, 1105 args, opts.profile, opts.flash_path, opts.pdf_path,
1096 not opts.not_interactive, evaluator) 1106 not opts.not_interactive, evaluator)
1097 1107
1098 # Get corresponding blink revisions. 1108 # Get corresponding blink revisions.
1099 try: 1109 try:
1100 min_blink_rev = GetBlinkRevisionForChromiumRevision(context, 1110 min_blink_rev = GetBlinkRevisionForChromiumRevision(context,
1101 min_chromium_rev) 1111 min_chromium_rev)
1102 max_blink_rev = GetBlinkRevisionForChromiumRevision(context, 1112 max_blink_rev = GetBlinkRevisionForChromiumRevision(context,
(...skipping 26 matching lines...) Expand all
1129 1139
1130 print 'CHANGELOG URL:' 1140 print 'CHANGELOG URL:'
1131 if opts.official_builds: 1141 if opts.official_builds:
1132 print OFFICIAL_CHANGELOG_URL % (min_chromium_rev, max_chromium_rev) 1142 print OFFICIAL_CHANGELOG_URL % (min_chromium_rev, max_chromium_rev)
1133 else: 1143 else:
1134 print ' ' + CHANGELOG_URL % (min_chromium_rev, max_chromium_rev) 1144 print ' ' + CHANGELOG_URL % (min_chromium_rev, max_chromium_rev)
1135 1145
1136 1146
1137 if __name__ == '__main__': 1147 if __name__ == '__main__':
1138 sys.exit(main()) 1148 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