Skip to content

Commit 29a6d24

Browse files
committed
new change
1 parent ff59626 commit 29a6d24

File tree

5 files changed

+47
-48
lines changed

5 files changed

+47
-48
lines changed

models/repo.go

Lines changed: 13 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -626,7 +626,7 @@ func (repo *Repository) getReviewersPrivate(e Engine, doerID, posterID int64) (u
626626
users = make([]*User, 0, 20)
627627

628628
if err = e.
629-
SQL("SELECT * FROM user WHERE id in (SELECT user_id FROM access WHERE repo_id = ? AND mode >= ? AND user_id NOT IN ( ?, ?))",
629+
SQL("SELECT * FROM `user` WHERE id in (SELECT user_id FROM `access` WHERE repo_id = ? AND mode >= ? AND user_id NOT IN ( ?, ?)) ORDER BY name",
630630
repo.ID, AccessModeRead,
631631
doerID, posterID).
632632
Find(&users); err != nil {
@@ -636,46 +636,21 @@ func (repo *Repository) getReviewersPrivate(e Engine, doerID, posterID int64) (u
636636
return users, nil
637637
}
638638

639-
func (repo *Repository) getReviewersPublic(e Engine, doerID, posterID int64) (users []*User, err error) {
639+
func (repo *Repository) getReviewersPublic(e Engine, doerID, posterID int64) (_ []*User, err error) {
640640

641-
userIDs := make([]int64, 0, 20)
641+
users := make([]*User, 0)
642642

643-
if err = e.
644-
SQL("SELECT user_id FROM access WHERE repo_id = ? AND mode >= ? AND user_id NOT IN ( ?, ?)",
645-
repo.ID, AccessModeRead,
646-
doerID, posterID).
647-
Find(&userIDs); err != nil {
648-
return nil, err
649-
}
650-
651-
getNum := len(userIDs)
652-
653-
watcherIDs := make([]int64, 0)
654-
655-
if err = e.SQL("SELECT user_id FROM watch WHERE repo_id = ? AND user_id NOT IN ( ?, ?)",
656-
repo.ID, doerID, posterID).Find(&watcherIDs); err != nil {
657-
return nil, err
658-
}
643+
const SQLCmd = "SELECT * FROM `user` WHERE id IN ( " +
644+
"SELECT user_id FROM `access` WHERE repo_id = ? AND mode >= ? AND user_id NOT IN ( ?, ?) " +
645+
"UNION " +
646+
"SELECT user_id FROM `watch` WHERE repo_id = ? AND user_id NOT IN ( ?, ?) AND mode IN (?, ?) " +
647+
") ORDER BY name"
659648

660-
for _, watcherID := range watcherIDs {
661-
isHave := false
662-
for index, userID := range userIDs {
663-
if index >= getNum {
664-
break
665-
}
666-
if userID == watcherID {
667-
isHave = true
668-
break
669-
}
670-
}
671-
672-
if !isHave {
673-
userIDs = append(userIDs, watcherID)
674-
}
675-
}
676-
677-
users = make([]*User, 0, len(userIDs))
678-
if err = e.In("id", userIDs).Find(&users); err != nil {
649+
if err = e.
650+
SQL(SQLCmd,
651+
repo.ID, AccessModeRead, doerID, posterID,
652+
repo.ID, doerID, posterID, RepoWatchModeNormal, RepoWatchModeAuto).
653+
Find(&users); err != nil {
679654
return nil, err
680655
}
681656

routers/repo/issue.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -818,9 +818,28 @@ func ViewIssue(ctx *context.Context) {
818818
// Check milestone and assignee.
819819
if ctx.Repo.CanWriteIssuesOrPulls(issue.IsPull) {
820820
RetrieveRepoMilestonesAndAssignees(ctx, repo)
821-
if issue.IsPull {
821+
if ctx.Written() {
822+
return
823+
}
824+
}
825+
826+
if issue.IsPull {
827+
canChooseReviewer := ctx.Repo.CanWrite(models.UnitTypePullRequests)
828+
if !canChooseReviewer && ctx.User != nil && ctx.IsSigned {
829+
canChooseReviewer, err = models.IsOfficialReviewer(issue, ctx.User)
830+
if err != nil {
831+
ctx.ServerError("IsOfficialReviewer", err)
832+
return
833+
}
834+
}
835+
836+
if canChooseReviewer {
822837
RetrieveRepoReviewers(ctx, repo, issue.PosterID)
838+
ctx.Data["CanChooseReviewer"] = true
839+
} else {
840+
ctx.Data["CanChooseReviewer"] = false
823841
}
842+
824843
if ctx.Written() {
825844
return
826845
}
@@ -1320,7 +1339,13 @@ func isLegalReviewRequest(reviewer, doer *models.User, isAdd bool, issue *models
13201339

13211340
pemResult = permDoer.CanAccessAny(models.AccessModeWrite, models.UnitTypePullRequests)
13221341
if !pemResult {
1323-
return fmt.Errorf("Doer can't write [user_id: %d, repo_name: %s]", doer.ID, issue.Repo.Name)
1342+
pemResult, err = models.IsOfficialReviewer(issue, doer)
1343+
if err != nil {
1344+
return err
1345+
}
1346+
if !pemResult {
1347+
return fmt.Errorf("Doer can't choose reviewer [user_id: %d, repo_name: %s, issue_id: %d]", doer.ID, issue.Repo.Name, issue.ID)
1348+
}
13241349
}
13251350

13261351
if doer.ID == reviewer.ID {

routers/routes/routes.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -738,8 +738,7 @@ func RegisterRoutes(m *macaron.Macaron) {
738738
m.Post("/labels", reqRepoIssuesOrPullsWriter, repo.UpdateIssueLabel)
739739
m.Post("/milestone", reqRepoIssuesOrPullsWriter, repo.UpdateIssueMilestone)
740740
m.Post("/assignee", reqRepoIssuesOrPullsWriter, repo.UpdateIssueAssignee)
741-
m.Post("/request_review", reqRepoIssuesOrPullsWriter, repo.UpdatePullReviewRequest)
742-
m.Post("/re_request_review", reqRepoIssuesOrPullsReader, repo.UpdatePullReviewRequest)
741+
m.Post("/request_review", reqRepoIssuesOrPullsReader, repo.UpdatePullReviewRequest)
743742
m.Post("/status", reqRepoIssuesOrPullsWriter, repo.UpdateIssueStatus)
744743
}, context.RepoMustNotBeArchived())
745744
m.Group("/comments/:id", func() {

templates/repo/issue/view_content/pull.tmpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@
1919
{{$canChoose = true}}
2020
{{end}}
2121
{{else}}
22-
{{if and (or $.IsIssuePoster $.IsIssueWriter) (not (eq $.SignedUserID .ReviewerID))}}
22+
{{if and (or $.IsIssuePoster $.CanChooseReviewer) (not (eq $.SignedUserID .ReviewerID))}}
2323
{{$canChoose = true}}
2424
{{end}}
2525
{{end}}
2626

2727
{{if $canChoose }}
28-
<a href="#" class="ui poping up icon re-request-review" data-is-checked="{{if eq .Type 4}}remove{{else}}add{{end}}" data-issue-id="{{$.Issue.ID}}" data-content="{{ if eq .Type 4 }} {{$.i18n.Tr "repo.issues.remove_request_review"}} {{else}} {{$.i18n.Tr "repo.issues.re_request_review"}} {{end}}" data-id="{{.ReviewerID}}" data-update-url="{{$.RepoLink}}/issues/re_request_review">
28+
<a href="#" class="ui poping up icon re-request-review" data-is-checked="{{if eq .Type 4}}remove{{else}}add{{end}}" data-issue-id="{{$.Issue.ID}}" data-content="{{ if eq .Type 4 }} {{$.i18n.Tr "repo.issues.remove_request_review"}} {{else}} {{$.i18n.Tr "repo.issues.re_request_review"}} {{end}}" data-id="{{.ReviewerID}}" data-update-url="{{$.RepoLink}}/issues/request_review">
2929
{{svg "octicon-sync" 16}}
3030
</a>
3131
{{end}}

templates/repo/issue/view_content/sidebar.tmpl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
{{if .Issue.IsPull }}
66

77
<input id="reviewer_id" name="reviewer_id" type="hidden" value="{{.reviewer_id}}">
8-
<div class="ui {{if or (not .IsIssueWriter) .Repository.IsArchived}}disabled{{end}} floating jump select-reviewers-modify dropdown">
8+
<div class="ui {{if or (not .CanChooseReviewer) .Repository.IsArchived}}disabled{{end}} floating jump select-reviewers-modify dropdown">
99
<span class="text">
1010
<strong>{{.i18n.Tr "repo.issues.review.reviewers"}}</strong>
11-
{{if and .IsIssueWriter (not .Repository.IsArchived)}}
11+
{{if and .CanChooseReviewer (not .Repository.IsArchived)}}
1212
{{svg "octicon-gear" 16}}
1313
{{end}}
1414
</span>
@@ -72,13 +72,13 @@
7272
{{$canChoose = true}}
7373
{{end}}
7474
{{else}}
75-
{{if and (or $.IsIssuePoster $.IsIssueWriter) (not (eq $.SignedUserID .ReviewerID))}}
75+
{{if and (or $.IsIssuePoster $.CanChooseReviewer) (not (eq $.SignedUserID .ReviewerID))}}
7676
{{$canChoose = true}}
7777
{{end}}
7878
{{end}}
7979

8080
{{if $canChoose}}
81-
<a href="#" class="ui poping up icon re-request-review" data-is-checked="{{if eq .Type 4}}remove{{else}}add{{end}}" data-content="{{ if eq .Type 4 }} {{$.i18n.Tr "repo.issues.remove_request_review"}} {{else}} {{$.i18n.Tr "repo.issues.re_request_review"}} {{end}}" data-issue-id="{{$.Issue.ID}}" data-id="{{.ReviewerID}}" data-update-url="{{$.RepoLink}}/issues/re_request_review">
81+
<a href="#" class="ui poping up icon re-request-review" data-is-checked="{{if eq .Type 4}}remove{{else}}add{{end}}" data-content="{{ if eq .Type 4 }} {{$.i18n.Tr "repo.issues.remove_request_review"}} {{else}} {{$.i18n.Tr "repo.issues.re_request_review"}} {{end}}" data-issue-id="{{$.Issue.ID}}" data-id="{{.ReviewerID}}" data-update-url="{{$.RepoLink}}/issues/request_review">
8282
{{svg "octicon-sync" 16}}
8383
</a>
8484
{{end}}

0 commit comments

Comments
 (0)