Skip to content

Commit e9c64f4

Browse files
Distinguish official vs non-official reviews, add tool tips, and upgr… (#31924)
This Pull Request is a follow up to #31886: 1. Adds a UI indicator between official (green) and unofficial (grey) approved pull requests on the Pull Request page (as suggested by @kdumontnu ) 2. Adds tooltips adding clarity to the type and status of a review on the Pull Request page (as suggested by @kdumontnu) 3. Updates text adding more clarity to required approvals (as suggested by @kdumontnu) 4. Updates text on the branch settings page explaining what branch approval limitations (as suggested by @yp05327) Official approval: <img width="376" alt="Screenshot 2024-08-26 at 1 03 52 PM" src="https://github.com/user-attachments/assets/500f083d-bfc0-45c5-82b7-b98e20495696"> Unofficial approval: <img width="442" alt="Screenshot 2024-08-26 at 12 53 15 PM" src="https://github.com/user-attachments/assets/e8c565ff-5886-4ce1-8b79-a0fa26c282f7"> Rejected approval: <img width="452" alt="Screenshot 2024-08-26 at 12 53 06 PM" src="https://github.com/user-attachments/assets/aebc0e2f-7052-4dea-8098-7caa0db86617"> Stale approval: <img width="546" alt="Screenshot 2024-08-26 at 1 07 59 PM" src="https://github.com/user-attachments/assets/da599ff3-e35c-4fa3-8141-ed80b738dd77"> Requested review tooltip: <img width="434" alt="Screenshot 2024-08-26 at 12 53 22 PM" src="https://github.com/user-attachments/assets/460d163e-8724-43b6-8760-34b285da8fe2"> Updated text for approvals: <img width="991" alt="Screenshot 2024-08-26 at 12 54 00 PM" src="https://github.com/user-attachments/assets/ab3ff012-9742-4c1b-933d-21addcb89f2c"> Updated text for allowlisted/whitelisted approvals: <img width="990" alt="Screenshot 2024-08-26 at 1 01 40 PM" src="https://github.com/user-attachments/assets/1a5bae61-d9e0-4d96-b86f-92610b0940d1"> Protected branch settings text: <img width="1022" alt="Screenshot 2024-08-26 at 1 01 14 PM" src="https://github.com/user-attachments/assets/892ce208-e1c2-41f7-8fec-46d5a0e7e776"> Comments list: <img width="1048" alt="Screenshot 2024-08-28 at 9 25 31 AM" src="https://github.com/user-attachments/assets/9c5c00c5-06cf-43b3-b413-4f7f673609b2"> --------- Co-authored-by: Kyle D. <kdumontnu@gmail.com>
1 parent bf7ae04 commit e9c64f4

File tree

6 files changed

+47
-6
lines changed

6 files changed

+47
-6
lines changed

models/issues/review.go

+25
Original file line numberDiff line numberDiff line change
@@ -214,9 +214,13 @@ func (r *Review) LoadAttributes(ctx context.Context) (err error) {
214214
return err
215215
}
216216

217+
// HTMLTypeColorName returns the color used in the ui indicating the review
217218
func (r *Review) HTMLTypeColorName() string {
218219
switch r.Type {
219220
case ReviewTypeApprove:
221+
if !r.Official {
222+
return "grey"
223+
}
220224
if r.Stale {
221225
return "yellow"
222226
}
@@ -231,6 +235,27 @@ func (r *Review) HTMLTypeColorName() string {
231235
return "grey"
232236
}
233237

238+
// TooltipContent returns the locale string describing the review type
239+
func (r *Review) TooltipContent() string {
240+
switch r.Type {
241+
case ReviewTypeApprove:
242+
if r.Stale {
243+
return "repo.issues.review.stale"
244+
}
245+
if !r.Official {
246+
return "repo.issues.review.unofficial"
247+
}
248+
return "repo.issues.review.official"
249+
case ReviewTypeComment:
250+
return "repo.issues.review.comment"
251+
case ReviewTypeReject:
252+
return "repo.issues.review.rejected"
253+
case ReviewTypeRequest:
254+
return "repo.issues.review.requested"
255+
}
256+
return ""
257+
}
258+
234259
// GetReviewByID returns the review by the given ID
235260
func GetReviewByID(ctx context.Context, id int64) (*Review, error) {
236261
review := new(Review)

options/locale/locale_en-US.ini

+9-2
Original file line numberDiff line numberDiff line change
@@ -1752,6 +1752,12 @@ issues.review.hide_resolved = Hide resolved
17521752
issues.review.resolve_conversation = Resolve conversation
17531753
issues.review.un_resolve_conversation = Unresolve conversation
17541754
issues.review.resolved_by = marked this conversation as resolved
1755+
issues.review.comment = Comment
1756+
issues.review.official = Approved
1757+
issues.review.requested = Review pending
1758+
issues.review.rejected = Changes requested
1759+
issues.review.stale = Updated since approval
1760+
issues.review.unofficial = Uncounted approval
17551761
issues.assignee.error = Not all assignees was added due to an unexpected error.
17561762
issues.reference_issue.body = Body
17571763
issues.content_history.deleted = deleted
@@ -1825,7 +1831,8 @@ pulls.is_empty = "The changes on this branch are already on the target branch. T
18251831
pulls.required_status_check_failed = Some required checks were not successful.
18261832
pulls.required_status_check_missing = Some required checks are missing.
18271833
pulls.required_status_check_administrator = As an administrator, you may still merge this pull request.
1828-
pulls.blocked_by_approvals = "This pull request doesn't have enough approvals yet. %d of %d approvals granted."
1834+
pulls.blocked_by_approvals = "This pull request doesn't have enough required approvals yet. %d of %d official approvals granted."
1835+
pulls.blocked_by_approvals_whitelisted = "This pull request doesn't have enough required approvals yet. %d of %d approvals granted from users or teams on the allowlist."
18291836
pulls.blocked_by_rejection = "This pull request has changes requested by an official reviewer."
18301837
pulls.blocked_by_official_review_requests = "This pull request has official review requests."
18311838
pulls.blocked_by_outdated_branch = "This pull request is blocked because it's outdated."
@@ -2413,7 +2420,7 @@ settings.protect_status_check_matched = Matched
24132420
settings.protect_invalid_status_check_pattern = Invalid status check pattern: "%s".
24142421
settings.protect_no_valid_status_check_patterns = No valid status check patterns.
24152422
settings.protect_required_approvals = Required approvals:
2416-
settings.protect_required_approvals_desc = Allow only to merge pull request with enough positive reviews.
2423+
settings.protect_required_approvals_desc = Allow only to merge pull request with enough required approvals. Required approvals are either from users or teams who are on the allowlist or anyone with write access.
24172424
settings.protect_approvals_whitelist_enabled = Restrict approvals to allowlisted users or teams
24182425
settings.protect_approvals_whitelist_enabled_desc = Only reviews from allowlisted users or teams will count to the required approvals. Without approval allowlist, reviews from anyone with write access count to the required approvals.
24192426
settings.protect_approvals_whitelist_users = Allowlisted reviewers:

routers/web/repo/issue.go

+1
Original file line numberDiff line numberDiff line change
@@ -1940,6 +1940,7 @@ func ViewIssue(ctx *context.Context) {
19401940
ctx.Data["ChangedProtectedFiles"] = pull.ChangedProtectedFiles
19411941
ctx.Data["IsBlockedByChangedProtectedFiles"] = len(pull.ChangedProtectedFiles) != 0
19421942
ctx.Data["ChangedProtectedFilesNum"] = len(pull.ChangedProtectedFiles)
1943+
ctx.Data["RequireApprovalsWhitelist"] = pb.EnableApprovalsWhitelist
19431944
}
19441945
ctx.Data["WillSign"] = false
19451946
if ctx.Doer != nil {

templates/repo/issue/view_content/comments.tmpl

+1-1
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@
380380
{{ctx.AvatarUtils.Avatar .Poster 40}}
381381
</a>
382382
{{end}}
383-
<span class="badge{{if eq $reviewType 1}} tw-bg-green tw-text-white{{else if eq $reviewType 3}} tw-bg-red tw-text-white{{end}}">
383+
<span class="badge tw-text-white{{if eq $reviewType 1}}{{if .Review.Official}} tw-bg-green {{else}} tw-bg-grey{{end}}{{else if eq $reviewType 3}} tw-bg-red{{end}}">
384384
{{if .Review}}{{svg (printf "octicon-%s" .Review.Type.Icon)}}{{end}}
385385
</span>
386386
<span class="text grey muted-links">

templates/repo/issue/view_content/pull.tmpl

+5-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,11 @@
109109
{{if .IsBlockedByApprovals}}
110110
<div class="item">
111111
{{svg "octicon-x"}}
112-
{{ctx.Locale.Tr "repo.pulls.blocked_by_approvals" .GrantedApprovals .ProtectedBranch.RequiredApprovals}}
112+
{{if .RequireApprovalsWhitelist}}
113+
{{ctx.Locale.Tr "repo.pulls.blocked_by_approvals_whitelisted" .GrantedApprovals .ProtectedBranch.RequiredApprovals}}
114+
{{else}}
115+
{{ctx.Locale.Tr "repo.pulls.blocked_by_approvals" .GrantedApprovals .ProtectedBranch.RequiredApprovals}}
116+
{{end}}
113117
</div>
114118
{{else if .IsBlockedByRejection}}
115119
<div class="item">

templates/repo/issue/view_content/sidebar.tmpl

+6-2
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,9 @@
9494
{{if and .CanChange (or .Checked (and (not $.Issue.IsClosed) (not $.Issue.PullRequest.HasMerged)))}}
9595
<a href="#" class="ui muted icon re-request-review{{if .Checked}} checked{{end}}" data-tooltip-content="{{if .Checked}}{{ctx.Locale.Tr "repo.issues.remove_request_review"}}{{else}}{{ctx.Locale.Tr "repo.issues.re_request_review"}}{{end}}" data-issue-id="{{$.Issue.ID}}" data-id="{{.ItemID}}" data-update-url="{{$.RepoLink}}/issues/request_review">{{svg (Iif .Checked "octicon-trash" "octicon-sync")}}</a>
9696
{{end}}
97-
{{svg (printf "octicon-%s" .Review.Type.Icon) 16 (printf "text %s" (.Review.HTMLTypeColorName))}}
97+
<span {{if .Review.TooltipContent}}data-tooltip-content="{{ctx.Locale.Tr .Review.TooltipContent}}"{{end}}>
98+
{{svg (printf "octicon-%s" .Review.Type.Icon) 16 (printf "text %s" (.Review.HTMLTypeColorName))}}
99+
</span>
98100
</div>
99101
</div>
100102
{{end}}
@@ -107,7 +109,9 @@
107109
</a>
108110
</div>
109111
<div class="tw-flex tw-items-center tw-gap-2">
110-
{{svg (printf "octicon-%s" .Type.Icon) 16 (printf "text %s" (.HTMLTypeColorName))}}
112+
<span {{if .Review.TooltipContent}}data-tooltip-content="{{ctx.Locale.Tr .Review.TooltipContent}}"{{end}}>
113+
{{svg (printf "octicon-%s" .Type.Icon) 16 (printf "text %s" (.HTMLTypeColorName))}}
114+
</span>
111115
</div>
112116
</div>
113117
{{end}}

0 commit comments

Comments
 (0)