def on_reply_publishing(user, reply, **kwargs): review_request = reply.review_request # skip review requests that were not pushed if not is_review_request_pushed(review_request): return bug_id = int(review_request.get_bug_list()[0]) b = Bugzilla(get_bugzilla_api_key(user)) url = get_reply_url(reply) comment = build_plaintext_review(reply, url, {"user": user}) b.post_comment(bug_id, comment)
def on_review_publishing(user, review, **kwargs): """Comment in the bug and potentially r+ or clear a review flag. Note that a reviewer *must* have editbugs to set an attachment flag on someone else's attachment (i.e. the standard BMO review process). TODO: Report lack-of-editbugs properly; see bug 1119065. """ review_request = review.review_request logger.info('Publishing review for user: %s review id: %s ' 'review request id: %s' % (user, review.id, review_request.id)) # skip review requests that were not pushed if not is_pushed(review_request): logger.info('Did not publish review: %s: for user: %d: review not ' 'pushed.' % (user, review.id)) return site = Site.objects.get_current() siteconfig = SiteConfiguration.objects.get_current() comment = build_plaintext_review(review, get_obj_url(review, site, siteconfig), {"user": user}) b = Bugzilla(get_bugzilla_api_key(user)) # TODO: Update all attachments in one call. This is not possible right # now because we have to potentially mix changing and creating flags. if is_parent(review_request): # Mirror the comment to the bug, unless it's a ship-it, in which # case throw an error. Ship-its are allowed only on child commits. if review.ship_it: raise ParentShipItError [b.post_comment(int(bug_id), comment) for bug_id in review_request.get_bug_list()] else: diff_url = '%sdiff/#index_header' % get_obj_url(review_request) bug_id = int(review_request.get_bug_list()[0]) if review.ship_it: commented = b.r_plus_attachment(bug_id, review.user.email, diff_url, comment) else: commented = b.cancel_review_request(bug_id, review.user.email, diff_url, comment) if comment and not commented: b.post_comment(bug_id, comment)
def on_reply_publishing(user, reply, **kwargs): review_request = reply.review_request logger.info('Posting bugzilla reply for review request %s' % (review_request.id)) # skip review requests that were not pushed if not is_pushed(review_request): return bug_id = int(review_request.get_bug_list()[0]) b = Bugzilla(get_bugzilla_api_key(user)) url = get_reply_url(reply) comment = build_plaintext_review(reply, url, {"user": user}) b.post_comment(bug_id, comment, get_diff_url(review_request), True)
def create(self, request, *args, **kwargs): ext = get_extension_manager().get_enabled_extension( 'mozreview.extension.MozReviewExtension') testing = ext.get_settings('autoland_testing', False) if not testing and not request.user.has_perm( 'mozreview.add_autolandeventlogentry'): return PERMISSION_DENIED try: fields = json.loads(request.body) for field_name in self.fields: assert (type( fields[field_name]) == self.fields[field_name]['type']) except (ValueError, IndexError, KeyError, AssertionError) as e: return INVALID_FORM_DATA, { 'error': '%s' % e, } try: autoland_request = AutolandRequest.objects.get( pk=fields['request_id']) except AutolandRequest.DoesNotExist: return DOES_NOT_EXIST rr = ReviewRequest.objects.get(pk=autoland_request.review_request_id) bz_comment = None if fields['landed']: autoland_request.repository_revision = fields['result'] autoland_request.save() # If we've landed to the "inbound" repository, we'll close the # review request automatically. landing_repo = rr.repository.extra_data.get( 'landing_repository_url') if autoland_request.repository_url == landing_repo: rr.close(ReviewRequest.SUBMITTED) AutolandEventLogEntry.objects.create( autoland_request_id=fields['request_id'], status=AutolandEventLogEntry.SERVED, details=fields['result']) elif not fields.get('error_msg') and fields.get('result'): AutolandEventLogEntry.objects.create( autoland_request_id=fields['request_id'], status=AutolandEventLogEntry.REQUESTED, details=fields['result']) else: AutolandEventLogEntry.objects.create( autoland_request_id=fields['request_id'], status=AutolandEventLogEntry.PROBLEM, error_msg=fields['error_msg']) # The error message contains context explaining that Autoland # failed, so no leading text is necessary. bz_comment = fields['error_msg'] lock_id = get_autoland_lock_id(rr.id, autoland_request.repository_url, autoland_request.push_revision) release_lock(lock_id) if bz_comment: bugzilla = Bugzilla(get_bugzilla_api_key(request.user)) bug_id = int(rr.get_bug_list()[0]) # Catch and log Bugzilla errors rather than bubbling them up, # since we don't want the Autoland server to continously # retry the update. try: bugzilla.post_comment(bug_id, bz_comment) except BugzillaError as e: logger.error('Failed to post comment to Bugzilla: %s' % e) return 200, {}
def on_review_publishing(user, review, **kwargs): """Comment in the bug and potentially r+ or clear a review flag. Note that a reviewer *must* have editbugs to set an attachment flag on someone else's attachment (i.e. the standard BMO review process). TODO: Report lack-of-editbugs properly; see bug 1119065. """ review_request = review.review_request logger.info('Publishing review for user: %s review id: %s ' 'review request id: %s' % (user, review.id, review_request.id)) # skip review requests that were not pushed if not is_pushed(review_request): logger.info('Did not publish review: %s: for user: %d: review not ' 'pushed.' % (user, review.id)) return site = Site.objects.get_current() siteconfig = SiteConfiguration.objects.get_current() comment = build_plaintext_review(review, get_obj_url(review, site, siteconfig), {"user": user}) b = Bugzilla(get_bugzilla_api_key(user)) if is_parent(review_request): # We only support raw comments on parent review requests to prevent # confusion. If the ship-it flag or the review flag was set, throw # an error. # Otherwise, mirror the comment over, associating it with the first # commit. if review.ship_it or review.extra_data.get(REVIEW_FLAG_KEY): raise ParentShipItError # TODO: If we ever allow multiple bugs in a single series, and we want # to continue to allow comments on parents, we'll have to pick one # child for each unique bug. first_child = list(gen_child_rrs(review_request))[0] b.post_comment(int(first_child.get_bug_list()[0]), comment, get_diff_url(first_child), False) else: diff_url = get_diff_url(review_request) bug_id = int(review_request.get_bug_list()[0]) commented = False flag = review.extra_data.get(REVIEW_FLAG_KEY) if flag is not None: commented = b.set_review_flag(bug_id, flag, review.user.email, diff_url, comment) else: # If for some reasons we don't have the flag set in extra_data, # fall back to ship_it logger.warning('Review flag not set on review %s, ' 'updating attachment based on ship_it' % review.id) if review.ship_it: commented = b.r_plus_attachment(bug_id, review.user.email, diff_url, comment) else: commented = b.cancel_review_request(bug_id, review.user.email, diff_url, comment) if comment and not commented: b.post_comment(bug_id, comment, diff_url, False)