mozreview: show review flag in the commits table (
bug 1197879) r?smacleod
MozReview-Commit-ID: IStWatbqdnq
--- a/hgext/reviewboard/tests/test-review-request-summary.t
+++ b/hgext/reviewboard/tests/test-review-request-summary.t
@@ -64,16 +64,17 @@
commit: 98467d80785ec84dd871f213c167ed704a6d974d
submitter: default+5
issue_open_count: 0
status: pending
reviewers:
- reviewer
reviewers_status:
reviewer:
+ review_flag: r?
ship_it: false
- summary: Bug 1 - Foo 2
id: 3
commit: 3a446ae4382006c43cdfa5aa33c494f582736f35
submitter: default+5
issue_open_count: 0
status: pending
reviewers: []
@@ -110,16 +111,17 @@ Opening an issue should be reflected in
commit: 98467d80785ec84dd871f213c167ed704a6d974d
submitter: default+5
issue_open_count: 1
status: pending
reviewers:
- reviewer
reviewers_status:
reviewer:
+ review_flag: r?
ship_it: false
- summary: Bug 1 - Foo 2
id: 3
commit: 3a446ae4382006c43cdfa5aa33c494f582736f35
submitter: default+5
issue_open_count: 0
status: pending
reviewers: []
@@ -145,16 +147,17 @@ Resolving an issue should decrement the
commit: 98467d80785ec84dd871f213c167ed704a6d974d
submitter: default+5
issue_open_count: 0
status: pending
reviewers:
- reviewer
reviewers_status:
reviewer:
+ review_flag: r?
ship_it: false
- summary: Bug 1 - Foo 2
id: 3
commit: 3a446ae4382006c43cdfa5aa33c494f582736f35
submitter: default+5
issue_open_count: 0
status: pending
reviewers: []
@@ -181,16 +184,17 @@ Giving a ship-it should result in a chan
commit: 98467d80785ec84dd871f213c167ed704a6d974d
submitter: default+5
issue_open_count: 0
status: pending
reviewers:
- reviewer
reviewers_status:
reviewer:
+ review_flag: r+
ship_it: true
- summary: Bug 1 - Foo 2
id: 3
commit: 3a446ae4382006c43cdfa5aa33c494f582736f35
submitter: default+5
issue_open_count: 0
status: pending
reviewers: []
@@ -217,16 +221,17 @@ Verify we can also get the summaries by
commit: 98467d80785ec84dd871f213c167ed704a6d974d
submitter: default+5
issue_open_count: 0
status: submitted
reviewers:
- reviewer
reviewers_status:
reviewer:
+ review_flag: r+
ship_it: true
- summary: Bug 1 - Foo 2
id: 3
commit: 3a446ae4382006c43cdfa5aa33c494f582736f35
submitter: default+5
issue_open_count: 0
status: pending
reviewers: []
--- a/pylib/mozreview/mozreview/review_helpers.py
+++ b/pylib/mozreview/mozreview/review_helpers.py
@@ -1,16 +1,17 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
from __future__ import absolute_import, unicode_literals
from reviewboard.reviews.models import ReviewRequestDraft
+from mozreview.extra_data import REVIEW_FLAG_KEY
from mozreview.models import get_profile
def gen_latest_reviews(review_request):
"""Generate a series of relevant reviews.
Generates the set of reviews for a review request where there is
only a single review for each user and it is that users most
@@ -73,31 +74,39 @@ def has_l3_shipit(review_request):
if get_profile(review.user).has_scm_ldap_group('scm_level_3'):
return True
return False
def get_reviewers_status(review_request, reviewers=None):
"""Returns the latest review status for each reviewer."""
+
+ # Don't show any status on drafts.
+ if type(review_request) == ReviewRequestDraft:
+ return {}
+
if not reviewers:
reviewers = review_request.target_people.all()
reviewers_status = dict()
for r in reviewers:
- reviewers_status[r.username] = {'ship_it': False}
-
- # Don't show any status on drafts.
- if type(review_request) == ReviewRequestDraft:
- return reviewers_status
+ # The initial state is r?
+ reviewers_status[r.username] = {
+ 'ship_it': False,
+ 'review_flag': 'r?',
+ }
for review in gen_latest_reviews(review_request):
-
- if review.user.username in reviewers_status:
- reviewers_status[review.user.username]['ship_it'] = review.ship_it
+ review_flag = review.extra_data.get(REVIEW_FLAG_KEY)
+ user = review.user.username
+ if user in reviewers_status:
+ reviewers_status[user]['ship_it'] = review.ship_it
+ if review_flag:
+ reviewers_status[user]['review_flag'] = review_flag
return reviewers_status
def has_shipit_carryforward(review_request):
"""Return whether the review request has a carried forward ship-it
A ship-it is considered carried forward if the commit for which it was
--- a/pylib/mozreview/mozreview/static/mozreview/css/commits.less
+++ b/pylib/mozreview/mozreview/static/mozreview/css/commits.less
@@ -80,16 +80,31 @@
min-height: 10px;
&.reviewer-ship-it {
background-color: @approval-bg;
border: 1px solid @approval-border-color;
padding: 1px 5px;
.border-radius(2px);
}
+ &.review-pending::after {
+ content: " (r?)";
+ }
+ &.review-granted::after {
+ content: " (r+)";
+ }
+ &.review-denied::after {
+ content: " (r-)";
+ }
+ &.review-cleared{
+ color: grey;
+ }
+ &.review-cleared::after {
+ content: " (r? cleared)";
+ }
}
}
}
& > tbody > tr {
background-color: #FFFFFF;
}
& > tbody > tr[current="true"],
--- a/pylib/mozreview/mozreview/templates/mozreview/commits.html
+++ b/pylib/mozreview/mozreview/templates/mozreview/commits.html
@@ -53,17 +53,17 @@ This is the template for the "Commits" l
{% comment "TODO: show this column when the commit author will be available" %}
<td>{{ child_details.submitter }}</td>
{% endcomment %}
<td class="reviewers">
<span class="mozreview-child-reviewer-list"
data-id="{{child_details.get_review_request.id}}">
{% for reviewer, status in child_details|reviewers_status %}
{% if not forloop.first %}, {% endif %}
- <span class="reviewer-name{% if status.ship_it %} reviewer-ship-it{% endif %}">{{ reviewer }}</span>
+ <span class="reviewer-name{% if status.ship_it %} reviewer-ship-it{% endif %} {{status.review_flag|review_flag_class}}">{{ reviewer }}</span>
{% endfor %}
</span>
</td>
<td class="status">
{% if child_details.get_review_request.issue_open_count > 0 %}
<a class="issue-count" href="{{child_details.get_review_request.get_absolute_url}}#issue-summary" title="{{child_details.get_review_request.issue_open_count}} open issues">
<span class="issue-icon">!</span>{{child_details.get_review_request.issue_open_count}}
</a>
--- a/pylib/mozreview/mozreview/templatetags/mozreview.py
+++ b/pylib/mozreview/mozreview/templatetags/mozreview.py
@@ -113,8 +113,19 @@ def reviewers_status(review_request):
@register.filter()
def userid_to_user(user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return 'Unknown user'
+
+
+@register.filter()
+def review_flag_class(review_flag):
+ reviewer_status_class_map = {
+ 'r?': 'review-pending',
+ 'r+': 'review-granted',
+ 'r-': 'review-denied',
+ ' ': 'review-cleared'
+ }
+ return reviewer_status_class_map.get(review_flag)