| Index: reviewbot/handlers/policy_checklist/handler.py
|
| ===================================================================
|
| --- reviewbot/handlers/policy_checklist/handler.py (revision 221173)
|
| +++ reviewbot/handlers/policy_checklist/handler.py (working copy)
|
| @@ -1,94 +0,0 @@
|
| -# Copyright (c) 2013 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.
|
| -
|
| -"""Handler for chrome/app/policy/policy_templates.json
|
| -
|
| -This handler examines changes to the policy_templates.json file and posts
|
| -comments with checklists for the patch author and reviewer to go through to
|
| -avoid common pitfalls.
|
| -"""
|
| -
|
| -import os
|
| -
|
| -import jinja2
|
| -
|
| -import model.app_config
|
| -import util
|
| -import handlers.policy_checklist.parser
|
| -
|
| -
|
| -POLICY_TEMPLATES_FILE = 'chrome/app/policy/policy_templates.json'
|
| -MAX_INLINE_COMMENTS = 10
|
| -
|
| -
|
| -REVIEW_MESSAGE_TEMPLATE = 'review_message.txt'
|
| -ADDITION_COMMENT_TEMPLATE = 'addition_comment.txt'
|
| -MODIFICATION_COMMENT_TEMPLATE = 'modification_comment.txt'
|
| -
|
| -
|
| -JINJA_ENVIRONMENT = jinja2.Environment(
|
| - loader=jinja2.FileSystemLoader(os.path.dirname(__file__)))
|
| -
|
| -
|
| -def prepare_address_list(addr, email_list):
|
| - """Prepares |email_list| for use as rietveld query parameter.
|
| -
|
| - Canonicalizes the entries in |email_list|, removes any occurrences of |addr|,
|
| - joins the entries with commas and returns the result.
|
| - """
|
| - return ','.join([util.canonicalize_email(entry)
|
| - for entry in email_list if entry != addr])
|
| -
|
| -
|
| -def process(addr, message, review, rietveld):
|
| - """Handles reviews for chrome/app/policy/policy_templates.json.
|
| -
|
| - This looks at the patch to identify additions/modifications to policy
|
| - definitions and posts comments with a checklist intended for the author and
|
| - reviewer to go through in order to catch common mistakes.
|
| - """
|
| -
|
| - if POLICY_TEMPLATES_FILE not in review.latest_patchset.files:
|
| - return
|
| -
|
| - # Only process the change if the mail is directly to us or we haven't
|
| - # processed this review yet.
|
| - client_id = model.app_config.get().client_id
|
| - if (not addr in util.get_emails(getattr(message, 'to', '')) and
|
| - client_id in [m.sender for m in review.issue_data.messages]):
|
| - return
|
| -
|
| - # Don't process reverts.
|
| - if 'revert' in review.issue_data.description.lower():
|
| - return
|
| -
|
| - # Parse the patch, look at the chunks and generate inline comments.
|
| - chunks = handlers.policy_checklist.parser.parse(
|
| - review.latest_patchset.files[POLICY_TEMPLATES_FILE].patch.lines)
|
| - for chunk in chunks[0:MAX_INLINE_COMMENTS]:
|
| - if chunk.additions and not chunk.removals:
|
| - template = JINJA_ENVIRONMENT.get_template(ADDITION_COMMENT_TEMPLATE)
|
| - else:
|
| - template = JINJA_ENVIRONMENT.get_template(MODIFICATION_COMMENT_TEMPLATE)
|
| -
|
| - if chunk.comment_pos[1] is not None:
|
| - line, side = chunk.comment_pos[1], 'b'
|
| - elif chunk.comment_pos[0] is not None:
|
| - line, side = chunk.comment_pos[0], 'a'
|
| - else:
|
| - # No suitable position?
|
| - continue
|
| -
|
| - rietveld.add_inline_comment(
|
| - review.issue_id, review.latest_patchset.patchset,
|
| - review.latest_patchset.files[POLICY_TEMPLATES_FILE].id,
|
| - line, side, template.render(review=review, chunk=chunk))
|
| -
|
| - # Finally, post all inline comments.
|
| - if len(chunks) > 0:
|
| - template = JINJA_ENVIRONMENT.get_template(REVIEW_MESSAGE_TEMPLATE)
|
| - rietveld.publish_inline_comments(
|
| - review.issue_id, template.render(review=review),
|
| - prepare_address_list(addr, review.issue_data.reviewers),
|
| - prepare_address_list(addr, review.issue_data.cc))
|
|
|