aboutsummaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorCalvin K <70356237+CalK16@users.noreply.github.com>2024-11-09 12:48:31 +0800
committerGitHub <noreply@github.com>2024-11-09 04:48:31 +0000
commit18aeca53203adba7b4fb3b7311f0e77bef92e266 (patch)
tree17a55e9f9615b74a9b43f5920b35cc7a8f5e5833 /services
parentd80f99ef0441da135ba2857840687e0cf921ac52 (diff)
downloadgitea-18aeca53203adba7b4fb3b7311f0e77bef92e266.tar.gz
gitea-18aeca53203adba7b4fb3b7311f0e77bef92e266.zip
Add reviewers selection to new pull request (#32403)
Users could add reviewers when creating new PRs. --------- Co-authored-by: splitt3r <splitt3r@users.noreply.github.com> Co-authored-by: Sebastian Sauer <sauer.sebastian@gmail.com> Co-authored-by: bb-ben <70356237+bboerben@users.noreply.github.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Diffstat (limited to 'services')
-rw-r--r--services/agit/agit.go8
-rw-r--r--services/forms/repo_form.go1
-rw-r--r--services/issue/assignee.go28
-rw-r--r--services/mailer/mailer.go2
-rw-r--r--services/pull/pull.go27
5 files changed, 53 insertions, 13 deletions
diff --git a/services/agit/agit.go b/services/agit/agit.go
index 82aa2791aa..83b12dfcdb 100644
--- a/services/agit/agit.go
+++ b/services/agit/agit.go
@@ -137,8 +137,12 @@ func ProcReceive(ctx context.Context, repo *repo_model.Repository, gitRepo *git.
Type: issues_model.PullRequestGitea,
Flow: issues_model.PullRequestFlowAGit,
}
-
- if err := pull_service.NewPullRequest(ctx, repo, prIssue, []int64{}, []string{}, pr, []int64{}); err != nil {
+ prOpts := &pull_service.NewPullRequestOptions{
+ Repo: repo,
+ Issue: prIssue,
+ PullRequest: pr,
+ }
+ if err := pull_service.NewPullRequest(ctx, prOpts); err != nil {
return nil, err
}
diff --git a/services/forms/repo_form.go b/services/forms/repo_form.go
index ddd07a64cb..83f2dd6caa 100644
--- a/services/forms/repo_form.go
+++ b/services/forms/repo_form.go
@@ -447,6 +447,7 @@ type CreateIssueForm struct {
Title string `binding:"Required;MaxSize(255)"`
LabelIDs string `form:"label_ids"`
AssigneeIDs string `form:"assignee_ids"`
+ ReviewerIDs string `form:"reviewer_ids"`
Ref string `form:"ref"`
MilestoneID int64
ProjectID int64
diff --git a/services/issue/assignee.go b/services/issue/assignee.go
index a0aa5a339b..52ee9f2b22 100644
--- a/services/issue/assignee.go
+++ b/services/issue/assignee.go
@@ -61,7 +61,12 @@ func ToggleAssigneeWithNotify(ctx context.Context, issue *issues_model.Issue, do
}
// ReviewRequest add or remove a review request from a user for this PR, and make comment for it.
-func ReviewRequest(ctx context.Context, issue *issues_model.Issue, doer, reviewer *user_model.User, isAdd bool) (comment *issues_model.Comment, err error) {
+func ReviewRequest(ctx context.Context, issue *issues_model.Issue, doer *user_model.User, permDoer *access_model.Permission, reviewer *user_model.User, isAdd bool) (comment *issues_model.Comment, err error) {
+ err = isValidReviewRequest(ctx, reviewer, doer, isAdd, issue, permDoer)
+ if err != nil {
+ return nil, err
+ }
+
if isAdd {
comment, err = issues_model.AddReviewRequest(ctx, issue, reviewer, doer)
} else {
@@ -79,8 +84,8 @@ func ReviewRequest(ctx context.Context, issue *issues_model.Issue, doer, reviewe
return comment, err
}
-// IsValidReviewRequest Check permission for ReviewRequest
-func IsValidReviewRequest(ctx context.Context, reviewer, doer *user_model.User, isAdd bool, issue *issues_model.Issue, permDoer *access_model.Permission) error {
+// isValidReviewRequest Check permission for ReviewRequest
+func isValidReviewRequest(ctx context.Context, reviewer, doer *user_model.User, isAdd bool, issue *issues_model.Issue, permDoer *access_model.Permission) error {
if reviewer.IsOrganization() {
return issues_model.ErrNotValidReviewRequest{
Reason: "Organization can't be added as reviewer",
@@ -109,7 +114,7 @@ func IsValidReviewRequest(ctx context.Context, reviewer, doer *user_model.User,
}
}
- lastreview, err := issues_model.GetReviewByIssueIDAndUserID(ctx, issue.ID, reviewer.ID)
+ lastReview, err := issues_model.GetReviewByIssueIDAndUserID(ctx, issue.ID, reviewer.ID)
if err != nil && !issues_model.IsErrReviewNotExist(err) {
return err
}
@@ -137,7 +142,7 @@ func IsValidReviewRequest(ctx context.Context, reviewer, doer *user_model.User,
return nil
}
- if doer.ID == issue.PosterID && issue.OriginalAuthorID == 0 && lastreview != nil && lastreview.Type != issues_model.ReviewTypeRequest {
+ if doer.ID == issue.PosterID && issue.OriginalAuthorID == 0 && lastReview != nil && lastReview.Type != issues_model.ReviewTypeRequest {
return nil
}
@@ -152,7 +157,7 @@ func IsValidReviewRequest(ctx context.Context, reviewer, doer *user_model.User,
return nil
}
- if lastreview != nil && lastreview.Type == issues_model.ReviewTypeRequest && lastreview.ReviewerID == doer.ID {
+ if lastReview != nil && lastReview.Type == issues_model.ReviewTypeRequest && lastReview.ReviewerID == doer.ID {
return nil
}
@@ -163,8 +168,8 @@ func IsValidReviewRequest(ctx context.Context, reviewer, doer *user_model.User,
}
}
-// IsValidTeamReviewRequest Check permission for ReviewRequest Team
-func IsValidTeamReviewRequest(ctx context.Context, reviewer *organization.Team, doer *user_model.User, isAdd bool, issue *issues_model.Issue) error {
+// isValidTeamReviewRequest Check permission for ReviewRequest Team
+func isValidTeamReviewRequest(ctx context.Context, reviewer *organization.Team, doer *user_model.User, isAdd bool, issue *issues_model.Issue) error {
if doer.IsOrganization() {
return issues_model.ErrNotValidReviewRequest{
Reason: "Organization can't be doer to add reviewer",
@@ -212,6 +217,10 @@ func IsValidTeamReviewRequest(ctx context.Context, reviewer *organization.Team,
// TeamReviewRequest add or remove a review request from a team for this PR, and make comment for it.
func TeamReviewRequest(ctx context.Context, issue *issues_model.Issue, doer *user_model.User, reviewer *organization.Team, isAdd bool) (comment *issues_model.Comment, err error) {
+ err = isValidTeamReviewRequest(ctx, reviewer, doer, isAdd, issue)
+ if err != nil {
+ return nil, err
+ }
if isAdd {
comment, err = issues_model.AddTeamReviewRequest(ctx, issue, reviewer, doer)
} else {
@@ -268,6 +277,9 @@ func teamReviewRequestNotify(ctx context.Context, issue *issues_model.Issue, doe
// CanDoerChangeReviewRequests returns if the doer can add/remove review requests of a PR
func CanDoerChangeReviewRequests(ctx context.Context, doer *user_model.User, repo *repo_model.Repository, issue *issues_model.Issue) bool {
+ if repo.IsArchived {
+ return false
+ }
// The poster of the PR can change the reviewers
if doer.ID == issue.PosterID {
return true
diff --git a/services/mailer/mailer.go b/services/mailer/mailer.go
index c5846e6104..5cb6d03521 100644
--- a/services/mailer/mailer.go
+++ b/services/mailer/mailer.go
@@ -382,7 +382,7 @@ func (s *dummySender) Send(from string, to []string, msg io.WriterTo) error {
if _, err := msg.WriteTo(&buf); err != nil {
return err
}
- log.Info("Mail From: %s To: %v Body: %s", from, to, buf.String())
+ log.Debug("Mail From: %s To: %v Body: %s", from, to, buf.String())
return nil
}
diff --git a/services/pull/pull.go b/services/pull/pull.go
index bab4e49998..3362cb97ff 100644
--- a/services/pull/pull.go
+++ b/services/pull/pull.go
@@ -17,6 +17,7 @@ import (
"code.gitea.io/gitea/models/db"
git_model "code.gitea.io/gitea/models/git"
issues_model "code.gitea.io/gitea/models/issues"
+ "code.gitea.io/gitea/models/organization"
access_model "code.gitea.io/gitea/models/perm/access"
repo_model "code.gitea.io/gitea/models/repo"
"code.gitea.io/gitea/models/unit"
@@ -41,8 +42,20 @@ func getPullWorkingLockKey(prID int64) string {
return fmt.Sprintf("pull_working_%d", prID)
}
+type NewPullRequestOptions struct {
+ Repo *repo_model.Repository
+ Issue *issues_model.Issue
+ LabelIDs []int64
+ AttachmentUUIDs []string
+ PullRequest *issues_model.PullRequest
+ AssigneeIDs []int64
+ Reviewers []*user_model.User
+ TeamReviewers []*organization.Team
+}
+
// NewPullRequest creates new pull request with labels for repository.
-func NewPullRequest(ctx context.Context, repo *repo_model.Repository, issue *issues_model.Issue, labelIDs []int64, uuids []string, pr *issues_model.PullRequest, assigneeIDs []int64) error {
+func NewPullRequest(ctx context.Context, opts *NewPullRequestOptions) error {
+ repo, issue, labelIDs, uuids, pr, assigneeIDs := opts.Repo, opts.Issue, opts.LabelIDs, opts.AttachmentUUIDs, opts.PullRequest, opts.AssigneeIDs
if err := issue.LoadPoster(ctx); err != nil {
return err
}
@@ -197,7 +210,17 @@ func NewPullRequest(ctx context.Context, repo *repo_model.Repository, issue *iss
}
notify_service.IssueChangeAssignee(ctx, issue.Poster, issue, assignee, false, assigneeCommentMap[assigneeID])
}
-
+ permDoer, err := access_model.GetUserRepoPermission(ctx, repo, issue.Poster)
+ for _, reviewer := range opts.Reviewers {
+ if _, err = issue_service.ReviewRequest(ctx, pr.Issue, issue.Poster, &permDoer, reviewer, true); err != nil {
+ return err
+ }
+ }
+ for _, teamReviewer := range opts.TeamReviewers {
+ if _, err = issue_service.TeamReviewRequest(ctx, pr.Issue, issue.Poster, teamReviewer, true); err != nil {
+ return err
+ }
+ }
return nil
}