Index: commit-queue/verification/tree_status.py |
=================================================================== |
--- commit-queue/verification/tree_status.py (revision 249146) |
+++ commit-queue/verification/tree_status.py (working copy) |
@@ -1,86 +0,0 @@ |
-# coding=utf8 |
-# Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
-"""Postpone commits until the tree is open.""" |
- |
-import calendar |
-import json |
-import logging |
-import re |
-import ssl |
-import time |
-import urllib2 |
- |
-from verification import base |
- |
- |
-class TreeStatus(base.IVerifierStatus): |
- tree_status_url = unicode |
- issue = int |
- last_tree_status = unicode |
- |
- def get_state(self): |
- return base.SUCCEEDED |
- |
- def postpone(self): |
- self.last_tree_status = u'' |
- try: |
- logging.debug('Fetching tree status for %s' % self.tree_status_url) |
- now = time.time() |
- cutoff = now - 5 * 60 |
- url = self.tree_status_url + '/allstatus?format=json&endTime=%d' % cutoff |
- data = json.load(urllib2.urlopen(url)) |
- |
- # Convert datetime string to epoch. |
- for item in data: |
- # The time is returned in UTC. |
- x = time.strptime(item['date'].split('.', 1)[0], '%Y-%m-%d %H:%M:%S') |
- item['date'] = calendar.timegm(x) |
- |
- for item in sorted(data, key=lambda x: x['date'], reverse=True): |
- if item['general_state'] != 'open': |
- logging.warn( |
- 'Not committing CL %d because the tree was closed %ds ago', |
- self.issue, int(now - item['date'])) |
- self.last_tree_status = unicode(item['message']) |
- return True |
- if item['date'] < cutoff: |
- break |
- return False |
- except (ssl.SSLError, urllib2.URLError, IOError, ValueError): |
- logging.error('Failed to request tree status! %s' % url) |
- return True |
- |
- def why_not(self): |
- if self.last_tree_status: |
- return u'Tree is currently not open: %s' % self.last_tree_status |
- |
- |
-class AlwaysOpenTreeStatus(TreeStatus): |
- """Used when tree status does not need to be checked.""" |
- def postpone(self): |
- return False |
- |
- |
-class TreeStatusVerifier(base.Verifier): |
- """Checks the tree status before allowing a commit.""" |
- name = 'tree status' |
- |
- def __init__(self, tree_status_url): |
- super(TreeStatusVerifier, self).__init__() |
- self.tree_status_url = tree_status_url |
- |
- def verify(self, pending): |
- if re.search(r'(?im)^NOTREECHECKS=TRUE$', pending.description): |
- # Use a TreeStatus instance that always returns False for postpone(). |
- tree_status = AlwaysOpenTreeStatus() |
- else: |
- tree_status = TreeStatus( |
- tree_status_url=self.tree_status_url, issue=pending.issue) |
- |
- pending.verifications[self.name] = tree_status |
- |
- def update_status(self, queue): |
- pass |
- |