| Index: dashboard/dashboard/speed_releasing.py
|
| diff --git a/dashboard/dashboard/speed_releasing.py b/dashboard/dashboard/speed_releasing.py
|
| index f6a1fc67b8da706612a1914825a59040b57449d1..4199a1f5026e221f6c1359209e02d4370e7374ef 100644
|
| --- a/dashboard/dashboard/speed_releasing.py
|
| +++ b/dashboard/dashboard/speed_releasing.py
|
| @@ -15,28 +15,20 @@ from dashboard.models import graph_data
|
| from dashboard.models import table_config
|
|
|
| CLANK_MILESTONES = {
|
| - 56: 1479546161,
|
| - 57: 1485025126,
|
| + 54: (1473196450, 1475824394),
|
| + 55: (1475841673, 1479536199),
|
| + 56: (1479546161, 1485025126),
|
| + 57: (1485025126, None),
|
| }
|
|
|
| -CHROUMIUM_MILESTONES = {
|
| - 44: 330231,
|
| - 45: 338390,
|
| - 46: 344925,
|
| - 47: 352221,
|
| - 48: 359700,
|
| - 49: 370022,
|
| - 50: 378097,
|
| - 51: 388729,
|
| - 52: 403382,
|
| - 53: 413836,
|
| - 54: 416640,
|
| - 55: 433391,
|
| - 56: 433400,
|
| - 57: 445288,
|
| +CHROMIUM_MILESTONES = {
|
| + 54: (416640, 423768),
|
| + 55: (433391, 433400),
|
| + 56: (433400, 445288),
|
| + 57: (445288, None),
|
| }
|
|
|
| -CURRENT_MILESTONE = max(CHROUMIUM_MILESTONES.keys())
|
| +CURRENT_MILESTONE = max(CHROMIUM_MILESTONES.keys())
|
|
|
|
|
| class SpeedReleasingHandler(request_handler.RequestHandler):
|
| @@ -74,13 +66,23 @@ class SpeedReleasingHandler(request_handler.RequestHandler):
|
| master_bot_pairs, masters = _GetMasterBotPairs(table_entity.bots)
|
| rev_a = self.request.get('revA')
|
| rev_b = self.request.get('revB')
|
| + milestone_param = self.request.get('m')
|
| +
|
| + _UpdateNewestRev(master_bot_pairs, table_entity.tests, masters)
|
| + if milestone_param:
|
| + if int(milestone_param) not in CHROMIUM_MILESTONES:
|
| + self.response.out.write(json.dumps({
|
| + 'error': 'No data for that milestone.'}))
|
| + return
|
| + rev_a, rev_b = _GetMilestone(masters, milestone_param)
|
| if not rev_a or not rev_b:
|
| - rev_a, rev_b = _GetDefaultRev(rev_a, rev_b, masters, master_bot_pairs,
|
| - table_entity.tests)
|
| + rev_a, rev_b = _GetDefaultRev(rev_a, rev_b, masters)
|
| +
|
| rev_a, rev_b = _CheckRevisions(rev_a, rev_b)
|
| display_a = _GetDisplayRev(master_bot_pairs, table_entity.tests, rev_a)
|
| display_b = _GetDisplayRev(master_bot_pairs, table_entity.tests, rev_b)
|
| revisions = [rev_b, rev_a] # In reverse intentionally.
|
| +
|
| self.response.out.write(json.dumps({
|
| 'xsrf_token': values['xsrf_token'],
|
| 'table_bots': master_bot_pairs,
|
| @@ -92,7 +94,9 @@ class SpeedReleasingHandler(request_handler.RequestHandler):
|
| 'units': _GetTestToUnitsMap(master_bot_pairs, table_entity.tests),
|
| 'revisions': revisions,
|
| 'categories': _GetCategoryCounts(json.loads(table_entity.table_layout)),
|
| - 'display_revisions': [display_b, display_a] # Similar to revisions.
|
| + 'display_revisions': [display_b, display_a], # Similar to revisions.
|
| + 'milestones': _GetMilestoneLabels(masters, rev_a),
|
| + 'current_milestone': CURRENT_MILESTONE,
|
| }))
|
|
|
| def _OutputHomePageJSON(self):
|
| @@ -169,21 +173,22 @@ def _GetRow(bot, test, rev):
|
| else:
|
| return 0
|
|
|
| -def _GetMilestone(masters, num_from_end=0):
|
| - """Returns the specified milestone.
|
| +def _GetMilestone(masters, milestone_num):
|
| + """Returns the specified milestone."""
|
| + milestone_num = int(milestone_num)
|
| + if 'ClankInternal' in masters:
|
| + return CLANK_MILESTONES[milestone_num]
|
| + else:
|
| + return CHROMIUM_MILESTONES[milestone_num]
|
|
|
| - The last milestone is 0 from the end. The 2nd most recent milestone is 1
|
| - from the end.
|
| - """
|
| - end_position = CURRENT_MILESTONE - num_from_end
|
| +def _UpdateNewestRev(bots, tests, masters):
|
| if 'ClankInternal' in masters:
|
| - return CLANK_MILESTONES[end_position]
|
| + milestone_dict = CLANK_MILESTONES
|
| else:
|
| - return CHROUMIUM_MILESTONES[end_position]
|
| + milestone_dict = CHROMIUM_MILESTONES
|
|
|
| -def _GetNewestRev(bot, test, masters):
|
| - if bot and test:
|
| - test_path = bot[0] + '/' + test[0]
|
| + if bots and tests:
|
| + test_path = bots[0] + '/' + tests[0]
|
| test_key = utils.TestKey(test_path)
|
| query = graph_data.Row.query()
|
| query = query.filter(
|
| @@ -191,20 +196,12 @@ def _GetNewestRev(bot, test, masters):
|
| query = query.order(-graph_data.Row.revision)
|
| row = query.fetch(limit=1)
|
| if len(row):
|
| - return row[0].revision
|
| - return _GetMilestone(masters, 0) # Return most recent milestone.
|
| -
|
| -def _GetMilestoneRevAfter(rev, masters, bots, tests):
|
| - """If only one Rev is given, defaults to Rev - beginning of next milestone."""
|
| - if 'ClankInternal' in masters:
|
| - milestone_dict = CLANK_MILESTONES
|
| - else:
|
| - milestone_dict = CHROUMIUM_MILESTONES
|
| - #pylint: disable=unused-variable
|
| - for key, value in milestone_dict.iteritems():
|
| - if value > int(rev):
|
| - return value
|
| - return _GetNewestRev(bots, tests, masters)
|
| + milestone_dict[CURRENT_MILESTONE] = (
|
| + milestone_dict[CURRENT_MILESTONE][0], row[0].revision)
|
| + else:
|
| + milestone_dict[CURRENT_MILESTONE] = (
|
| + milestone_dict[CURRENT_MILESTONE][0],
|
| + milestone_dict[CURRENT_MILESTONE][0])
|
|
|
| def _GetDisplayRev(bots, tests, rev):
|
| """Creates a user friendly commit position to display.
|
| @@ -222,16 +219,54 @@ def _GetDisplayRev(bots, tests, rev):
|
| return row.r_commit_pos + '-' + getattr(row, row.a_default_rev)[:3]
|
| return rev
|
|
|
| -def _GetDefaultRev(rev_a, rev_b, masters, bots, tests):
|
| +def _GetEndOfMilestone(rev, masters):
|
| + """Finds the end of the milestone that 'rev' is in.
|
| +
|
| + Check that 'rev' is between [beginning, end) of the tuple. In case an end
|
| + 'rev' is passed in, return corresponding beginning rev. But since revs can
|
| + double as end and beginning, favor returning corresponding end rev if 'rev'
|
| + is a beginning rev.
|
| + """
|
| + beginning_rev = 0
|
| + if 'ClankInternal' in masters:
|
| + milestone_dict = CLANK_MILESTONES
|
| + else:
|
| + milestone_dict = CHROMIUM_MILESTONES
|
| + for _, value_tuple in milestone_dict.iteritems():
|
| + if value_tuple[0] <= int(rev) < value_tuple[1]: # 'rev' is a beginning rev.
|
| + return value_tuple[1] # Favor by returning here.
|
| + if value_tuple[1] == int(rev): # 'rev' is an end rev.
|
| + beginning_rev = value_tuple[0]
|
| + if beginning_rev:
|
| + return beginning_rev
|
| + return milestone_dict[CURRENT_MILESTONE][1]
|
| +
|
| +def _GetDefaultRev(rev_a, rev_b, masters):
|
| """If one/both of the revisions are None, change accordingly.
|
|
|
| If both are None, return most recent milestone, present.
|
| If one is None, return the other, present.
|
| """
|
| if not rev_a and not rev_b:
|
| - return _GetMilestone(masters, 0), _GetNewestRev(bots, tests, masters)
|
| - return ((rev_a or rev_b),
|
| - _GetMilestoneRevAfter((rev_a or rev_b), masters, bots, tests))
|
| + return _GetMilestone(masters, CURRENT_MILESTONE)
|
| + return (rev_a or rev_b), _GetEndOfMilestone((rev_a or rev_b), masters)
|
| +
|
| +def _GetMilestoneLabels(masters, rev_a):
|
| + """Get matching milestone.
|
| +
|
| + Return the milestone and milestone + 1 for the matching range that rev_a falls
|
| + in. If rev_a is an end rev, that means that rev_a == rev_b, so return 0, 0
|
| + because there are no milestones between two equal revisions.
|
| + If rev_a falls outside the given boundaries, return 0, 0.
|
| + """
|
| + if 'ClankInternal' in masters:
|
| + milestone_dict = CLANK_MILESTONES
|
| + else:
|
| + milestone_dict = CHROMIUM_MILESTONES
|
| + for key, value_tuple in milestone_dict.iteritems():
|
| + if value_tuple[0] <= rev_a < value_tuple[1]:
|
| + return [key, key + 1]
|
| + return 0, 0
|
|
|
| def _CheckRevisions(rev_a, rev_b):
|
| """Checks to ensure the revisions are in the correct order."""
|
|
|