Index: tools/bisect-builds.py |
=================================================================== |
--- tools/bisect-builds.py (revision 223471) |
+++ tools/bisect-builds.py (working copy) |
@@ -13,7 +13,8 @@ |
""" |
# The root URL for storage. |
-BASE_URL = 'http://commondatastorage.googleapis.com/chromium-browser-snapshots' |
+CHROMIUM_BASE_URL = 'http://commondatastorage.googleapis.com/chromium-browser-snapshots' |
+WEBKIT_BASE_URL = 'http://commondatastorage.googleapis.com/chromium-webkit-snapshots' |
# The root URL for official builds. |
OFFICIAL_BASE_URL = 'http://master.chrome.corp.google.com/official_builds' |
@@ -41,6 +42,7 @@ |
############################################################################### |
+import json |
import math |
import optparse |
import os |
@@ -60,10 +62,11 @@ |
class PathContext(object): |
"""A PathContext is used to carry the information used to construct URLs and |
paths when dealing with the storage server and archives.""" |
- def __init__(self, platform, good_revision, bad_revision, is_official, |
- is_aura): |
+ def __init__(self, base_url, platform, good_revision, bad_revision, |
+ is_official, is_aura): |
super(PathContext, self).__init__() |
# Store off the input parameters. |
+ self.base_url = base_url |
self.platform = platform # What's passed in to the '-a/--archive' option. |
self.good_revision = good_revision |
self.bad_revision = bad_revision |
@@ -127,8 +130,8 @@ |
marker_param = '' |
if marker: |
marker_param = '&marker=' + str(marker) |
- return BASE_URL + '/?delimiter=/&prefix=' + self._listing_platform_dir + \ |
- marker_param |
+ return self.base_url + '/?delimiter=/&prefix=' + \ |
+ self._listing_platform_dir + marker_param |
def GetDownloadURL(self, revision): |
"""Gets the download URL for a build archive of a specific revision.""" |
@@ -137,12 +140,12 @@ |
OFFICIAL_BASE_URL, revision, self._listing_platform_dir, |
self.archive_name) |
else: |
- return "%s/%s%s/%s" % ( |
- BASE_URL, self._listing_platform_dir, revision, self.archive_name) |
+ return "%s/%s%s/%s" % (self.base_url, self._listing_platform_dir, |
+ revision, self.archive_name) |
def GetLastChangeURL(self): |
"""Returns a URL to the LAST_CHANGE file.""" |
- return BASE_URL + '/' + self._listing_platform_dir + 'LAST_CHANGE' |
+ return self.base_url + '/' + self._listing_platform_dir + 'LAST_CHANGE' |
def GetLaunchPath(self): |
"""Returns a relative path (presumably from the archive extraction location) |
@@ -416,7 +419,8 @@ |
self.thread.join() |
-def Bisect(platform, |
+def Bisect(base_url, |
+ platform, |
official_builds, |
is_aura, |
good_rev=0, |
@@ -457,11 +461,10 @@ |
if not profile: |
profile = 'profile' |
- context = PathContext(platform, good_rev, bad_rev, official_builds, is_aura) |
+ context = PathContext(base_url, platform, good_rev, bad_rev, |
+ official_builds, is_aura) |
cwd = os.getcwd() |
- |
- |
print "Downloading list of known revisions..." |
_GetDownloadPath = lambda rev: os.path.join(cwd, |
'%s-%s' % (str(rev), context.archive_name)) |
@@ -605,16 +608,17 @@ |
return (revlist[minrev], revlist[maxrev]) |
-def GetBlinkRevisionForChromiumRevision(rev): |
- """Returns the blink revision that was in chromium's DEPS file at |
+def GetBlinkRevisionForChromiumRevision(self, rev): |
+ """Returns the blink revision that was in REVISIONS file at |
chromium revision |rev|.""" |
# . doesn't match newlines without re.DOTALL, so this is safe. |
- blink_re = re.compile(r'webkit_revision.:\D*(\d+)') |
- url = urllib.urlopen(DEPS_FILE % rev) |
- m = blink_re.search(url.read()) |
+ file_url = "%s/%s%d/REVISIONS" % (self.base_url, |
+ self._listing_platform_dir, rev) |
+ url = urllib.urlopen(file_url) |
+ data = json.loads(url.read()) |
url.close() |
- if m: |
- return int(m.group(1)) |
+ if 'webkit_revision' in data: |
+ return data['webkit_revision'] |
else: |
raise Exception('Could not get blink revision for cr rev %d' % rev) |
@@ -680,6 +684,8 @@ |
'Defaults to "%p %a". Note that any extra paths ' + |
'specified should be absolute.', |
default = '%p %a'); |
+ parser.add_option('-l', '--blink', action='store_true', |
+ help = 'Use Blink bisect instead of Chromium. ') |
parser.add_option('--aura', |
dest='aura', |
action='store_true', |
@@ -700,8 +706,14 @@ |
'and official builds.' |
return 1 |
+ if opts.blink: |
+ base_url = WEBKIT_BASE_URL |
+ else: |
+ base_url = CHROMIUM_BASE_URL |
+ |
# Create the context. Initialize 0 for the revisions as they are set below. |
- context = PathContext(opts.archive, 0, 0, opts.official_builds, opts.aura) |
+ context = PathContext(base_url, opts.archive, 0, 0, |
+ opts.official_builds, opts.aura) |
# Pick a starting point, try to get HEAD for this. |
if opts.bad: |
bad_rev = opts.bad |
@@ -730,13 +742,15 @@ |
return 1 |
(min_chromium_rev, max_chromium_rev) = Bisect( |
- opts.archive, opts.official_builds, opts.aura, good_rev, bad_rev, |
- opts.times, opts.command, args, opts.profile) |
+ base_url, opts.archive, opts.official_builds, opts.aura, good_rev, |
+ bad_rev, opts.times, opts.command, args, opts.profile) |
# Get corresponding blink revisions. |
try: |
- min_blink_rev = GetBlinkRevisionForChromiumRevision(min_chromium_rev) |
- max_blink_rev = GetBlinkRevisionForChromiumRevision(max_chromium_rev) |
+ min_blink_rev = GetBlinkRevisionForChromiumRevision(context, |
+ min_chromium_rev) |
+ max_blink_rev = GetBlinkRevisionForChromiumRevision(context, |
+ max_chromium_rev) |
except Exception, e: |
# Silently ignore the failure. |
min_blink_rev, max_blink_rev = 0, 0 |