mirror of
https://codeberg.org/davrot/forgejo.git
synced 2025-05-20 14:00:04 +02:00
Move almost all functions' parameter db.Engine to context.Context (#19748)
* Move almost all functions' parameter db.Engine to context.Context * remove some unnecessary wrap functions
This commit is contained in:
parent
d81e31ad78
commit
fd7d83ace6
232 changed files with 1463 additions and 2108 deletions
150
models/review.go
150
models/review.go
|
@ -93,26 +93,26 @@ func (r *Review) LoadCodeComments(ctx context.Context) (err error) {
|
|||
if r.CodeComments != nil {
|
||||
return
|
||||
}
|
||||
if err = r.loadIssue(db.GetEngine(ctx)); err != nil {
|
||||
if err = r.loadIssue(ctx); err != nil {
|
||||
return
|
||||
}
|
||||
r.CodeComments, err = fetchCodeCommentsByReview(ctx, r.Issue, nil, r)
|
||||
return
|
||||
}
|
||||
|
||||
func (r *Review) loadIssue(e db.Engine) (err error) {
|
||||
func (r *Review) loadIssue(ctx context.Context) (err error) {
|
||||
if r.Issue != nil {
|
||||
return
|
||||
}
|
||||
r.Issue, err = getIssueByID(e, r.IssueID)
|
||||
r.Issue, err = getIssueByID(ctx, r.IssueID)
|
||||
return
|
||||
}
|
||||
|
||||
func (r *Review) loadReviewer(e db.Engine) (err error) {
|
||||
func (r *Review) loadReviewer(ctx context.Context) (err error) {
|
||||
if r.ReviewerID == 0 || r.Reviewer != nil {
|
||||
return
|
||||
}
|
||||
r.Reviewer, err = user_model.GetUserByIDEngine(e, r.ReviewerID)
|
||||
r.Reviewer, err = user_model.GetUserByIDCtx(ctx, r.ReviewerID)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -121,13 +121,13 @@ func (r *Review) loadReviewerTeam(ctx context.Context) (err error) {
|
|||
return
|
||||
}
|
||||
|
||||
r.ReviewerTeam, err = organization.GetTeamByIDCtx(ctx, r.ReviewerTeamID)
|
||||
r.ReviewerTeam, err = organization.GetTeamByID(ctx, r.ReviewerTeamID)
|
||||
return
|
||||
}
|
||||
|
||||
// LoadReviewer loads reviewer
|
||||
func (r *Review) LoadReviewer() error {
|
||||
return r.loadReviewer(db.GetEngine(db.DefaultContext))
|
||||
return r.loadReviewer(db.DefaultContext)
|
||||
}
|
||||
|
||||
// LoadReviewerTeam loads reviewer team
|
||||
|
@ -137,14 +137,13 @@ func (r *Review) LoadReviewerTeam() error {
|
|||
|
||||
// LoadAttributes loads all attributes except CodeComments
|
||||
func (r *Review) LoadAttributes(ctx context.Context) (err error) {
|
||||
e := db.GetEngine(ctx)
|
||||
if err = r.loadIssue(e); err != nil {
|
||||
if err = r.loadIssue(ctx); err != nil {
|
||||
return
|
||||
}
|
||||
if err = r.LoadCodeComments(ctx); err != nil {
|
||||
return
|
||||
}
|
||||
if err = r.loadReviewer(e); err != nil {
|
||||
if err = r.loadReviewer(ctx); err != nil {
|
||||
return
|
||||
}
|
||||
if err = r.loadReviewerTeam(ctx); err != nil {
|
||||
|
@ -153,9 +152,10 @@ func (r *Review) LoadAttributes(ctx context.Context) (err error) {
|
|||
return
|
||||
}
|
||||
|
||||
func getReviewByID(e db.Engine, id int64) (*Review, error) {
|
||||
// GetReviewByID returns the review by the given ID
|
||||
func GetReviewByID(ctx context.Context, id int64) (*Review, error) {
|
||||
review := new(Review)
|
||||
if has, err := e.ID(id).Get(review); err != nil {
|
||||
if has, err := db.GetEngine(ctx).ID(id).Get(review); err != nil {
|
||||
return nil, err
|
||||
} else if !has {
|
||||
return nil, ErrReviewNotExist{ID: id}
|
||||
|
@ -164,11 +164,6 @@ func getReviewByID(e db.Engine, id int64) (*Review, error) {
|
|||
}
|
||||
}
|
||||
|
||||
// GetReviewByID returns the review by the given ID
|
||||
func GetReviewByID(id int64) (*Review, error) {
|
||||
return getReviewByID(db.GetEngine(db.DefaultContext), id)
|
||||
}
|
||||
|
||||
// FindReviewOptions represent possible filters to find reviews
|
||||
type FindReviewOptions struct {
|
||||
db.ListOptions
|
||||
|
@ -195,9 +190,10 @@ func (opts *FindReviewOptions) toCond() builder.Cond {
|
|||
return cond
|
||||
}
|
||||
|
||||
func findReviews(e db.Engine, opts FindReviewOptions) ([]*Review, error) {
|
||||
// FindReviews returns reviews passing FindReviewOptions
|
||||
func FindReviews(ctx context.Context, opts FindReviewOptions) ([]*Review, error) {
|
||||
reviews := make([]*Review, 0, 10)
|
||||
sess := e.Where(opts.toCond())
|
||||
sess := db.GetEngine(ctx).Where(opts.toCond())
|
||||
if opts.Page > 0 {
|
||||
sess = db.SetSessionPagination(sess, &opts)
|
||||
}
|
||||
|
@ -207,11 +203,6 @@ func findReviews(e db.Engine, opts FindReviewOptions) ([]*Review, error) {
|
|||
Find(&reviews)
|
||||
}
|
||||
|
||||
// FindReviews returns reviews passing FindReviewOptions
|
||||
func FindReviews(opts FindReviewOptions) ([]*Review, error) {
|
||||
return findReviews(db.GetEngine(db.DefaultContext), opts)
|
||||
}
|
||||
|
||||
// CountReviews returns count of reviews passing FindReviewOptions
|
||||
func CountReviews(opts FindReviewOptions) (int64, error) {
|
||||
return db.GetEngine(db.DefaultContext).Where(opts.toCond()).Count(&Review{})
|
||||
|
@ -230,12 +221,8 @@ type CreateReviewOptions struct {
|
|||
}
|
||||
|
||||
// IsOfficialReviewer check if at least one of the provided reviewers can make official reviews in issue (counts towards required approvals)
|
||||
func IsOfficialReviewer(issue *Issue, reviewers ...*user_model.User) (bool, error) {
|
||||
return isOfficialReviewer(db.DefaultContext, issue, reviewers...)
|
||||
}
|
||||
|
||||
func isOfficialReviewer(ctx context.Context, issue *Issue, reviewers ...*user_model.User) (bool, error) {
|
||||
pr, err := getPullRequestByIssueID(db.GetEngine(ctx), issue.ID)
|
||||
func IsOfficialReviewer(ctx context.Context, issue *Issue, reviewers ...*user_model.User) (bool, error) {
|
||||
pr, err := GetPullRequestByIssueID(ctx, issue.ID)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
@ -257,12 +244,8 @@ func isOfficialReviewer(ctx context.Context, issue *Issue, reviewers ...*user_mo
|
|||
}
|
||||
|
||||
// IsOfficialReviewerTeam check if reviewer in this team can make official reviews in issue (counts towards required approvals)
|
||||
func IsOfficialReviewerTeam(issue *Issue, team *organization.Team) (bool, error) {
|
||||
return isOfficialReviewerTeam(db.DefaultContext, issue, team)
|
||||
}
|
||||
|
||||
func isOfficialReviewerTeam(ctx context.Context, issue *Issue, team *organization.Team) (bool, error) {
|
||||
pr, err := getPullRequestByIssueID(db.GetEngine(ctx), issue.ID)
|
||||
func IsOfficialReviewerTeam(ctx context.Context, issue *Issue, team *organization.Team) (bool, error) {
|
||||
pr, err := GetPullRequestByIssueID(ctx, issue.ID)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
@ -280,7 +263,8 @@ func isOfficialReviewerTeam(ctx context.Context, issue *Issue, team *organizatio
|
|||
return base.Int64sContains(pr.ProtectedBranch.ApprovalsWhitelistTeamIDs, team.ID), nil
|
||||
}
|
||||
|
||||
func createReview(e db.Engine, opts CreateReviewOptions) (*Review, error) {
|
||||
// CreateReview creates a new review based on opts
|
||||
func CreateReview(ctx context.Context, opts CreateReviewOptions) (*Review, error) {
|
||||
review := &Review{
|
||||
Type: opts.Type,
|
||||
Issue: opts.Issue,
|
||||
|
@ -300,23 +284,15 @@ func createReview(e db.Engine, opts CreateReviewOptions) (*Review, error) {
|
|||
}
|
||||
review.ReviewerTeamID = opts.ReviewerTeam.ID
|
||||
}
|
||||
if _, err := e.Insert(review); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return review, nil
|
||||
return review, db.Insert(ctx, review)
|
||||
}
|
||||
|
||||
// CreateReview creates a new review based on opts
|
||||
func CreateReview(opts CreateReviewOptions) (*Review, error) {
|
||||
return createReview(db.GetEngine(db.DefaultContext), opts)
|
||||
}
|
||||
|
||||
func getCurrentReview(e db.Engine, reviewer *user_model.User, issue *Issue) (*Review, error) {
|
||||
// GetCurrentReview returns the current pending review of reviewer for given issue
|
||||
func GetCurrentReview(ctx context.Context, reviewer *user_model.User, issue *Issue) (*Review, error) {
|
||||
if reviewer == nil {
|
||||
return nil, nil
|
||||
}
|
||||
reviews, err := findReviews(e, FindReviewOptions{
|
||||
reviews, err := FindReviews(ctx, FindReviewOptions{
|
||||
Type: ReviewTypePending,
|
||||
IssueID: issue.ID,
|
||||
ReviewerID: reviewer.ID,
|
||||
|
@ -337,11 +313,6 @@ func ReviewExists(issue *Issue, treePath string, line int64) (bool, error) {
|
|||
return db.GetEngine(db.DefaultContext).Cols("id").Exist(&Comment{IssueID: issue.ID, TreePath: treePath, Line: line, Type: CommentTypeCode})
|
||||
}
|
||||
|
||||
// GetCurrentReview returns the current pending review of reviewer for given issue
|
||||
func GetCurrentReview(reviewer *user_model.User, issue *Issue) (*Review, error) {
|
||||
return getCurrentReview(db.GetEngine(db.DefaultContext), reviewer, issue)
|
||||
}
|
||||
|
||||
// ContentEmptyErr represents an content empty error
|
||||
type ContentEmptyErr struct{}
|
||||
|
||||
|
@ -366,7 +337,7 @@ func SubmitReview(doer *user_model.User, issue *Issue, reviewType ReviewType, co
|
|||
|
||||
official := false
|
||||
|
||||
review, err := getCurrentReview(sess, doer, issue)
|
||||
review, err := GetCurrentReview(ctx, doer, issue)
|
||||
if err != nil {
|
||||
if !IsErrReviewNotExist(err) {
|
||||
return nil, nil, err
|
||||
|
@ -378,16 +349,16 @@ func SubmitReview(doer *user_model.User, issue *Issue, reviewType ReviewType, co
|
|||
|
||||
if reviewType == ReviewTypeApprove || reviewType == ReviewTypeReject {
|
||||
// Only reviewers latest review of type approve and reject shall count as "official", so existing reviews needs to be cleared
|
||||
if _, err := sess.Exec("UPDATE `review` SET official=? WHERE issue_id=? AND reviewer_id=?", false, issue.ID, doer.ID); err != nil {
|
||||
if _, err := db.Exec(ctx, "UPDATE `review` SET official=? WHERE issue_id=? AND reviewer_id=?", false, issue.ID, doer.ID); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
if official, err = isOfficialReviewer(ctx, issue, doer); err != nil {
|
||||
if official, err = IsOfficialReviewer(ctx, issue, doer); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
}
|
||||
|
||||
// No current review. Create a new one!
|
||||
if review, err = createReview(sess, CreateReviewOptions{
|
||||
if review, err = CreateReview(ctx, CreateReviewOptions{
|
||||
Type: reviewType,
|
||||
Issue: issue,
|
||||
Reviewer: doer,
|
||||
|
@ -408,10 +379,10 @@ func SubmitReview(doer *user_model.User, issue *Issue, reviewType ReviewType, co
|
|||
|
||||
if reviewType == ReviewTypeApprove || reviewType == ReviewTypeReject {
|
||||
// Only reviewers latest review of type approve and reject shall count as "official", so existing reviews needs to be cleared
|
||||
if _, err := sess.Exec("UPDATE `review` SET official=? WHERE issue_id=? AND reviewer_id=?", false, issue.ID, doer.ID); err != nil {
|
||||
if _, err := db.Exec(ctx, "UPDATE `review` SET official=? WHERE issue_id=? AND reviewer_id=?", false, issue.ID, doer.ID); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
if official, err = isOfficialReviewer(ctx, issue, doer); err != nil {
|
||||
if official, err = IsOfficialReviewer(ctx, issue, doer); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
}
|
||||
|
@ -456,7 +427,7 @@ func SubmitReview(doer *user_model.User, issue *Issue, reviewType ReviewType, co
|
|||
continue
|
||||
}
|
||||
|
||||
if _, err := sess.Delete(teamReviewRequest); err != nil {
|
||||
if _, err := sess.ID(teamReviewRequest.ID).NoAutoCondition().Delete(teamReviewRequest); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
}
|
||||
|
@ -508,14 +479,10 @@ func GetReviewersFromOriginalAuthorsByIssueID(issueID int64) ([]*Review, error)
|
|||
}
|
||||
|
||||
// GetReviewByIssueIDAndUserID get the latest review of reviewer for a pull request
|
||||
func GetReviewByIssueIDAndUserID(issueID, userID int64) (*Review, error) {
|
||||
return getReviewByIssueIDAndUserID(db.GetEngine(db.DefaultContext), issueID, userID)
|
||||
}
|
||||
|
||||
func getReviewByIssueIDAndUserID(e db.Engine, issueID, userID int64) (*Review, error) {
|
||||
func GetReviewByIssueIDAndUserID(ctx context.Context, issueID, userID int64) (*Review, error) {
|
||||
review := new(Review)
|
||||
|
||||
has, err := e.SQL("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id = ? AND reviewer_id = ? AND original_author_id = 0 AND type in (?, ?, ?))",
|
||||
has, err := db.GetEngine(ctx).SQL("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id = ? AND reviewer_id = ? AND original_author_id = 0 AND type in (?, ?, ?))",
|
||||
issueID, userID, ReviewTypeApprove, ReviewTypeReject, ReviewTypeRequest).
|
||||
Get(review)
|
||||
if err != nil {
|
||||
|
@ -530,15 +497,11 @@ func getReviewByIssueIDAndUserID(e db.Engine, issueID, userID int64) (*Review, e
|
|||
}
|
||||
|
||||
// GetTeamReviewerByIssueIDAndTeamID get the latest review request of reviewer team for a pull request
|
||||
func GetTeamReviewerByIssueIDAndTeamID(issueID, teamID int64) (review *Review, err error) {
|
||||
return getTeamReviewerByIssueIDAndTeamID(db.GetEngine(db.DefaultContext), issueID, teamID)
|
||||
}
|
||||
|
||||
func getTeamReviewerByIssueIDAndTeamID(e db.Engine, issueID, teamID int64) (review *Review, err error) {
|
||||
func GetTeamReviewerByIssueIDAndTeamID(ctx context.Context, issueID, teamID int64) (review *Review, err error) {
|
||||
review = new(Review)
|
||||
|
||||
has := false
|
||||
if has, err = e.SQL("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id = ? AND reviewer_team_id = ?)",
|
||||
if has, err = db.GetEngine(ctx).SQL("SELECT * FROM review WHERE id IN (SELECT max(id) as id FROM review WHERE issue_id = ? AND reviewer_team_id = ?)",
|
||||
issueID, teamID).
|
||||
Get(review); err != nil {
|
||||
return nil, err
|
||||
|
@ -633,7 +596,7 @@ func AddReviewRequest(issue *Issue, reviewer, doer *user_model.User) (*Comment,
|
|||
defer committer.Close()
|
||||
sess := db.GetEngine(ctx)
|
||||
|
||||
review, err := getReviewByIssueIDAndUserID(sess, issue.ID, reviewer.ID)
|
||||
review, err := GetReviewByIssueIDAndUserID(ctx, issue.ID, reviewer.ID)
|
||||
if err != nil && !IsErrReviewNotExist(err) {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -643,7 +606,7 @@ func AddReviewRequest(issue *Issue, reviewer, doer *user_model.User) (*Comment,
|
|||
return nil, nil
|
||||
}
|
||||
|
||||
official, err := isOfficialReviewer(ctx, issue, reviewer, doer)
|
||||
official, err := IsOfficialReviewer(ctx, issue, reviewer, doer)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else if official {
|
||||
|
@ -652,7 +615,7 @@ func AddReviewRequest(issue *Issue, reviewer, doer *user_model.User) (*Comment,
|
|||
}
|
||||
}
|
||||
|
||||
review, err = createReview(sess, CreateReviewOptions{
|
||||
review, err = CreateReview(ctx, CreateReviewOptions{
|
||||
Type: ReviewTypeRequest,
|
||||
Issue: issue,
|
||||
Reviewer: reviewer,
|
||||
|
@ -686,9 +649,8 @@ func RemoveReviewRequest(issue *Issue, reviewer, doer *user_model.User) (*Commen
|
|||
return nil, err
|
||||
}
|
||||
defer committer.Close()
|
||||
sess := db.GetEngine(ctx)
|
||||
|
||||
review, err := getReviewByIssueIDAndUserID(sess, issue.ID, reviewer.ID)
|
||||
review, err := GetReviewByIssueIDAndUserID(ctx, issue.ID, reviewer.ID)
|
||||
if err != nil && !IsErrReviewNotExist(err) {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -697,22 +659,22 @@ func RemoveReviewRequest(issue *Issue, reviewer, doer *user_model.User) (*Commen
|
|||
return nil, nil
|
||||
}
|
||||
|
||||
if _, err = sess.Delete(review); err != nil {
|
||||
if _, err = db.DeleteByBean(ctx, review); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
official, err := isOfficialReviewer(ctx, issue, reviewer)
|
||||
official, err := IsOfficialReviewer(ctx, issue, reviewer)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else if official {
|
||||
// recalculate the latest official review for reviewer
|
||||
review, err := getReviewByIssueIDAndUserID(sess, issue.ID, reviewer.ID)
|
||||
review, err := GetReviewByIssueIDAndUserID(ctx, issue.ID, reviewer.ID)
|
||||
if err != nil && !IsErrReviewNotExist(err) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if review != nil {
|
||||
if _, err := sess.Exec("UPDATE `review` SET official=? WHERE id=?", true, review.ID); err != nil {
|
||||
if _, err := db.Exec(ctx, "UPDATE `review` SET official=? WHERE id=?", true, review.ID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
@ -740,9 +702,8 @@ func AddTeamReviewRequest(issue *Issue, reviewer *organization.Team, doer *user_
|
|||
return nil, err
|
||||
}
|
||||
defer committer.Close()
|
||||
sess := db.GetEngine(ctx)
|
||||
|
||||
review, err := getTeamReviewerByIssueIDAndTeamID(sess, issue.ID, reviewer.ID)
|
||||
review, err := GetTeamReviewerByIssueIDAndTeamID(ctx, issue.ID, reviewer.ID)
|
||||
if err != nil && !IsErrReviewNotExist(err) {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -752,16 +713,16 @@ func AddTeamReviewRequest(issue *Issue, reviewer *organization.Team, doer *user_
|
|||
return nil, nil
|
||||
}
|
||||
|
||||
official, err := isOfficialReviewerTeam(ctx, issue, reviewer)
|
||||
official, err := IsOfficialReviewerTeam(ctx, issue, reviewer)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("isOfficialReviewerTeam(): %v", err)
|
||||
} else if !official {
|
||||
if official, err = isOfficialReviewer(ctx, issue, doer); err != nil {
|
||||
if official, err = IsOfficialReviewer(ctx, issue, doer); err != nil {
|
||||
return nil, fmt.Errorf("isOfficialReviewer(): %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
if review, err = createReview(sess, CreateReviewOptions{
|
||||
if review, err = CreateReview(ctx, CreateReviewOptions{
|
||||
Type: ReviewTypeRequest,
|
||||
Issue: issue,
|
||||
ReviewerTeam: reviewer,
|
||||
|
@ -772,7 +733,7 @@ func AddTeamReviewRequest(issue *Issue, reviewer *organization.Team, doer *user_
|
|||
}
|
||||
|
||||
if official {
|
||||
if _, err := sess.Exec("UPDATE `review` SET official=? WHERE issue_id=? AND reviewer_team_id=?", false, issue.ID, reviewer.ID); err != nil {
|
||||
if _, err := db.Exec(ctx, "UPDATE `review` SET official=? WHERE issue_id=? AND reviewer_team_id=?", false, issue.ID, reviewer.ID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
@ -800,9 +761,8 @@ func RemoveTeamReviewRequest(issue *Issue, reviewer *organization.Team, doer *us
|
|||
return nil, err
|
||||
}
|
||||
defer committer.Close()
|
||||
sess := db.GetEngine(ctx)
|
||||
|
||||
review, err := getTeamReviewerByIssueIDAndTeamID(sess, issue.ID, reviewer.ID)
|
||||
review, err := GetTeamReviewerByIssueIDAndTeamID(ctx, issue.ID, reviewer.ID)
|
||||
if err != nil && !IsErrReviewNotExist(err) {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -811,24 +771,24 @@ func RemoveTeamReviewRequest(issue *Issue, reviewer *organization.Team, doer *us
|
|||
return nil, nil
|
||||
}
|
||||
|
||||
if _, err = sess.Delete(review); err != nil {
|
||||
if _, err = db.DeleteByBean(ctx, review); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
official, err := isOfficialReviewerTeam(ctx, issue, reviewer)
|
||||
official, err := IsOfficialReviewerTeam(ctx, issue, reviewer)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("isOfficialReviewerTeam(): %v", err)
|
||||
}
|
||||
|
||||
if official {
|
||||
// recalculate which is the latest official review from that team
|
||||
review, err := getReviewByIssueIDAndUserID(sess, issue.ID, -reviewer.ID)
|
||||
review, err := GetReviewByIssueIDAndUserID(ctx, issue.ID, -reviewer.ID)
|
||||
if err != nil && !IsErrReviewNotExist(err) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if review != nil {
|
||||
if _, err := sess.Exec("UPDATE `review` SET official=? WHERE id=?", true, review.ID); err != nil {
|
||||
if _, err := db.Exec(ctx, "UPDATE `review` SET official=? WHERE id=?", true, review.ID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
@ -899,7 +859,7 @@ func CanMarkConversation(issue *Issue, doer *user_model.User) (permResult bool,
|
|||
|
||||
permResult = p.CanAccess(perm.AccessModeWrite, unit.TypePullRequests)
|
||||
if !permResult {
|
||||
if permResult, err = IsOfficialReviewer(issue, doer); err != nil {
|
||||
if permResult, err = IsOfficialReviewer(db.DefaultContext, issue, doer); err != nil {
|
||||
return false, err
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue