Index: reviewbot/handlers/policy_checklist/handler.py |
=================================================================== |
--- reviewbot/handlers/policy_checklist/handler.py (revision 0) |
+++ reviewbot/handlers/policy_checklist/handler.py (revision 0) |
@@ -0,0 +1,81 @@ |
+# 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 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.post_comment(review.issue_id, template.render(review=review), True) |
Property changes on: reviewbot/handlers/policy_checklist/handler.py |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |