]> source.dussan.org Git - gitea.git/commitdiff
more context for models (#19511)
author6543 <6543@obermui.de>
Thu, 28 Apr 2022 11:48:48 +0000 (13:48 +0200)
committerGitHub <noreply@github.com>
Thu, 28 Apr 2022 11:48:48 +0000 (13:48 +0200)
make more usage of context, to have more db transaction in one session

(make diff of  #9307 smaller)

54 files changed:
models/action.go
models/branches.go
models/branches_test.go
models/commit_status.go
models/issue.go
models/issue_label.go
models/issue_label_test.go
models/issue_xref.go
models/lfs_lock.go
models/organization/org.go
models/organization/team_repo.go
models/pull.go
models/pull_list.go
models/pull_test.go
models/repo.go
models/repo_permission.go
models/repo_permission_test.go
models/review.go
modules/context/repo.go
modules/convert/convert.go
modules/convert/issue.go
modules/convert/pull.go
modules/notification/mail/mail.go
modules/test/context_tests.go
routers/api/v1/api.go
routers/api/v1/repo/branch.go
routers/api/v1/repo/issue_comment.go
routers/api/v1/repo/pull.go
routers/api/v1/repo/pull_review.go
routers/api/v1/repo/repo.go
routers/private/hook_pre_receive.go
routers/private/serv.go
routers/web/repo/attachment.go
routers/web/repo/branch.go
routers/web/repo/compare.go
routers/web/repo/http.go
routers/web/repo/issue.go
routers/web/repo/pull.go
routers/web/repo/setting_protected_branch.go
services/agit/agit.go
services/asymkey/sign.go
services/issue/assignee.go
services/issue/commit.go
services/issue/label.go
services/lfs/locks.go
services/lfs/server.go
services/pull/check.go
services/pull/commit_status.go
services/pull/merge.go
services/pull/patch.go
services/pull/pull.go
services/pull/review.go
services/pull/temp_repo.go
services/pull/update.go

index 3339d3b87af2ad97474a7af84e86cad4ec90755c..51776164975145da84fcec9b4d48a552d36f4284 100644 (file)
@@ -508,7 +508,7 @@ func notifyWatchers(ctx context.Context, actions ...*Action) error {
                                        permPR[i] = false
                                        continue
                                }
-                               perm, err := getUserRepoPermission(ctx, repo, user)
+                               perm, err := GetUserRepoPermission(ctx, repo, user)
                                if err != nil {
                                        permCode[i] = false
                                        permIssue[i] = false
index 8156fd09082775571a65222e34ca76f49303049c..f4ded8588fc70cf58ae1c8a7817422e577fb2699 100644 (file)
@@ -337,43 +337,43 @@ type WhitelistOptions struct {
 // If ID is 0, it creates a new record. Otherwise, updates existing record.
 // This function also performs check if whitelist user and team's IDs have been changed
 // to avoid unnecessary whitelist delete and regenerate.
-func UpdateProtectBranch(repo *repo_model.Repository, protectBranch *ProtectedBranch, opts WhitelistOptions) (err error) {
-       if err = repo.GetOwner(db.DefaultContext); err != nil {
+func UpdateProtectBranch(ctx context.Context, repo *repo_model.Repository, protectBranch *ProtectedBranch, opts WhitelistOptions) (err error) {
+       if err = repo.GetOwner(ctx); err != nil {
                return fmt.Errorf("GetOwner: %v", err)
        }
 
-       whitelist, err := updateUserWhitelist(repo, protectBranch.WhitelistUserIDs, opts.UserIDs)
+       whitelist, err := updateUserWhitelist(ctx, repo, protectBranch.WhitelistUserIDs, opts.UserIDs)
        if err != nil {
                return err
        }
        protectBranch.WhitelistUserIDs = whitelist
 
-       whitelist, err = updateUserWhitelist(repo, protectBranch.MergeWhitelistUserIDs, opts.MergeUserIDs)
+       whitelist, err = updateUserWhitelist(ctx, repo, protectBranch.MergeWhitelistUserIDs, opts.MergeUserIDs)
        if err != nil {
                return err
        }
        protectBranch.MergeWhitelistUserIDs = whitelist
 
-       whitelist, err = updateApprovalWhitelist(repo, protectBranch.ApprovalsWhitelistUserIDs, opts.ApprovalsUserIDs)
+       whitelist, err = updateApprovalWhitelist(ctx, repo, protectBranch.ApprovalsWhitelistUserIDs, opts.ApprovalsUserIDs)
        if err != nil {
                return err
        }
        protectBranch.ApprovalsWhitelistUserIDs = whitelist
 
        // if the repo is in an organization
-       whitelist, err = updateTeamWhitelist(repo, protectBranch.WhitelistTeamIDs, opts.TeamIDs)
+       whitelist, err = updateTeamWhitelist(ctx, repo, protectBranch.WhitelistTeamIDs, opts.TeamIDs)
        if err != nil {
                return err
        }
        protectBranch.WhitelistTeamIDs = whitelist
 
-       whitelist, err = updateTeamWhitelist(repo, protectBranch.MergeWhitelistTeamIDs, opts.MergeTeamIDs)
+       whitelist, err = updateTeamWhitelist(ctx, repo, protectBranch.MergeWhitelistTeamIDs, opts.MergeTeamIDs)
        if err != nil {
                return err
        }
        protectBranch.MergeWhitelistTeamIDs = whitelist
 
-       whitelist, err = updateTeamWhitelist(repo, protectBranch.ApprovalsWhitelistTeamIDs, opts.ApprovalsTeamIDs)
+       whitelist, err = updateTeamWhitelist(ctx, repo, protectBranch.ApprovalsWhitelistTeamIDs, opts.ApprovalsTeamIDs)
        if err != nil {
                return err
        }
@@ -381,13 +381,13 @@ func UpdateProtectBranch(repo *repo_model.Repository, protectBranch *ProtectedBr
 
        // Make sure protectBranch.ID is not 0 for whitelists
        if protectBranch.ID == 0 {
-               if _, err = db.GetEngine(db.DefaultContext).Insert(protectBranch); err != nil {
+               if _, err = db.GetEngine(ctx).Insert(protectBranch); err != nil {
                        return fmt.Errorf("Insert: %v", err)
                }
                return nil
        }
 
-       if _, err = db.GetEngine(db.DefaultContext).ID(protectBranch.ID).AllCols().Update(protectBranch); err != nil {
+       if _, err = db.GetEngine(ctx).ID(protectBranch.ID).AllCols().Update(protectBranch); err != nil {
                return fmt.Errorf("Update: %v", err)
        }
 
@@ -416,7 +416,7 @@ func IsProtectedBranch(repoID int64, branchName string) (bool, error) {
 
 // updateApprovalWhitelist checks whether the user whitelist changed and returns a whitelist with
 // the users from newWhitelist which have explicit read or write access to the repo.
-func updateApprovalWhitelist(repo *repo_model.Repository, currentWhitelist, newWhitelist []int64) (whitelist []int64, err error) {
+func updateApprovalWhitelist(ctx context.Context, repo *repo_model.Repository, currentWhitelist, newWhitelist []int64) (whitelist []int64, err error) {
        hasUsersChanged := !util.IsSliceInt64Eq(currentWhitelist, newWhitelist)
        if !hasUsersChanged {
                return currentWhitelist, nil
@@ -424,7 +424,7 @@ func updateApprovalWhitelist(repo *repo_model.Repository, currentWhitelist, newW
 
        whitelist = make([]int64, 0, len(newWhitelist))
        for _, userID := range newWhitelist {
-               if reader, err := IsRepoReader(repo, userID); err != nil {
+               if reader, err := IsRepoReader(ctx, repo, userID); err != nil {
                        return nil, err
                } else if !reader {
                        continue
@@ -437,7 +437,7 @@ func updateApprovalWhitelist(repo *repo_model.Repository, currentWhitelist, newW
 
 // updateUserWhitelist checks whether the user whitelist changed and returns a whitelist with
 // the users from newWhitelist which have write access to the repo.
-func updateUserWhitelist(repo *repo_model.Repository, currentWhitelist, newWhitelist []int64) (whitelist []int64, err error) {
+func updateUserWhitelist(ctx context.Context, repo *repo_model.Repository, currentWhitelist, newWhitelist []int64) (whitelist []int64, err error) {
        hasUsersChanged := !util.IsSliceInt64Eq(currentWhitelist, newWhitelist)
        if !hasUsersChanged {
                return currentWhitelist, nil
@@ -445,11 +445,11 @@ func updateUserWhitelist(repo *repo_model.Repository, currentWhitelist, newWhite
 
        whitelist = make([]int64, 0, len(newWhitelist))
        for _, userID := range newWhitelist {
-               user, err := user_model.GetUserByID(userID)
+               user, err := user_model.GetUserByIDCtx(ctx, userID)
                if err != nil {
                        return nil, fmt.Errorf("GetUserByID [user_id: %d, repo_id: %d]: %v", userID, repo.ID, err)
                }
-               perm, err := GetUserRepoPermission(repo, user)
+               perm, err := GetUserRepoPermission(ctx, repo, user)
                if err != nil {
                        return nil, fmt.Errorf("GetUserRepoPermission [user_id: %d, repo_id: %d]: %v", userID, repo.ID, err)
                }
@@ -466,13 +466,13 @@ func updateUserWhitelist(repo *repo_model.Repository, currentWhitelist, newWhite
 
 // updateTeamWhitelist checks whether the team whitelist changed and returns a whitelist with
 // the teams from newWhitelist which have write access to the repo.
-func updateTeamWhitelist(repo *repo_model.Repository, currentWhitelist, newWhitelist []int64) (whitelist []int64, err error) {
+func updateTeamWhitelist(ctx context.Context, repo *repo_model.Repository, currentWhitelist, newWhitelist []int64) (whitelist []int64, err error) {
        hasTeamsChanged := !util.IsSliceInt64Eq(currentWhitelist, newWhitelist)
        if !hasTeamsChanged {
                return currentWhitelist, nil
        }
 
-       teams, err := organization.GetTeamsWithAccessToRepo(repo.OwnerID, repo.ID, perm.AccessModeRead)
+       teams, err := organization.GetTeamsWithAccessToRepo(ctx, repo.OwnerID, repo.ID, perm.AccessModeRead)
        if err != nil {
                return nil, fmt.Errorf("GetTeamsWithAccessToRepo [org_id: %d, repo_id: %d]: %v", repo.OwnerID, repo.ID, err)
        }
index e1a71853f20b6120c3c59489ad9b2a60a406ef1f..0a0f125cc6e8dc636032c6c2978adfc533c830c4 100644 (file)
@@ -7,6 +7,7 @@ package models
 import (
        "testing"
 
+       "code.gitea.io/gitea/models/db"
        repo_model "code.gitea.io/gitea/models/repo"
        "code.gitea.io/gitea/models/unittest"
 
@@ -99,11 +100,14 @@ func TestRenameBranch(t *testing.T) {
        repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository)
        _isDefault := false
 
-       err := UpdateProtectBranch(repo1, &ProtectedBranch{
+       ctx, committer, err := db.TxContext()
+       defer committer.Close()
+       assert.NoError(t, err)
+       assert.NoError(t, UpdateProtectBranch(ctx, repo1, &ProtectedBranch{
                RepoID:     repo1.ID,
                BranchName: "master",
-       }, WhitelistOptions{})
-       assert.NoError(t, err)
+       }, WhitelistOptions{}))
+       assert.NoError(t, committer.Commit())
 
        assert.NoError(t, RenameBranch(repo1, "master", "main", func(isDefault bool) error {
                _isDefault = isDefault
index cd7497eed8e00f2d84da354df6d8c13394815da4..cf2143d30f4c689914f2654f0063756916e7c672 100644 (file)
@@ -232,12 +232,13 @@ type CommitStatusIndex struct {
 
 // GetLatestCommitStatus returns all statuses with a unique context for a given commit.
 func GetLatestCommitStatus(repoID int64, sha string, listOptions db.ListOptions) ([]*CommitStatus, int64, error) {
-       return getLatestCommitStatus(db.GetEngine(db.DefaultContext), repoID, sha, listOptions)
+       return GetLatestCommitStatusCtx(db.DefaultContext, repoID, sha, listOptions)
 }
 
-func getLatestCommitStatus(e db.Engine, repoID int64, sha string, listOptions db.ListOptions) ([]*CommitStatus, int64, error) {
+// GetLatestCommitStatusCtx returns all statuses with a unique context for a given commit.
+func GetLatestCommitStatusCtx(ctx context.Context, repoID int64, sha string, listOptions db.ListOptions) ([]*CommitStatus, int64, error) {
        ids := make([]int64, 0, 10)
-       sess := e.Table(&CommitStatus{}).
+       sess := db.GetEngine(ctx).Table(&CommitStatus{}).
                Where("repo_id = ?", repoID).And("sha = ?", sha).
                Select("max( id ) as id").
                GroupBy("context_hash").OrderBy("max( id ) desc")
@@ -252,7 +253,7 @@ func getLatestCommitStatus(e db.Engine, repoID int64, sha string, listOptions db
        if len(ids) == 0 {
                return statuses, count, nil
        }
-       return statuses, count, e.In("id", ids).Find(&statuses)
+       return statuses, count, db.GetEngine(ctx).In("id", ids).Find(&statuses)
 }
 
 // FindRepoRecentCommitStatusContexts returns repository's recent commit status contexts
index 8bb46bde7e294821138c1b343420ca3007365bea..2a41cbc28efd9a7fb14523a7ac4044280713e040 100644 (file)
@@ -162,13 +162,9 @@ func (issue *Issue) GetPullRequest() (pr *PullRequest, err error) {
 }
 
 // LoadLabels loads labels
-func (issue *Issue) LoadLabels() error {
-       return issue.loadLabels(db.GetEngine(db.DefaultContext))
-}
-
-func (issue *Issue) loadLabels(e db.Engine) (err error) {
+func (issue *Issue) LoadLabels(ctx context.Context) (err error) {
        if issue.Labels == nil {
-               issue.Labels, err = getLabelsByIssueID(e, issue.ID)
+               issue.Labels, err = getLabelsByIssueID(db.GetEngine(ctx), issue.ID)
                if err != nil {
                        return fmt.Errorf("getLabelsByIssueID [%d]: %v", issue.ID, err)
                }
@@ -313,7 +309,7 @@ func (issue *Issue) loadAttributes(ctx context.Context) (err error) {
                return
        }
 
-       if err = issue.loadLabels(e); err != nil {
+       if err = issue.LoadLabels(ctx); err != nil {
                return
        }
 
@@ -493,7 +489,7 @@ func ClearIssueLabels(issue *Issue, doer *user_model.User) (err error) {
                return err
        }
 
-       perm, err := getUserRepoPermission(ctx, issue.Repo, doer)
+       perm, err := GetUserRepoPermission(ctx, issue.Repo, doer)
        if err != nil {
                return err
        }
@@ -539,7 +535,7 @@ func ReplaceIssueLabels(issue *Issue, labels []*Label, doer *user_model.User) (e
                return err
        }
 
-       if err = issue.loadLabels(db.GetEngine(ctx)); err != nil {
+       if err = issue.LoadLabels(ctx); err != nil {
                return err
        }
 
@@ -587,7 +583,7 @@ func ReplaceIssueLabels(issue *Issue, labels []*Label, doer *user_model.User) (e
        }
 
        issue.Labels = nil
-       if err = issue.loadLabels(db.GetEngine(ctx)); err != nil {
+       if err = issue.LoadLabels(ctx); err != nil {
                return err
        }
 
@@ -2341,9 +2337,9 @@ func ResolveIssueMentionsByVisibility(ctx context.Context, issue *Issue, doer *u
                        continue
                }
                // Normal users must have read access to the referencing issue
-               perm, err := getUserRepoPermission(ctx, issue.Repo, user)
+               perm, err := GetUserRepoPermission(ctx, issue.Repo, user)
                if err != nil {
-                       return nil, fmt.Errorf("getUserRepoPermission [%d]: %v", user.ID, err)
+                       return nil, fmt.Errorf("GetUserRepoPermission [%d]: %v", user.ID, err)
                }
                if !perm.CanReadIssuesOrPulls(issue.IsPull) {
                        continue
index 25e6350bc1a66828e1c88e2f0aefaa2a68dccf2c..d0691539390871475d8a8500da01865e42db9bf7 100644 (file)
@@ -613,7 +613,6 @@ func NewIssueLabel(issue *Issue, label *Label, doer *user_model.User) (err error
                return err
        }
        defer committer.Close()
-       sess := db.GetEngine(ctx)
 
        if err = issue.LoadRepo(ctx); err != nil {
                return err
@@ -629,7 +628,7 @@ func NewIssueLabel(issue *Issue, label *Label, doer *user_model.User) (err error
        }
 
        issue.Labels = nil
-       if err = issue.loadLabels(sess); err != nil {
+       if err = issue.LoadLabels(ctx); err != nil {
                return err
        }
 
@@ -670,7 +669,7 @@ func NewIssueLabels(issue *Issue, labels []*Label, doer *user_model.User) (err e
        }
 
        issue.Labels = nil
-       if err = issue.loadLabels(db.GetEngine(ctx)); err != nil {
+       if err = issue.LoadLabels(ctx); err != nil {
                return err
        }
 
@@ -707,23 +706,13 @@ func deleteIssueLabel(ctx context.Context, issue *Issue, label *Label, doer *use
 }
 
 // DeleteIssueLabel deletes issue-label relation.
-func DeleteIssueLabel(issue *Issue, label *Label, doer *user_model.User) (err error) {
-       ctx, committer, err := db.TxContext()
-       if err != nil {
-               return err
-       }
-       defer committer.Close()
-
-       if err = deleteIssueLabel(ctx, issue, label, doer); err != nil {
+func DeleteIssueLabel(ctx context.Context, issue *Issue, label *Label, doer *user_model.User) error {
+       if err := deleteIssueLabel(ctx, issue, label, doer); err != nil {
                return err
        }
 
        issue.Labels = nil
-       if err = issue.loadLabels(db.GetEngine(ctx)); err != nil {
-               return err
-       }
-
-       return committer.Commit()
+       return issue.LoadLabels(ctx)
 }
 
 func deleteLabelsByRepoID(sess db.Engine, repoID int64) error {
index c9ff1a270f6b9d4f208965f8a1bba4801df43ab0..2dd0cf98e085ccc1354a2e1079d5bfb76391aa8c 100644 (file)
@@ -369,7 +369,12 @@ func TestDeleteIssueLabel(t *testing.T) {
                        }
                }
 
-               assert.NoError(t, DeleteIssueLabel(issue, label, doer))
+               ctx, committer, err := db.TxContext()
+               defer committer.Close()
+               assert.NoError(t, err)
+               assert.NoError(t, DeleteIssueLabel(ctx, issue, label, doer))
+               assert.NoError(t, committer.Commit())
+
                unittest.AssertNotExistsBean(t, &IssueLabel{IssueID: issueID, LabelID: labelID})
                unittest.AssertExistsAndLoadBean(t, &Comment{
                        Type:     CommentTypeLabel,
index 405f1dae2270411d7d13507c1c05090da76657c7..2647f9c6560f77526e5c7e76efb84418474a3d9f 100644 (file)
@@ -215,7 +215,7 @@ func (issue *Issue) verifyReferencedIssue(stdCtx context.Context, ctx *crossRefe
 
        // Check doer permissions; set action to None if the doer can't change the destination
        if refIssue.RepoID != ctx.OrigIssue.RepoID || ref.Action != references.XRefActionNone {
-               perm, err := getUserRepoPermission(stdCtx, refIssue.Repo, ctx.Doer)
+               perm, err := GetUserRepoPermission(stdCtx, refIssue.Repo, ctx.Doer)
                if err != nil {
                        return nil, references.XRefActionNone, err
                }
index a77dd24e9fa6d8b89aea4817c1e653e6f64ee420..b5f8e4907fbf061eae7090ddb848c180ae4afd77 100644 (file)
@@ -5,6 +5,7 @@
 package models
 
 import (
+       "context"
        "fmt"
        "path"
        "strings"
@@ -42,15 +43,20 @@ func cleanPath(p string) string {
 
 // CreateLFSLock creates a new lock.
 func CreateLFSLock(repo *repo_model.Repository, lock *LFSLock) (*LFSLock, error) {
-       err := CheckLFSAccessForRepo(lock.OwnerID, repo, perm.AccessModeWrite)
+       dbCtx, committer, err := db.TxContext()
        if err != nil {
                return nil, err
        }
+       defer committer.Close()
+
+       if err := CheckLFSAccessForRepo(dbCtx, lock.OwnerID, repo, perm.AccessModeWrite); err != nil {
+               return nil, err
+       }
 
        lock.Path = cleanPath(lock.Path)
        lock.RepoID = repo.ID
 
-       l, err := GetLFSLock(repo, lock.Path)
+       l, err := GetLFSLock(dbCtx, repo, lock.Path)
        if err == nil {
                return l, ErrLFSLockAlreadyExist{lock.RepoID, lock.Path}
        }
@@ -58,15 +64,18 @@ func CreateLFSLock(repo *repo_model.Repository, lock *LFSLock) (*LFSLock, error)
                return nil, err
        }
 
-       err = db.Insert(db.DefaultContext, lock)
-       return lock, err
+       if err := db.Insert(dbCtx, lock); err != nil {
+               return nil, err
+       }
+
+       return lock, committer.Commit()
 }
 
 // GetLFSLock returns release by given path.
-func GetLFSLock(repo *repo_model.Repository, path string) (*LFSLock, error) {
+func GetLFSLock(ctx context.Context, repo *repo_model.Repository, path string) (*LFSLock, error) {
        path = cleanPath(path)
        rel := &LFSLock{RepoID: repo.ID}
-       has, err := db.GetEngine(db.DefaultContext).Where("lower(path) = ?", strings.ToLower(path)).Get(rel)
+       has, err := db.GetEngine(ctx).Where("lower(path) = ?", strings.ToLower(path)).Get(rel)
        if err != nil {
                return nil, err
        }
@@ -77,9 +86,9 @@ func GetLFSLock(repo *repo_model.Repository, path string) (*LFSLock, error) {
 }
 
 // GetLFSLockByID returns release by given id.
-func GetLFSLockByID(id int64) (*LFSLock, error) {
+func GetLFSLockByID(ctx context.Context, id int64) (*LFSLock, error) {
        lock := new(LFSLock)
-       has, err := db.GetEngine(db.DefaultContext).ID(id).Get(lock)
+       has, err := db.GetEngine(ctx).ID(id).Get(lock)
        if err != nil {
                return nil, err
        } else if !has {
@@ -127,34 +136,42 @@ func CountLFSLockByRepoID(repoID int64) (int64, error) {
 
 // DeleteLFSLockByID deletes a lock by given ID.
 func DeleteLFSLockByID(id int64, repo *repo_model.Repository, u *user_model.User, force bool) (*LFSLock, error) {
-       lock, err := GetLFSLockByID(id)
+       dbCtx, committer, err := db.TxContext()
        if err != nil {
                return nil, err
        }
+       defer committer.Close()
 
-       err = CheckLFSAccessForRepo(u.ID, repo, perm.AccessModeWrite)
+       lock, err := GetLFSLockByID(dbCtx, id)
        if err != nil {
                return nil, err
        }
 
+       if err := CheckLFSAccessForRepo(dbCtx, u.ID, repo, perm.AccessModeWrite); err != nil {
+               return nil, err
+       }
+
        if !force && u.ID != lock.OwnerID {
                return nil, fmt.Errorf("user doesn't own lock and force flag is not set")
        }
 
-       _, err = db.GetEngine(db.DefaultContext).ID(id).Delete(new(LFSLock))
-       return lock, err
+       if _, err := db.GetEngine(dbCtx).ID(id).Delete(new(LFSLock)); err != nil {
+               return nil, err
+       }
+
+       return lock, committer.Commit()
 }
 
 // CheckLFSAccessForRepo check needed access mode base on action
-func CheckLFSAccessForRepo(ownerID int64, repo *repo_model.Repository, mode perm.AccessMode) error {
+func CheckLFSAccessForRepo(ctx context.Context, ownerID int64, repo *repo_model.Repository, mode perm.AccessMode) error {
        if ownerID == 0 {
                return ErrLFSUnauthorizedAction{repo.ID, "undefined", mode}
        }
-       u, err := user_model.GetUserByID(ownerID)
+       u, err := user_model.GetUserByIDCtx(ctx, ownerID)
        if err != nil {
                return err
        }
-       perm, err := GetUserRepoPermission(repo, u)
+       perm, err := GetUserRepoPermission(ctx, repo, u)
        if err != nil {
                return err
        }
index 9e71bbe80d4e368cf7f7ad3b7bb16a2db2957f45..3761335922a4a955e05d4267896d6034de538bbb 100644 (file)
@@ -683,7 +683,7 @@ func (org *Organization) getUserTeamIDs(ctx context.Context, userID int64) ([]in
 
 // TeamsWithAccessToRepo returns all teams that have given access level to the repository.
 func (org *Organization) TeamsWithAccessToRepo(repoID int64, mode perm.AccessMode) ([]*Team, error) {
-       return GetTeamsWithAccessToRepo(org.ID, repoID, mode)
+       return GetTeamsWithAccessToRepo(db.DefaultContext, org.ID, repoID, mode)
 }
 
 // GetUserTeamIDs returns of all team IDs of the organization that user is member of.
index 657e83aaa56fa6644025b93313e26e55ccfbf64e..717d754c40b7f2c6c1602c2133ad88840fc21604 100644 (file)
@@ -75,9 +75,9 @@ func RemoveTeamRepo(ctx context.Context, teamID, repoID int64) error {
 }
 
 // GetTeamsWithAccessToRepo returns all teams in an organization that have given access level to the repository.
-func GetTeamsWithAccessToRepo(orgID, repoID int64, mode perm.AccessMode) ([]*Team, error) {
+func GetTeamsWithAccessToRepo(ctx context.Context, orgID, repoID int64, mode perm.AccessMode) ([]*Team, error) {
        teams := make([]*Team, 0, 5)
-       return teams, db.GetEngine(db.DefaultContext).Where("team.authorize >= ?", mode).
+       return teams, db.GetEngine(ctx).Where("team.authorize >= ?", mode).
                Join("INNER", "team_repo", "team_repo.team_id = team.id").
                And("team_repo.org_id = ?", orgID).
                And("team_repo.repo_id = ?", repoID).
index ac44ebf0bea240fdc4d6f88e204297382224d436..e04263af9ffe7b031fcbfa3116ff1e1536f5c81e 100644 (file)
@@ -130,7 +130,8 @@ func (pr *PullRequest) LoadAttributes() error {
        return pr.loadAttributes(db.GetEngine(db.DefaultContext))
 }
 
-func (pr *PullRequest) loadHeadRepo(ctx context.Context) (err error) {
+// LoadHeadRepoCtx loads the head repository
+func (pr *PullRequest) LoadHeadRepoCtx(ctx context.Context) (err error) {
        if !pr.isHeadRepoLoaded && pr.HeadRepo == nil && pr.HeadRepoID > 0 {
                if pr.HeadRepoID == pr.BaseRepoID {
                        if pr.BaseRepo != nil {
@@ -153,15 +154,16 @@ func (pr *PullRequest) loadHeadRepo(ctx context.Context) (err error) {
 
 // LoadHeadRepo loads the head repository
 func (pr *PullRequest) LoadHeadRepo() error {
-       return pr.loadHeadRepo(db.DefaultContext)
+       return pr.LoadHeadRepoCtx(db.DefaultContext)
 }
 
 // LoadBaseRepo loads the target repository
 func (pr *PullRequest) LoadBaseRepo() error {
-       return pr.loadBaseRepo(db.DefaultContext)
+       return pr.LoadBaseRepoCtx(db.DefaultContext)
 }
 
-func (pr *PullRequest) loadBaseRepo(ctx context.Context) (err error) {
+// LoadBaseRepoCtx loads the target repository
+func (pr *PullRequest) LoadBaseRepoCtx(ctx context.Context) (err error) {
        if pr.BaseRepo != nil {
                return nil
        }
@@ -185,15 +187,16 @@ func (pr *PullRequest) loadBaseRepo(ctx context.Context) (err error) {
 
 // LoadIssue loads issue information from database
 func (pr *PullRequest) LoadIssue() (err error) {
-       return pr.loadIssue(db.GetEngine(db.DefaultContext))
+       return pr.LoadIssueCtx(db.DefaultContext)
 }
 
-func (pr *PullRequest) loadIssue(e db.Engine) (err error) {
+// LoadIssueCtx loads issue information from database
+func (pr *PullRequest) LoadIssueCtx(ctx context.Context) (err error) {
        if pr.Issue != nil {
                return nil
        }
 
-       pr.Issue, err = getIssueByID(e, pr.IssueID)
+       pr.Issue, err = getIssueByID(db.GetEngine(ctx), pr.IssueID)
        if err == nil {
                pr.Issue.PullRequest = pr
        }
@@ -202,10 +205,11 @@ func (pr *PullRequest) loadIssue(e db.Engine) (err error) {
 
 // LoadProtectedBranch loads the protected branch of the base branch
 func (pr *PullRequest) LoadProtectedBranch() (err error) {
-       return pr.loadProtectedBranch(db.DefaultContext)
+       return pr.LoadProtectedBranchCtx(db.DefaultContext)
 }
 
-func (pr *PullRequest) loadProtectedBranch(ctx context.Context) (err error) {
+// LoadProtectedBranchCtx loads the protected branch of the base branch
+func (pr *PullRequest) LoadProtectedBranchCtx(ctx context.Context) (err error) {
        if pr.ProtectedBranch == nil {
                if pr.BaseRepo == nil {
                        if pr.BaseRepoID == 0 {
@@ -392,7 +396,7 @@ func (pr *PullRequest) SetMerged() (bool, error) {
        }
 
        pr.Issue = nil
-       if err := pr.loadIssue(sess); err != nil {
+       if err := pr.LoadIssueCtx(ctx); err != nil {
                return false, err
        }
 
@@ -510,6 +514,11 @@ func GetLatestPullRequestByHeadInfo(repoID int64, branch string) (*PullRequest,
 
 // GetPullRequestByIndex returns a pull request by the given index
 func GetPullRequestByIndex(repoID, index int64) (*PullRequest, error) {
+       return GetPullRequestByIndexCtx(db.DefaultContext, repoID, index)
+}
+
+// GetPullRequestByIndexCtx returns a pull request by the given index
+func GetPullRequestByIndexCtx(ctx context.Context, repoID, index int64) (*PullRequest, error) {
        if index < 1 {
                return nil, ErrPullRequestNotExist{}
        }
@@ -518,17 +527,17 @@ func GetPullRequestByIndex(repoID, index int64) (*PullRequest, error) {
                Index:      index,
        }
 
-       has, err := db.GetEngine(db.DefaultContext).Get(pr)
+       has, err := db.GetEngine(ctx).Get(pr)
        if err != nil {
                return nil, err
        } else if !has {
                return nil, ErrPullRequestNotExist{0, 0, 0, repoID, "", ""}
        }
 
-       if err = pr.LoadAttributes(); err != nil {
+       if err = pr.loadAttributes(db.GetEngine(ctx)); err != nil {
                return nil, err
        }
-       if err = pr.LoadIssue(); err != nil {
+       if err = pr.LoadIssueCtx(ctx); err != nil {
                return nil, err
        }
 
@@ -547,8 +556,8 @@ func getPullRequestByID(e db.Engine, id int64) (*PullRequest, error) {
 }
 
 // GetPullRequestByID returns a pull request by given ID.
-func GetPullRequestByID(id int64) (*PullRequest, error) {
-       return getPullRequestByID(db.GetEngine(db.DefaultContext), id)
+func GetPullRequestByID(ctx context.Context, id int64) (*PullRequest, error) {
+       return getPullRequestByID(db.GetEngine(ctx), id)
 }
 
 // GetPullRequestByIssueIDWithNoAttributes returns pull request with no attributes loaded by given issue ID.
index 9d4d42892883b75d7cf0e093aac3d8db21868dd5..055119a1e5b6c209573766335543ea2ef9f4cb65 100644 (file)
@@ -5,6 +5,7 @@
 package models
 
 import (
+       "context"
        "fmt"
 
        "code.gitea.io/gitea/models/db"
@@ -158,13 +159,14 @@ func (prs PullRequestList) LoadAttributes() error {
        return prs.loadAttributes(db.GetEngine(db.DefaultContext))
 }
 
-func (prs PullRequestList) invalidateCodeComments(e db.Engine, doer *user_model.User, repo *git.Repository, branch string) error {
+// InvalidateCodeComments will lookup the prs for code comments which got invalidated by change
+func (prs PullRequestList) InvalidateCodeComments(ctx context.Context, doer *user_model.User, repo *git.Repository, branch string) error {
        if len(prs) == 0 {
                return nil
        }
        issueIDs := prs.getIssueIDs()
        var codeComments []*Comment
-       if err := e.
+       if err := db.GetEngine(ctx).
                Where("type = ? and invalidated = ?", CommentTypeCode, false).
                In("issue_id", issueIDs).
                Find(&codeComments); err != nil {
@@ -177,8 +179,3 @@ func (prs PullRequestList) invalidateCodeComments(e db.Engine, doer *user_model.
        }
        return nil
 }
-
-// InvalidateCodeComments will lookup the prs for code comments which got invalidated by change
-func (prs PullRequestList) InvalidateCodeComments(doer *user_model.User, repo *git.Repository, branch string) error {
-       return prs.invalidateCodeComments(db.GetEngine(db.DefaultContext), doer, repo, branch)
-}
index 9098b611617a63407ed57079053c797e18eff25b..6194ac0e2405fdceb3b497a975784d391d865893 100644 (file)
@@ -159,12 +159,12 @@ func TestGetPullRequestByIndex(t *testing.T) {
 
 func TestGetPullRequestByID(t *testing.T) {
        assert.NoError(t, unittest.PrepareTestDatabase())
-       pr, err := GetPullRequestByID(1)
+       pr, err := GetPullRequestByID(db.DefaultContext, 1)
        assert.NoError(t, err)
        assert.Equal(t, int64(1), pr.ID)
        assert.Equal(t, int64(2), pr.IssueID)
 
-       _, err = GetPullRequestByID(9223372036854775807)
+       _, err = GetPullRequestByID(db.DefaultContext, 9223372036854775807)
        assert.Error(t, err)
        assert.True(t, IsErrPullRequestNotExist(err))
 }
index 5073d1ceb9031c72fea0c8d50974364424a7d059..9c2fce8d3cd3e08eb55cefb8f9d8bccce449c9f9 100644 (file)
@@ -57,9 +57,9 @@ func checkRepoUnitUser(ctx context.Context, repo *repo_model.Repository, user *u
        if user.IsAdmin {
                return true
        }
-       perm, err := getUserRepoPermission(ctx, repo, user)
+       perm, err := GetUserRepoPermission(ctx, repo, user)
        if err != nil {
-               log.Error("getUserRepoPermission(): %v", err)
+               log.Error("GetUserRepoPermission(): %v", err)
                return false
        }
 
@@ -198,7 +198,7 @@ func GetReviewerTeams(repo *repo_model.Repository) ([]*organization.Team, error)
                return nil, nil
        }
 
-       teams, err := organization.GetTeamsWithAccessToRepo(repo.OwnerID, repo.ID, perm.AccessModeRead)
+       teams, err := organization.GetTeamsWithAccessToRepo(db.DefaultContext, repo.OwnerID, repo.ID, perm.AccessModeRead)
        if err != nil {
                return nil, err
        }
index 3e9ad04482d999d4d4436ac85ce4d2ef1b12bd96..b4291f2362d63b8253c410a355b0d99633c92844 100644 (file)
@@ -145,11 +145,7 @@ func (p *Permission) ColorFormat(s fmt.State) {
 }
 
 // GetUserRepoPermission returns the user permissions to the repository
-func GetUserRepoPermission(repo *repo_model.Repository, user *user_model.User) (Permission, error) {
-       return getUserRepoPermission(db.DefaultContext, repo, user)
-}
-
-func getUserRepoPermission(ctx context.Context, repo *repo_model.Repository, user *user_model.User) (perm Permission, err error) {
+func GetUserRepoPermission(ctx context.Context, repo *repo_model.Repository, user *user_model.User) (perm Permission, err error) {
        if log.IsTrace() {
                defer func() {
                        if user == nil {
@@ -347,7 +343,7 @@ func AccessLevelUnit(user *user_model.User, repo *repo_model.Repository, unitTyp
 }
 
 func accessLevelUnit(ctx context.Context, user *user_model.User, repo *repo_model.Repository, unitType unit.Type) (perm_model.AccessMode, error) {
-       perm, err := getUserRepoPermission(ctx, repo, user)
+       perm, err := GetUserRepoPermission(ctx, repo, user)
        if err != nil {
                return perm_model.AccessModeNone, err
        }
@@ -375,7 +371,7 @@ func canBeAssigned(ctx context.Context, user *user_model.User, repo *repo_model.
        if user.IsOrganization() {
                return false, fmt.Errorf("Organization can't be added as assignee [user_id: %d, repo_id: %d]", user.ID, repo.ID)
        }
-       perm, err := getUserRepoPermission(ctx, repo, user)
+       perm, err := GetUserRepoPermission(ctx, repo, user)
        if err != nil {
                return false, err
        }
@@ -391,7 +387,7 @@ func hasAccess(ctx context.Context, userID int64, repo *repo_model.Repository) (
                        return false, err
                }
        }
-       perm, err := getUserRepoPermission(ctx, repo, user)
+       perm, err := GetUserRepoPermission(ctx, repo, user)
        if err != nil {
                return false, err
        }
@@ -414,9 +410,9 @@ func GetRepoWriters(repo *repo_model.Repository) (_ []*user_model.User, err erro
 }
 
 // IsRepoReader returns true if user has explicit read access or higher to the repository.
-func IsRepoReader(repo *repo_model.Repository, userID int64) (bool, error) {
+func IsRepoReader(ctx context.Context, repo *repo_model.Repository, userID int64) (bool, error) {
        if repo.OwnerID == userID {
                return true, nil
        }
-       return db.GetEngine(db.DefaultContext).Where("repo_id = ? AND user_id = ? AND mode >= ?", repo.ID, userID, perm_model.AccessModeRead).Get(&Access{})
+       return db.GetEngine(ctx).Where("repo_id = ? AND user_id = ? AND mode >= ?", repo.ID, userID, perm_model.AccessModeRead).Get(&Access{})
 }
index c103a9363f82bf66cece52fa0b661c36c097f663..7e22437f997e398b7f37beb9436ab1f4e3a5877d 100644 (file)
@@ -27,7 +27,7 @@ func TestRepoPermissionPublicNonOrgRepo(t *testing.T) {
 
        // plain user
        user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User)
-       perm, err := GetUserRepoPermission(repo, user)
+       perm, err := GetUserRepoPermission(db.DefaultContext, repo, user)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -36,7 +36,7 @@ func TestRepoPermissionPublicNonOrgRepo(t *testing.T) {
 
        // change to collaborator
        assert.NoError(t, AddCollaborator(repo, user))
-       perm, err = GetUserRepoPermission(repo, user)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, user)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -45,7 +45,7 @@ func TestRepoPermissionPublicNonOrgRepo(t *testing.T) {
 
        // collaborator
        collaborator := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4}).(*user_model.User)
-       perm, err = GetUserRepoPermission(repo, collaborator)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, collaborator)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -54,7 +54,7 @@ func TestRepoPermissionPublicNonOrgRepo(t *testing.T) {
 
        // owner
        owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 5}).(*user_model.User)
-       perm, err = GetUserRepoPermission(repo, owner)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, owner)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -63,7 +63,7 @@ func TestRepoPermissionPublicNonOrgRepo(t *testing.T) {
 
        // admin
        admin := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}).(*user_model.User)
-       perm, err = GetUserRepoPermission(repo, admin)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, admin)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -80,7 +80,7 @@ func TestRepoPermissionPrivateNonOrgRepo(t *testing.T) {
 
        // plain user
        user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4}).(*user_model.User)
-       perm, err := GetUserRepoPermission(repo, user)
+       perm, err := GetUserRepoPermission(db.DefaultContext, repo, user)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.False(t, perm.CanRead(unit.Type))
@@ -89,7 +89,7 @@ func TestRepoPermissionPrivateNonOrgRepo(t *testing.T) {
 
        // change to collaborator to default write access
        assert.NoError(t, AddCollaborator(repo, user))
-       perm, err = GetUserRepoPermission(repo, user)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, user)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -97,7 +97,7 @@ func TestRepoPermissionPrivateNonOrgRepo(t *testing.T) {
        }
 
        assert.NoError(t, ChangeCollaborationAccessMode(repo, user.ID, perm_model.AccessModeRead))
-       perm, err = GetUserRepoPermission(repo, user)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, user)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -106,7 +106,7 @@ func TestRepoPermissionPrivateNonOrgRepo(t *testing.T) {
 
        // owner
        owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User)
-       perm, err = GetUserRepoPermission(repo, owner)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, owner)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -115,7 +115,7 @@ func TestRepoPermissionPrivateNonOrgRepo(t *testing.T) {
 
        // admin
        admin := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}).(*user_model.User)
-       perm, err = GetUserRepoPermission(repo, admin)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, admin)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -132,7 +132,7 @@ func TestRepoPermissionPublicOrgRepo(t *testing.T) {
 
        // plain user
        user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 5}).(*user_model.User)
-       perm, err := GetUserRepoPermission(repo, user)
+       perm, err := GetUserRepoPermission(db.DefaultContext, repo, user)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -141,7 +141,7 @@ func TestRepoPermissionPublicOrgRepo(t *testing.T) {
 
        // change to collaborator to default write access
        assert.NoError(t, AddCollaborator(repo, user))
-       perm, err = GetUserRepoPermission(repo, user)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, user)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -149,7 +149,7 @@ func TestRepoPermissionPublicOrgRepo(t *testing.T) {
        }
 
        assert.NoError(t, ChangeCollaborationAccessMode(repo, user.ID, perm_model.AccessModeRead))
-       perm, err = GetUserRepoPermission(repo, user)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, user)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -158,7 +158,7 @@ func TestRepoPermissionPublicOrgRepo(t *testing.T) {
 
        // org member team owner
        owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User)
-       perm, err = GetUserRepoPermission(repo, owner)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, owner)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -167,7 +167,7 @@ func TestRepoPermissionPublicOrgRepo(t *testing.T) {
 
        // org member team tester
        member := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 15}).(*user_model.User)
-       perm, err = GetUserRepoPermission(repo, member)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, member)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -177,7 +177,7 @@ func TestRepoPermissionPublicOrgRepo(t *testing.T) {
 
        // admin
        admin := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}).(*user_model.User)
-       perm, err = GetUserRepoPermission(repo, admin)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, admin)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -194,7 +194,7 @@ func TestRepoPermissionPrivateOrgRepo(t *testing.T) {
 
        // plain user
        user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 5}).(*user_model.User)
-       perm, err := GetUserRepoPermission(repo, user)
+       perm, err := GetUserRepoPermission(db.DefaultContext, repo, user)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.False(t, perm.CanRead(unit.Type))
@@ -203,7 +203,7 @@ func TestRepoPermissionPrivateOrgRepo(t *testing.T) {
 
        // change to collaborator to default write access
        assert.NoError(t, AddCollaborator(repo, user))
-       perm, err = GetUserRepoPermission(repo, user)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, user)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -211,7 +211,7 @@ func TestRepoPermissionPrivateOrgRepo(t *testing.T) {
        }
 
        assert.NoError(t, ChangeCollaborationAccessMode(repo, user.ID, perm_model.AccessModeRead))
-       perm, err = GetUserRepoPermission(repo, user)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, user)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -220,7 +220,7 @@ func TestRepoPermissionPrivateOrgRepo(t *testing.T) {
 
        // org member team owner
        owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 15}).(*user_model.User)
-       perm, err = GetUserRepoPermission(repo, owner)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, owner)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -231,7 +231,7 @@ func TestRepoPermissionPrivateOrgRepo(t *testing.T) {
        team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 5}).(*organization.Team)
        err = organization.UpdateTeamUnits(team, nil)
        assert.NoError(t, err)
-       perm, err = GetUserRepoPermission(repo, owner)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, owner)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
@@ -240,7 +240,7 @@ func TestRepoPermissionPrivateOrgRepo(t *testing.T) {
 
        // org member team tester
        tester := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User)
-       perm, err = GetUserRepoPermission(repo, tester)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, tester)
        assert.NoError(t, err)
        assert.True(t, perm.CanWrite(unit.TypeIssues))
        assert.False(t, perm.CanWrite(unit.TypeCode))
@@ -248,7 +248,7 @@ func TestRepoPermissionPrivateOrgRepo(t *testing.T) {
 
        // org member team reviewer
        reviewer := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 20}).(*user_model.User)
-       perm, err = GetUserRepoPermission(repo, reviewer)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, reviewer)
        assert.NoError(t, err)
        assert.False(t, perm.CanRead(unit.TypeIssues))
        assert.False(t, perm.CanWrite(unit.TypeCode))
@@ -256,7 +256,7 @@ func TestRepoPermissionPrivateOrgRepo(t *testing.T) {
 
        // admin
        admin := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}).(*user_model.User)
-       perm, err = GetUserRepoPermission(repo, admin)
+       perm, err = GetUserRepoPermission(db.DefaultContext, repo, admin)
        assert.NoError(t, err)
        for _, unit := range repo.Units {
                assert.True(t, perm.CanRead(unit.Type))
index 51818bc72220eec50aec18f1ade5656054dd4f87..a9e29a10e05caec3127688b35b7b1340a6c24520 100644 (file)
@@ -238,7 +238,7 @@ func isOfficialReviewer(ctx context.Context, issue *Issue, reviewers ...*user_mo
        if err != nil {
                return false, err
        }
-       if err = pr.loadProtectedBranch(ctx); err != nil {
+       if err = pr.LoadProtectedBranchCtx(ctx); err != nil {
                return false, err
        }
        if pr.ProtectedBranch == nil {
@@ -265,7 +265,7 @@ func isOfficialReviewerTeam(ctx context.Context, issue *Issue, team *organizatio
        if err != nil {
                return false, err
        }
-       if err = pr.loadProtectedBranch(ctx); err != nil {
+       if err = pr.LoadProtectedBranchCtx(ctx); err != nil {
                return false, err
        }
        if pr.ProtectedBranch == nil {
@@ -891,7 +891,7 @@ func CanMarkConversation(issue *Issue, doer *user_model.User) (permResult bool,
                        return false, err
                }
 
-               p, err := GetUserRepoPermission(issue.Repo, doer)
+               p, err := GetUserRepoPermission(db.DefaultContext, issue.Repo, doer)
                if err != nil {
                        return false, err
                }
index 4687434455a39587afc4db932d6a5c467baad39e..a02bb7e8691164600e197131da63fddf53b79ef2 100644 (file)
@@ -285,7 +285,7 @@ func RetrieveTemplateRepo(ctx *Context, repo *repo_model.Repository) {
                return
        }
 
-       perm, err := models.GetUserRepoPermission(templateRepo, ctx.Doer)
+       perm, err := models.GetUserRepoPermission(ctx, templateRepo, ctx.Doer)
        if err != nil {
                ctx.ServerError("GetUserRepoPermission", err)
                return
@@ -351,7 +351,7 @@ func repoAssignment(ctx *Context, repo *repo_model.Repository) {
                return
        }
 
-       ctx.Repo.Permission, err = models.GetUserRepoPermission(repo, ctx.Doer)
+       ctx.Repo.Permission, err = models.GetUserRepoPermission(ctx, repo, ctx.Doer)
        if err != nil {
                ctx.ServerError("GetUserRepoPermission", err)
                return
index 43300f603e55adf79625f71b750675f1f090f5ae..3f565f76e087c690b7fcc9b786b125b6b000ef28 100644 (file)
@@ -14,6 +14,7 @@ import (
        "code.gitea.io/gitea/models"
        asymkey_model "code.gitea.io/gitea/models/asymkey"
        "code.gitea.io/gitea/models/auth"
+       "code.gitea.io/gitea/models/db"
        "code.gitea.io/gitea/models/organization"
        "code.gitea.io/gitea/models/perm"
        repo_model "code.gitea.io/gitea/models/repo"
@@ -74,7 +75,7 @@ func ToBranch(repo *repo_model.Repository, b *git.Branch, c *git.Commit, bp *mod
        }
 
        if user != nil {
-               permission, err := models.GetUserRepoPermission(repo, user)
+               permission, err := models.GetUserRepoPermission(db.DefaultContext, repo, user)
                if err != nil {
                        return nil, err
                }
index 6cdb10f7daa6f79c60364a68740895189934114a..bf116e2283cf728fab5f2eef69cea85f8ba6ca43 100644 (file)
@@ -24,7 +24,7 @@ import (
 // Required - Poster, Labels,
 // Optional - Milestone, Assignee, PullRequest
 func ToAPIIssue(issue *models.Issue) *api.Issue {
-       if err := issue.LoadLabels(); err != nil {
+       if err := issue.LoadLabels(db.DefaultContext); err != nil {
                return &api.Issue{}
        }
        if err := issue.LoadPoster(); err != nil {
index 3b39e3d2c12697b441bda5ea71c255f572c72010..6034327a9d25fced87778c0a6fcf22f09b95817a 100644 (file)
@@ -33,17 +33,17 @@ func ToAPIPullRequest(ctx context.Context, pr *models.PullRequest, doer *user_mo
        }
 
        apiIssue := ToAPIIssue(pr.Issue)
-       if err := pr.LoadBaseRepo(); err != nil {
+       if err := pr.LoadBaseRepoCtx(ctx); err != nil {
                log.Error("GetRepositoryById[%d]: %v", pr.ID, err)
                return nil
        }
 
-       if err := pr.LoadHeadRepo(); err != nil {
+       if err := pr.LoadHeadRepoCtx(ctx); err != nil {
                log.Error("GetRepositoryById[%d]: %v", pr.ID, err)
                return nil
        }
 
-       p, err := models.GetUserRepoPermission(pr.BaseRepo, doer)
+       p, err := models.GetUserRepoPermission(ctx, pr.BaseRepo, doer)
        if err != nil {
                log.Error("GetUserRepoPermission[%d]: %v", pr.BaseRepoID, err)
                p.AccessMode = perm.AccessModeNone
@@ -130,7 +130,7 @@ func ToAPIPullRequest(ctx context.Context, pr *models.PullRequest, doer *user_mo
        }
 
        if pr.HeadRepo != nil && pr.Flow == models.PullRequestFlowGithub {
-               p, err := models.GetUserRepoPermission(pr.HeadRepo, doer)
+               p, err := models.GetUserRepoPermission(ctx, pr.HeadRepo, doer)
                if err != nil {
                        log.Error("GetUserRepoPermission[%d]: %v", pr.HeadRepoID, err)
                        p.AccessMode = perm.AccessModeNone
index 6636d18b99c06dc03b244385c8e92b075e1890f0..138e438751ddfdafcec87f952edbea92d883b7ac 100644 (file)
@@ -169,7 +169,7 @@ func (m *mailNotifier) NotifyPullRequestPushCommits(doer *user_model.User, pr *m
                log.Error("comment.Issue.LoadPullRequest: %v", err)
                return
        }
-       if err = comment.Issue.PullRequest.LoadBaseRepo(); err != nil {
+       if err = comment.Issue.PullRequest.LoadBaseRepoCtx(ctx); err != nil {
                log.Error("comment.Issue.PullRequest.LoadBaseRepo: %v", err)
                return
        }
index 2c6ae2f853acbfb16188ef1367aa8845563b5737..a05b221af810d52601def726703c865f778b981b 100644 (file)
@@ -60,7 +60,7 @@ func LoadRepo(t *testing.T, ctx *context.Context, repoID int64) {
        ctx.Repo.Owner, err = user_model.GetUserByID(ctx.Repo.Repository.OwnerID)
        assert.NoError(t, err)
        ctx.Repo.RepoLink = ctx.Repo.Repository.Link()
-       ctx.Repo.Permission, err = models.GetUserRepoPermission(ctx.Repo.Repository, ctx.Doer)
+       ctx.Repo.Permission, err = models.GetUserRepoPermission(ctx, ctx.Repo.Repository, ctx.Doer)
        assert.NoError(t, err)
 }
 
index aec2a6d7b2c4230a690f48810745f9bb6e2495da..cca0f37ba107f894b943ff6bc609b0b2a4f11a6a 100644 (file)
@@ -183,7 +183,7 @@ func repoAssignment() func(ctx *context.APIContext) {
                repo.Owner = owner
                ctx.Repo.Repository = repo
 
-               ctx.Repo.Permission, err = models.GetUserRepoPermission(repo, ctx.Doer)
+               ctx.Repo.Permission, err = models.GetUserRepoPermission(ctx, repo, ctx.Doer)
                if err != nil {
                        ctx.Error(http.StatusInternalServerError, "GetUserRepoPermission", err)
                        return
index f22bed813e152fc2ef568736985c19e4f8f7b740..794d367b53e731f22cd6129e2d331bcdf015f6dc 100644 (file)
@@ -498,7 +498,7 @@ func CreateBranchProtection(ctx *context.APIContext) {
                BlockOnOutdatedBranch:         form.BlockOnOutdatedBranch,
        }
 
-       err = models.UpdateProtectBranch(ctx.Repo.Repository, protectBranch, models.WhitelistOptions{
+       err = models.UpdateProtectBranch(ctx, ctx.Repo.Repository, protectBranch, models.WhitelistOptions{
                UserIDs:          whitelistUsers,
                TeamIDs:          whitelistTeams,
                MergeUserIDs:     mergeWhitelistUsers,
@@ -733,7 +733,7 @@ func EditBranchProtection(ctx *context.APIContext) {
                }
        }
 
-       err = models.UpdateProtectBranch(ctx.Repo.Repository, protectBranch, models.WhitelistOptions{
+       err = models.UpdateProtectBranch(ctx, ctx.Repo.Repository, protectBranch, models.WhitelistOptions{
                UserIDs:          whitelistUsers,
                TeamIDs:          whitelistTeams,
                MergeUserIDs:     mergeWhitelistUsers,
index ef91a2481c27335e89fe0f7a08d11d47c5b0a968..bc68cb396b97d828c772f65971b152d4b2d23c6a 100644 (file)
@@ -6,6 +6,7 @@
 package repo
 
 import (
+       stdCtx "context"
        "errors"
        "net/http"
 
@@ -183,7 +184,7 @@ func ListIssueCommentsAndTimeline(ctx *context.APIContext) {
 
        var apiComments []*api.TimelineComment
        for _, comment := range comments {
-               if comment.Type != models.CommentTypeCode && isXRefCommentAccessible(ctx.Doer, comment, issue.RepoID) {
+               if comment.Type != models.CommentTypeCode && isXRefCommentAccessible(ctx, ctx.Doer, comment, issue.RepoID) {
                        comment.Issue = issue
                        apiComments = append(apiComments, convert.ToTimelineComment(comment, ctx.Doer))
                }
@@ -193,16 +194,16 @@ func ListIssueCommentsAndTimeline(ctx *context.APIContext) {
        ctx.JSON(http.StatusOK, &apiComments)
 }
 
-func isXRefCommentAccessible(user *user_model.User, c *models.Comment, issueRepoID int64) bool {
+func isXRefCommentAccessible(ctx stdCtx.Context, user *user_model.User, c *models.Comment, issueRepoID int64) bool {
        // Remove comments that the user has no permissions to see
        if models.CommentTypeIsRef(c.Type) && c.RefRepoID != issueRepoID && c.RefRepoID != 0 {
                var err error
                // Set RefRepo for description in template
-               c.RefRepo, err = repo_model.GetRepositoryByID(c.RefRepoID)
+               c.RefRepo, err = repo_model.GetRepositoryByIDCtx(ctx, c.RefRepoID)
                if err != nil {
                        return false
                }
-               perm, err := models.GetUserRepoPermission(c.RefRepo, user)
+               perm, err := models.GetUserRepoPermission(ctx, c.RefRepo, user)
                if err != nil {
                        return false
                }
index 94262f81d18744dde17a3a5836b20cdf15d1b822..6b076eff8fad380007c00f86f59f38f0c735cb0b 100644 (file)
@@ -111,11 +111,11 @@ func ListPullRequests(ctx *context.APIContext) {
                        ctx.Error(http.StatusInternalServerError, "LoadAttributes", err)
                        return
                }
-               if err = prs[i].LoadBaseRepo(); err != nil {
+               if err = prs[i].LoadBaseRepoCtx(ctx); err != nil {
                        ctx.Error(http.StatusInternalServerError, "LoadBaseRepo", err)
                        return
                }
-               if err = prs[i].LoadHeadRepo(); err != nil {
+               if err = prs[i].LoadHeadRepoCtx(ctx); err != nil {
                        ctx.Error(http.StatusInternalServerError, "LoadHeadRepo", err)
                        return
                }
@@ -167,11 +167,11 @@ func GetPullRequest(ctx *context.APIContext) {
                return
        }
 
-       if err = pr.LoadBaseRepo(); err != nil {
+       if err = pr.LoadBaseRepoCtx(ctx); err != nil {
                ctx.Error(http.StatusInternalServerError, "LoadBaseRepo", err)
                return
        }
-       if err = pr.LoadHeadRepo(); err != nil {
+       if err = pr.LoadHeadRepoCtx(ctx); err != nil {
                ctx.Error(http.StatusInternalServerError, "LoadHeadRepo", err)
                return
        }
@@ -724,7 +724,7 @@ func MergePullRequest(ctx *context.APIContext) {
                return
        }
 
-       if err := pr.LoadHeadRepo(); err != nil {
+       if err := pr.LoadHeadRepoCtx(ctx); err != nil {
                ctx.Error(http.StatusInternalServerError, "LoadHeadRepo", err)
                return
        }
@@ -943,7 +943,7 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
        }
 
        // user should have permission to read baseRepo's codes and pulls, NOT headRepo's
-       permBase, err := models.GetUserRepoPermission(baseRepo, ctx.Doer)
+       permBase, err := models.GetUserRepoPermission(ctx, baseRepo, ctx.Doer)
        if err != nil {
                headGitRepo.Close()
                ctx.Error(http.StatusInternalServerError, "GetUserRepoPermission", err)
@@ -962,7 +962,7 @@ func parseCompareInfo(ctx *context.APIContext, form api.CreatePullRequestOption)
        }
 
        // user should have permission to read headrepo's codes
-       permHead, err := models.GetUserRepoPermission(headRepo, ctx.Doer)
+       permHead, err := models.GetUserRepoPermission(ctx, headRepo, ctx.Doer)
        if err != nil {
                headGitRepo.Close()
                ctx.Error(http.StatusInternalServerError, "GetUserRepoPermission", err)
@@ -1063,18 +1063,18 @@ func UpdatePullRequest(ctx *context.APIContext) {
                return
        }
 
-       if err = pr.LoadBaseRepo(); err != nil {
+       if err = pr.LoadBaseRepoCtx(ctx); err != nil {
                ctx.Error(http.StatusInternalServerError, "LoadBaseRepo", err)
                return
        }
-       if err = pr.LoadHeadRepo(); err != nil {
+       if err = pr.LoadHeadRepoCtx(ctx); err != nil {
                ctx.Error(http.StatusInternalServerError, "LoadHeadRepo", err)
                return
        }
 
        rebase := ctx.FormString("style") == "rebase"
 
-       allowedUpdateByMerge, allowedUpdateByRebase, err := pull_service.IsUserAllowedToUpdate(pr, ctx.Doer)
+       allowedUpdateByMerge, allowedUpdateByRebase, err := pull_service.IsUserAllowedToUpdate(ctx, pr, ctx.Doer)
        if err != nil {
                ctx.Error(http.StatusInternalServerError, "IsUserAllowedToMerge", err)
                return
@@ -1151,7 +1151,7 @@ func GetPullRequestCommits(ctx *context.APIContext) {
                return
        }
 
-       if err := pr.LoadBaseRepo(); err != nil {
+       if err := pr.LoadBaseRepoCtx(ctx); err != nil {
                ctx.InternalServerError(err)
                return
        }
index 3b36f28326f5b05eb530bde8fd9830e5a8ad9c0a..b3ebe49bf512e365e00832d4c9194b94df763a81 100644 (file)
@@ -664,7 +664,7 @@ func apiReviewRequest(ctx *context.APIContext, opts api.PullReviewRequestOptions
 
        reviewers := make([]*user_model.User, 0, len(opts.Reviewers))
 
-       permDoer, err := models.GetUserRepoPermission(pr.Issue.Repo, ctx.Doer)
+       permDoer, err := models.GetUserRepoPermission(ctx, pr.Issue.Repo, ctx.Doer)
        if err != nil {
                ctx.Error(http.StatusInternalServerError, "GetUserRepoPermission", err)
                return
@@ -687,7 +687,7 @@ func apiReviewRequest(ctx *context.APIContext, opts api.PullReviewRequestOptions
                        return
                }
 
-               err = issue_service.IsValidReviewRequest(reviewer, ctx.Doer, isAdd, pr.Issue, &permDoer)
+               err = issue_service.IsValidReviewRequest(ctx, reviewer, ctx.Doer, isAdd, pr.Issue, &permDoer)
                if err != nil {
                        if models.IsErrNotValidReviewRequest(err) {
                                ctx.Error(http.StatusUnprocessableEntity, "NotValidReviewRequest", err)
@@ -736,7 +736,7 @@ func apiReviewRequest(ctx *context.APIContext, opts api.PullReviewRequestOptions
                                return
                        }
 
-                       err = issue_service.IsValidTeamReviewRequest(teamReviewer, ctx.Doer, isAdd, pr.Issue)
+                       err = issue_service.IsValidTeamReviewRequest(ctx, teamReviewer, ctx.Doer, isAdd, pr.Issue)
                        if err != nil {
                                if models.IsErrNotValidReviewRequest(err) {
                                        ctx.Error(http.StatusUnprocessableEntity, "NotValidReviewRequest", err)
index cec4c93d198f0030f6e18db1a260a728ba9f3294..29e83521420f311b8fb0ab6f5837c38cb984fe68 100644 (file)
@@ -555,7 +555,7 @@ func GetByID(ctx *context.APIContext) {
                return
        }
 
-       perm, err := models.GetUserRepoPermission(repo, ctx.Doer)
+       perm, err := models.GetUserRepoPermission(ctx, repo, ctx.Doer)
        if err != nil {
                ctx.Error(http.StatusInternalServerError, "AccessLevel", err)
                return
index 763fe1cf1c55932fcc300cc133c227035326b4bb..ccb6933787a1b7bad09e9940ae2afd347edea378 100644 (file)
@@ -290,7 +290,7 @@ func preReceiveBranch(ctx *preReceiveContext, oldCommitID, newCommitID, refFullN
                // 6b. Merge (from UI or API)
 
                // Get the PR, user and permissions for the user in the repository
-               pr, err := models.GetPullRequestByID(ctx.opts.PullRequestID)
+               pr, err := models.GetPullRequestByID(ctx, ctx.opts.PullRequestID)
                if err != nil {
                        log.Error("Unable to get PullRequest %d Error: %v", ctx.opts.PullRequestID, err)
                        ctx.JSON(http.StatusInternalServerError, private.Response{
@@ -468,7 +468,7 @@ func (ctx *preReceiveContext) loadPusherAndPermission() bool {
        }
        ctx.user = user
 
-       userPerm, err := models.GetUserRepoPermission(ctx.Repo.Repository, user)
+       userPerm, err := models.GetUserRepoPermission(ctx, ctx.Repo.Repository, user)
        if err != nil {
                log.Error("Unable to get Repo permission of repo %s/%s of User %s", ctx.Repo.Repository.OwnerName, ctx.Repo.Repository.Name, user.Name, err)
                ctx.JSON(http.StatusInternalServerError, private.Response{
index b0451df5d85eb57df0fd96080b96ad95945697b9..6ef0079a2be173fedd3f0d0adc4017ae4b395751 100644 (file)
@@ -320,7 +320,7 @@ func ServCommand(ctx *context.PrivateContext) {
                                mode = perm.AccessModeRead
                        }
 
-                       perm, err := models.GetUserRepoPermission(repo, user)
+                       perm, err := models.GetUserRepoPermission(ctx, repo, user)
                        if err != nil {
                                log.Error("Unable to get permissions for %-v with key %d in %-v Error: %v", user, key.ID, repo, err)
                                ctx.JSON(http.StatusInternalServerError, private.ErrServCommand{
index be5b5812d380549649d4f931f3e08aa34675d61f..c930311f70f241e48c25984e57f6e1b21493ecf6 100644 (file)
@@ -106,7 +106,7 @@ func GetAttachment(ctx *context.Context) {
                        return
                }
        } else { // If we have the repository we check access
-               perm, err := models.GetUserRepoPermission(repository, ctx.Doer)
+               perm, err := models.GetUserRepoPermission(ctx, repository, ctx.Doer)
                if err != nil {
                        ctx.Error(http.StatusInternalServerError, "GetUserRepoPermission", err.Error())
                        return
index 0d139ec79c48e220dcb315579e571baf3a674f64..732b9c9d5473a46b39d3af52e57432e55b67f766 100644 (file)
@@ -279,7 +279,7 @@ func loadOneBranch(ctx *context.Context, rawBranch, defaultBranch *git.Branch, p
                }
                if repo, ok := repoIDToRepo[pr.BaseRepoID]; ok {
                        pr.BaseRepo = repo
-               } else if err := pr.LoadBaseRepo(); err != nil {
+               } else if err := pr.LoadBaseRepoCtx(ctx); err != nil {
                        ctx.ServerError("pr.LoadBaseRepo", err)
                        return nil
                } else {
index 60c6ae0298c22fab3a87bbd56c74f9fb5c8f3c1e..9f7bef43ef7ebc506cd2192165f14ca6480538d3 100644 (file)
@@ -402,7 +402,7 @@ func ParseCompareInfo(ctx *context.Context) *CompareInfo {
        // Now we need to assert that the ctx.Doer has permission to read
        // the baseRepo's code and pulls
        // (NOT headRepo's)
-       permBase, err := models.GetUserRepoPermission(baseRepo, ctx.Doer)
+       permBase, err := models.GetUserRepoPermission(ctx, baseRepo, ctx.Doer)
        if err != nil {
                ctx.ServerError("GetUserRepoPermission", err)
                return nil
@@ -421,7 +421,7 @@ func ParseCompareInfo(ctx *context.Context) *CompareInfo {
        // If we're not merging from the same repo:
        if !isSameRepo {
                // Assert ctx.Doer has permission to read headRepo's codes
-               permHead, err := models.GetUserRepoPermission(ci.HeadRepo, ctx.Doer)
+               permHead, err := models.GetUserRepoPermission(ctx, ci.HeadRepo, ctx.Doer)
                if err != nil {
                        ctx.ServerError("GetUserRepoPermission", err)
                        return nil
index 1306a543694558d76d3158d7af44cf2037c94cc1..cc44c8e7e4fbddd371b1a2f2d7ecc3b4454211cd 100644 (file)
@@ -181,7 +181,7 @@ func httpBase(ctx *context.Context) (h *serviceHandler) {
                }
 
                if repoExist {
-                       p, err := models.GetUserRepoPermission(repo, ctx.Doer)
+                       p, err := models.GetUserRepoPermission(ctx, repo, ctx.Doer)
                        if err != nil {
                                ctx.ServerError("GetUserRepoPermission", err)
                                return
index ee36216d9fdd0dc104772a5e9bec800c74aa3833..8e865e448fc185c4416a2dd46b897eb380a8760b 100644 (file)
@@ -7,6 +7,7 @@ package repo
 
 import (
        "bytes"
+       stdCtx "context"
        "errors"
        "fmt"
        "io"
@@ -1052,8 +1053,8 @@ func NewIssuePost(ctx *context.Context) {
 }
 
 // roleDescriptor returns the Role Descriptor for a comment in/with the given repo, poster and issue
-func roleDescriptor(repo *repo_model.Repository, poster *user_model.User, issue *models.Issue) (models.RoleDescriptor, error) {
-       perm, err := models.GetUserRepoPermission(repo, poster)
+func roleDescriptor(ctx stdCtx.Context, repo *repo_model.Repository, poster *user_model.User, issue *models.Issue) (models.RoleDescriptor, error) {
+       perm, err := models.GetUserRepoPermission(ctx, repo, poster)
        if err != nil {
                return models.RoleDescriptorNone, err
        }
@@ -1350,7 +1351,7 @@ func ViewIssue(ctx *context.Context) {
        // check if dependencies can be created across repositories
        ctx.Data["AllowCrossRepositoryDependencies"] = setting.Service.AllowCrossRepositoryDependencies
 
-       if issue.ShowRole, err = roleDescriptor(repo, issue.Poster, issue); err != nil {
+       if issue.ShowRole, err = roleDescriptor(ctx, repo, issue.Poster, issue); err != nil {
                ctx.ServerError("roleDescriptor", err)
                return
        }
@@ -1389,7 +1390,7 @@ func ViewIssue(ctx *context.Context) {
                                continue
                        }
 
-                       comment.ShowRole, err = roleDescriptor(repo, comment.Poster, issue)
+                       comment.ShowRole, err = roleDescriptor(ctx, repo, comment.Poster, issue)
                        if err != nil {
                                ctx.ServerError("roleDescriptor", err)
                                return
@@ -1488,7 +1489,7 @@ func ViewIssue(ctx *context.Context) {
                                                        continue
                                                }
 
-                                               c.ShowRole, err = roleDescriptor(repo, c.Poster, issue)
+                                               c.ShowRole, err = roleDescriptor(ctx, repo, c.Poster, issue)
                                                if err != nil {
                                                        ctx.ServerError("roleDescriptor", err)
                                                        return
@@ -1526,10 +1527,10 @@ func ViewIssue(ctx *context.Context) {
                ctx.Data["AllowMerge"] = false
 
                if ctx.IsSigned {
-                       if err := pull.LoadHeadRepo(); err != nil {
+                       if err := pull.LoadHeadRepoCtx(ctx); err != nil {
                                log.Error("LoadHeadRepo: %v", err)
                        } else if pull.HeadRepo != nil && pull.HeadBranch != pull.HeadRepo.DefaultBranch {
-                               perm, err := models.GetUserRepoPermission(pull.HeadRepo, ctx.Doer)
+                               perm, err := models.GetUserRepoPermission(ctx, pull.HeadRepo, ctx.Doer)
                                if err != nil {
                                        ctx.ServerError("GetUserRepoPermission", err)
                                        return
@@ -1545,10 +1546,10 @@ func ViewIssue(ctx *context.Context) {
                                }
                        }
 
-                       if err := pull.LoadBaseRepo(); err != nil {
+                       if err := pull.LoadBaseRepoCtx(ctx); err != nil {
                                log.Error("LoadBaseRepo: %v", err)
                        }
-                       perm, err := models.GetUserRepoPermission(pull.BaseRepo, ctx.Doer)
+                       perm, err := models.GetUserRepoPermission(ctx, pull.BaseRepo, ctx.Doer)
                        if err != nil {
                                ctx.ServerError("GetUserRepoPermission", err)
                                return
@@ -2038,7 +2039,7 @@ func UpdatePullReviewRequest(ctx *context.Context) {
                                return
                        }
 
-                       err = issue_service.IsValidTeamReviewRequest(team, ctx.Doer, action == "attach", issue)
+                       err = issue_service.IsValidTeamReviewRequest(ctx, team, ctx.Doer, action == "attach", issue)
                        if err != nil {
                                if models.IsErrNotValidReviewRequest(err) {
                                        log.Warn(
@@ -2076,7 +2077,7 @@ func UpdatePullReviewRequest(ctx *context.Context) {
                        return
                }
 
-               err = issue_service.IsValidReviewRequest(reviewer, ctx.Doer, action == "attach", issue, nil)
+               err = issue_service.IsValidReviewRequest(ctx, reviewer, ctx.Doer, action == "attach", issue, nil)
                if err != nil {
                        if models.IsErrNotValidReviewRequest(err) {
                                log.Warn(
@@ -2919,7 +2920,7 @@ func filterXRefComments(ctx *context.Context, issue *models.Issue) error {
                        if err != nil {
                                return err
                        }
-                       perm, err := models.GetUserRepoPermission(c.RefRepo, ctx.Doer)
+                       perm, err := models.GetUserRepoPermission(ctx, c.RefRepo, ctx.Doer)
                        if err != nil {
                                return err
                        }
index 113e2d8421125967ffc50e93392b2aa704ae4fa7..a03e16f39a2b3e3a36bb5035c812334fed6971a6 100644 (file)
@@ -70,7 +70,7 @@ func getRepository(ctx *context.Context, repoID int64) *repo_model.Repository {
                return nil
        }
 
-       perm, err := models.GetUserRepoPermission(repo, ctx.Doer)
+       perm, err := models.GetUserRepoPermission(ctx, repo, ctx.Doer)
        if err != nil {
                ctx.ServerError("GetUserRepoPermission", err)
                return nil
@@ -283,7 +283,7 @@ func checkPullInfo(ctx *context.Context) *models.Issue {
                return nil
        }
 
-       if err = issue.PullRequest.LoadHeadRepo(); err != nil {
+       if err = issue.PullRequest.LoadHeadRepoCtx(ctx); err != nil {
                ctx.ServerError("LoadHeadRepo", err)
                return nil
        }
@@ -397,12 +397,12 @@ func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.Compare
        repo := ctx.Repo.Repository
        pull := issue.PullRequest
 
-       if err := pull.LoadHeadRepo(); err != nil {
+       if err := pull.LoadHeadRepoCtx(ctx); err != nil {
                ctx.ServerError("LoadHeadRepo", err)
                return nil
        }
 
-       if err := pull.LoadBaseRepo(); err != nil {
+       if err := pull.LoadBaseRepoCtx(ctx); err != nil {
                ctx.ServerError("LoadBaseRepo", err)
                return nil
        }
@@ -499,7 +499,7 @@ func PrepareViewPullInfo(ctx *context.Context, issue *models.Issue) *git.Compare
 
        if headBranchExist {
                var err error
-               ctx.Data["UpdateAllowed"], ctx.Data["UpdateByRebaseAllowed"], err = pull_service.IsUserAllowedToUpdate(pull, ctx.Doer)
+               ctx.Data["UpdateAllowed"], ctx.Data["UpdateByRebaseAllowed"], err = pull_service.IsUserAllowedToUpdate(ctx, pull, ctx.Doer)
                if err != nil {
                        ctx.ServerError("IsUserAllowedToUpdate", err)
                        return nil
@@ -785,16 +785,16 @@ func UpdatePullRequest(ctx *context.Context) {
 
        rebase := ctx.FormString("style") == "rebase"
 
-       if err := issue.PullRequest.LoadBaseRepo(); err != nil {
+       if err := issue.PullRequest.LoadBaseRepoCtx(ctx); err != nil {
                ctx.ServerError("LoadBaseRepo", err)
                return
        }
-       if err := issue.PullRequest.LoadHeadRepo(); err != nil {
+       if err := issue.PullRequest.LoadHeadRepoCtx(ctx); err != nil {
                ctx.ServerError("LoadHeadRepo", err)
                return
        }
 
-       allowedUpdateByMerge, allowedUpdateByRebase, err := pull_service.IsUserAllowedToUpdate(issue.PullRequest, ctx.Doer)
+       allowedUpdateByMerge, allowedUpdateByRebase, err := pull_service.IsUserAllowedToUpdate(ctx, issue.PullRequest, ctx.Doer)
        if err != nil {
                ctx.ServerError("IsUserAllowedToMerge", err)
                return
@@ -1202,14 +1202,14 @@ func CleanUpPullRequest(ctx *context.Context) {
                return
        }
 
-       if err := pr.LoadHeadRepo(); err != nil {
+       if err := pr.LoadHeadRepoCtx(ctx); err != nil {
                ctx.ServerError("LoadHeadRepo", err)
                return
        } else if pr.HeadRepo == nil {
                // Forked repository has already been deleted
                ctx.NotFound("CleanUpPullRequest", nil)
                return
-       } else if err = pr.LoadBaseRepo(); err != nil {
+       } else if err = pr.LoadBaseRepoCtx(ctx); err != nil {
                ctx.ServerError("LoadBaseRepo", err)
                return
        } else if err = pr.HeadRepo.GetOwner(ctx); err != nil {
@@ -1217,7 +1217,7 @@ func CleanUpPullRequest(ctx *context.Context) {
                return
        }
 
-       perm, err := models.GetUserRepoPermission(pr.HeadRepo, ctx.Doer)
+       perm, err := models.GetUserRepoPermission(ctx, pr.HeadRepo, ctx.Doer)
        if err != nil {
                ctx.ServerError("GetUserRepoPermission", err)
                return
index a26a0a620a926be0aae904830390d02c0d62914e..1f6e2316e7dfec895ec63ae46da8434fcd3913c2 100644 (file)
@@ -261,7 +261,7 @@ func SettingsProtectedBranchPost(ctx *context.Context) {
                protectBranch.UnprotectedFilePatterns = f.UnprotectedFilePatterns
                protectBranch.BlockOnOutdatedBranch = f.BlockOnOutdatedBranch
 
-               err = models.UpdateProtectBranch(ctx.Repo.Repository, protectBranch, models.WhitelistOptions{
+               err = models.UpdateProtectBranch(ctx, ctx.Repo.Repository, protectBranch, models.WhitelistOptions{
                        UserIDs:          whitelistUsers,
                        TeamIDs:          whitelistTeams,
                        MergeUserIDs:     mergeWhitelistUsers,
index 5f8d16172da4a5e5883a4c9d758e1d0e3eb77c02..288923618171aee7119c67608f445593cfd899b4 100644 (file)
@@ -177,7 +177,7 @@ func ProcRecive(ctx *context.PrivateContext, opts *private.HookOptions) []privat
                }
 
                // update exist pull request
-               if err := pr.LoadBaseRepo(); err != nil {
+               if err := pr.LoadBaseRepoCtx(ctx); err != nil {
                        log.Error("Unable to load base repository for PR[%d] Error: %v", pr.ID, err)
                        ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
                                "Err": fmt.Sprintf("Unable to load base repository for PR[%d] Error: %v", pr.ID, err),
index c3f093a80810582a261b09029c10bf218ca3cad9..876cb7c205b3b3c3d858f7497be3964c0f1cdf00 100644 (file)
@@ -271,7 +271,7 @@ Loop:
 
 // SignMerge determines if we should sign a PR merge commit to the base repository
 func SignMerge(ctx context.Context, pr *models.PullRequest, u *user_model.User, tmpBasePath, baseCommit, headCommit string) (bool, string, *git.Signature, error) {
-       if err := pr.LoadBaseRepo(); err != nil {
+       if err := pr.LoadBaseRepoCtx(ctx); err != nil {
                log.Error("Unable to get Base Repo for pull request")
                return false, "", nil, err
        }
index 479c9cbb138a8b81841aaf845ae1e3e3c0e6bed6..e6169b9c7e55ae2e2e36a585158e66295509e38e 100644 (file)
@@ -5,6 +5,8 @@
 package issue
 
 import (
+       "context"
+
        "code.gitea.io/gitea/models"
        "code.gitea.io/gitea/models/db"
        "code.gitea.io/gitea/models/organization"
@@ -78,7 +80,7 @@ func ReviewRequest(issue *models.Issue, doer, reviewer *user_model.User, isAdd b
 }
 
 // IsValidReviewRequest Check permission for ReviewRequest
-func IsValidReviewRequest(reviewer, doer *user_model.User, isAdd bool, issue *models.Issue, permDoer *models.Permission) error {
+func IsValidReviewRequest(ctx context.Context, reviewer, doer *user_model.User, isAdd bool, issue *models.Issue, permDoer *models.Permission) error {
        if reviewer.IsOrganization() {
                return models.ErrNotValidReviewRequest{
                        Reason: "Organization can't be added as reviewer",
@@ -94,14 +96,14 @@ func IsValidReviewRequest(reviewer, doer *user_model.User, isAdd bool, issue *mo
                }
        }
 
-       permReviewer, err := models.GetUserRepoPermission(issue.Repo, reviewer)
+       permReviewer, err := models.GetUserRepoPermission(ctx, issue.Repo, reviewer)
        if err != nil {
                return err
        }
 
        if permDoer == nil {
                permDoer = new(models.Permission)
-               *permDoer, err = models.GetUserRepoPermission(issue.Repo, doer)
+               *permDoer, err = models.GetUserRepoPermission(ctx, issue.Repo, doer)
                if err != nil {
                        return err
                }
@@ -168,7 +170,7 @@ func IsValidReviewRequest(reviewer, doer *user_model.User, isAdd bool, issue *mo
 }
 
 // IsValidTeamReviewRequest Check permission for ReviewRequest Team
-func IsValidTeamReviewRequest(reviewer *organization.Team, doer *user_model.User, isAdd bool, issue *models.Issue) error {
+func IsValidTeamReviewRequest(ctx context.Context, reviewer *organization.Team, doer *user_model.User, isAdd bool, issue *models.Issue) error {
        if doer.IsOrganization() {
                return models.ErrNotValidReviewRequest{
                        Reason: "Organization can't be doer to add reviewer",
@@ -177,7 +179,7 @@ func IsValidTeamReviewRequest(reviewer *organization.Team, doer *user_model.User
                }
        }
 
-       permission, err := models.GetUserRepoPermission(issue.Repo, doer)
+       permission, err := models.GetUserRepoPermission(ctx, issue.Repo, doer)
        if err != nil {
                log.Error("Unable to GetUserRepoPermission for %-v in %-v#%d", doer, issue.Repo, issue.Index)
                return err
@@ -185,7 +187,7 @@ func IsValidTeamReviewRequest(reviewer *organization.Team, doer *user_model.User
 
        if isAdd {
                if issue.Repo.IsPrivate {
-                       hasTeam := organization.HasTeamRepo(db.DefaultContext, reviewer.OrgID, reviewer.ID, issue.RepoID)
+                       hasTeam := organization.HasTeamRepo(ctx, reviewer.OrgID, reviewer.ID, issue.RepoID)
 
                        if !hasTeam {
                                return models.ErrNotValidReviewRequest{
index 0dda5f202f4ff4df1141910e51d18ed9bfbd6644..b5d97e12a80f3e7a3d22985015f0136bcda88f5e 100644 (file)
@@ -14,6 +14,7 @@ import (
        "time"
 
        "code.gitea.io/gitea/models"
+       "code.gitea.io/gitea/models/db"
        repo_model "code.gitea.io/gitea/models/repo"
        user_model "code.gitea.io/gitea/models/user"
        "code.gitea.io/gitea/modules/references"
@@ -130,7 +131,7 @@ func UpdateIssuesCommit(doer *user_model.User, repo *repo_model.Repository, comm
                                continue
                        }
 
-                       perm, err := models.GetUserRepoPermission(refRepo, doer)
+                       perm, err := models.GetUserRepoPermission(db.DefaultContext, refRepo, doer)
                        if err != nil {
                                return err
                        }
index e72e1cb521cd22a12cf0a6813cce4cdba3bf9407..62ccc0ad655940e4c6dd7238755c4cdd7f236142 100644 (file)
@@ -44,11 +44,17 @@ func AddLabels(issue *models.Issue, doer *user_model.User, labels []*models.Labe
 
 // RemoveLabel removes a label from issue by given ID.
 func RemoveLabel(issue *models.Issue, doer *user_model.User, label *models.Label) error {
-       if err := issue.LoadRepo(db.DefaultContext); err != nil {
+       ctx, committer, err := db.TxContext()
+       if err != nil {
+               return err
+       }
+       defer committer.Close()
+
+       if err := issue.LoadRepo(ctx); err != nil {
                return err
        }
 
-       perm, err := models.GetUserRepoPermission(issue.Repo, doer)
+       perm, err := models.GetUserRepoPermission(ctx, issue.Repo, doer)
        if err != nil {
                return err
        }
@@ -59,7 +65,11 @@ func RemoveLabel(issue *models.Issue, doer *user_model.User, label *models.Label
                return models.ErrRepoLabelNotExist{}
        }
 
-       if err := models.DeleteIssueLabel(issue, label, doer); err != nil {
+       if err := models.DeleteIssueLabel(ctx, issue, label, doer); err != nil {
+               return err
+       }
+
+       if err := committer.Commit(); err != nil {
                return err
        }
 
index fa51470d62626508ebf8eaebd3b720db7b2a818e..0299452205756f693de085c5fe3db168b4635bfb 100644 (file)
@@ -88,7 +88,7 @@ func GetListLockHandler(ctx *context.Context) {
                        })
                        return
                }
-               lock, err := models.GetLFSLockByID(v)
+               lock, err := models.GetLFSLockByID(ctx, v)
                if err != nil && !models.IsErrLFSLockNotExist(err) {
                        log.Error("Unable to get lock with ID[%s]: Error: %v", v, err)
                }
@@ -98,7 +98,7 @@ func GetListLockHandler(ctx *context.Context) {
 
        path := ctx.FormString("path")
        if path != "" { // Case where we request a specific id
-               lock, err := models.GetLFSLock(repository, path)
+               lock, err := models.GetLFSLock(ctx, repository, path)
                if err != nil && !models.IsErrLFSLockNotExist(err) {
                        log.Error("Unable to get lock for repository %-v with path %s: Error: %v", repository, path, err)
                }
index 633aa0a6952753f2c9d6d9fdce7e6b7bd29b5006..c095bbfab4143eb6ac1e1266f9851bf21c1b962c 100644 (file)
@@ -488,7 +488,7 @@ func authenticate(ctx *context.Context, repository *repo_model.Repository, autho
        }
 
        // ctx.IsSigned is unnecessary here, this will be checked in perm.CanAccess
-       perm, err := models.GetUserRepoPermission(repository, ctx.Doer)
+       perm, err := models.GetUserRepoPermission(ctx, repository, ctx.Doer)
        if err != nil {
                log.Error("Unable to GetUserRepoPermission for user %-v in repo %-v Error: %v", ctx.Doer, repository)
                return false
index 29dc88e0f0c1de81c1f2fad22b2bfa2232aee8d5..f7747dfa2ac4389fad9e0dccbeaa77d1bee366c2 100644 (file)
@@ -227,7 +227,7 @@ func getMergeCommit(ctx context.Context, pr *models.PullRequest) (*git.Commit, e
 // manuallyMerged checks if a pull request got manually merged
 // When a pull request got manually merged mark the pull request as merged
 func manuallyMerged(ctx context.Context, pr *models.PullRequest) bool {
-       if err := pr.LoadBaseRepo(); err != nil {
+       if err := pr.LoadBaseRepoCtx(ctx); err != nil {
                log.Error("PullRequest[%d].LoadBaseRepo: %v", pr.ID, err)
                return false
        }
@@ -317,7 +317,7 @@ func testPR(id int64) {
        ctx, _, finished := process.GetManager().AddContext(graceful.GetManager().HammerContext(), fmt.Sprintf("Test PR[%d] from patch checking queue", id))
        defer finished()
 
-       pr, err := models.GetPullRequestByID(id)
+       pr, err := models.GetPullRequestByID(ctx, id)
        if err != nil {
                log.Error("GetPullRequestByID[%d]: %v", id, err)
                return
index be8df0c9b1588f7a49f11c22ee3cdd86a8298897..143f3d50d0980239c71093ee45f6ed41bb2b67e8 100644 (file)
@@ -83,7 +83,7 @@ func IsCommitStatusContextSuccess(commitStatuses []*models.CommitStatus, require
 
 // IsPullCommitStatusPass returns if all required status checks PASS
 func IsPullCommitStatusPass(ctx context.Context, pr *models.PullRequest) (bool, error) {
-       if err := pr.LoadProtectedBranch(); err != nil {
+       if err := pr.LoadProtectedBranchCtx(ctx); err != nil {
                return false, errors.Wrap(err, "GetLatestCommitStatus")
        }
        if pr.ProtectedBranch == nil || !pr.ProtectedBranch.EnableStatusCheck {
@@ -100,7 +100,7 @@ func IsPullCommitStatusPass(ctx context.Context, pr *models.PullRequest) (bool,
 // GetPullRequestCommitStatusState returns pull request merged commit status state
 func GetPullRequestCommitStatusState(ctx context.Context, pr *models.PullRequest) (structs.CommitStatusState, error) {
        // Ensure HeadRepo is loaded
-       if err := pr.LoadHeadRepo(); err != nil {
+       if err := pr.LoadHeadRepoCtx(ctx); err != nil {
                return "", errors.Wrap(err, "LoadHeadRepo")
        }
 
@@ -114,7 +114,7 @@ func GetPullRequestCommitStatusState(ctx context.Context, pr *models.PullRequest
        if pr.Flow == models.PullRequestFlowGithub && !headGitRepo.IsBranchExist(pr.HeadBranch) {
                return "", errors.New("Head branch does not exist, can not merge")
        }
-       if pr.Flow == models.PullRequestFlowAGit && !git.IsReferenceExist(headGitRepo.Ctx, headGitRepo.Path, pr.GetGitRefName()) {
+       if pr.Flow == models.PullRequestFlowAGit && !git.IsReferenceExist(ctx, headGitRepo.Path, pr.GetGitRefName()) {
                return "", errors.New("Head branch does not exist, can not merge")
        }
 
@@ -128,11 +128,11 @@ func GetPullRequestCommitStatusState(ctx context.Context, pr *models.PullRequest
                return "", err
        }
 
-       if err := pr.LoadBaseRepo(); err != nil {
+       if err := pr.LoadBaseRepoCtx(ctx); err != nil {
                return "", errors.Wrap(err, "LoadBaseRepo")
        }
 
-       commitStatuses, _, err := models.GetLatestCommitStatus(pr.BaseRepo.ID, sha, db.ListOptions{})
+       commitStatuses, _, err := models.GetLatestCommitStatusCtx(ctx, pr.BaseRepo.ID, sha, db.ListOptions{})
        if err != nil {
                return "", errors.Wrap(err, "GetLatestCommitStatus")
        }
index 0c615d93c8516b2c5d2d49abbd2395947f47deff..7967bce6a99717c21f3172f899272dc1b6d5bbcb 100644 (file)
@@ -35,10 +35,10 @@ import (
 // Caller should check PR is ready to be merged (review and status checks)
 // FIXME: add repoWorkingPull make sure two merges does not happen at same time.
 func Merge(ctx context.Context, pr *models.PullRequest, doer *user_model.User, baseGitRepo *git.Repository, mergeStyle repo_model.MergeStyle, expectedHeadCommitID, message string) (err error) {
-       if err = pr.LoadHeadRepo(); err != nil {
+       if err = pr.LoadHeadRepoCtx(ctx); err != nil {
                log.Error("LoadHeadRepo: %v", err)
                return fmt.Errorf("LoadHeadRepo: %v", err)
-       } else if err = pr.LoadBaseRepo(); err != nil {
+       } else if err = pr.LoadBaseRepoCtx(ctx); err != nil {
                log.Error("LoadBaseRepo: %v", err)
                return fmt.Errorf("LoadBaseRepo: %v", err)
        }
@@ -664,7 +664,7 @@ func IsUserAllowedToMerge(pr *models.PullRequest, p models.Permission, user *use
 
 // CheckPRReadyToMerge checks whether the PR is ready to be merged (reviews and status checks)
 func CheckPRReadyToMerge(ctx context.Context, pr *models.PullRequest, skipProtectedFilesCheck bool) (err error) {
-       if err = pr.LoadBaseRepo(); err != nil {
+       if err = pr.LoadBaseRepoCtx(ctx); err != nil {
                return fmt.Errorf("LoadBaseRepo: %v", err)
        }
 
index f118ef33d022a2968e84553ea493058a95ad6d81..eeedcf2d382a1395395b751c66dea554f96821f2 100644 (file)
@@ -27,7 +27,7 @@ import (
 
 // DownloadDiffOrPatch will write the patch for the pr to the writer
 func DownloadDiffOrPatch(ctx context.Context, pr *models.PullRequest, w io.Writer, patch, binary bool) error {
-       if err := pr.LoadBaseRepo(); err != nil {
+       if err := pr.LoadBaseRepoCtx(ctx); err != nil {
                log.Error("Unable to load base repository ID %d for pr #%d [%d]", pr.BaseRepoID, pr.Index, pr.ID)
                return err
        }
index f036211871322aaa8f8a902362a2d5e9b1062a9b..0d10a23681e942b34bee6d6df887e61831241455 100644 (file)
@@ -230,7 +230,7 @@ func checkForInvalidation(ctx context.Context, requests models.PullRequestList,
        }
        go func() {
                // FIXME: graceful: We need to tell the manager we're doing something...
-               err := requests.InvalidateCodeComments(doer, gitRepo, branch)
+               err := requests.InvalidateCodeComments(ctx, doer, gitRepo, branch)
                if err != nil {
                        log.Error("PullRequestList.InvalidateCodeComments: %v", err)
                }
@@ -341,14 +341,14 @@ func AddTestPullRequestTask(doer *user_model.User, repoID int64, branch string,
 // checkIfPRContentChanged checks if diff to target branch has changed by push
 // A commit can be considered to leave the PR untouched if the patch/diff with its merge base is unchanged
 func checkIfPRContentChanged(ctx context.Context, pr *models.PullRequest, oldCommitID, newCommitID string) (hasChanged bool, err error) {
-       if err = pr.LoadHeadRepo(); err != nil {
+       if err = pr.LoadHeadRepoCtx(ctx); err != nil {
                return false, fmt.Errorf("LoadHeadRepo: %v", err)
        } else if pr.HeadRepo == nil {
                // corrupt data assumed changed
                return true, nil
        }
 
-       if err = pr.LoadBaseRepo(); err != nil {
+       if err = pr.LoadBaseRepoCtx(ctx); err != nil {
                return false, fmt.Errorf("LoadBaseRepo: %v", err)
        }
 
@@ -419,13 +419,13 @@ func PushToBaseRepo(ctx context.Context, pr *models.PullRequest) (err error) {
 func pushToBaseRepoHelper(ctx context.Context, pr *models.PullRequest, prefixHeadBranch string) (err error) {
        log.Trace("PushToBaseRepo[%d]: pushing commits to base repo '%s'", pr.BaseRepoID, pr.GetGitRefName())
 
-       if err := pr.LoadHeadRepo(); err != nil {
+       if err := pr.LoadHeadRepoCtx(ctx); err != nil {
                log.Error("Unable to load head repository for PR[%d] Error: %v", pr.ID, err)
                return err
        }
        headRepoPath := pr.HeadRepo.RepoPath()
 
-       if err := pr.LoadBaseRepo(); err != nil {
+       if err := pr.LoadBaseRepoCtx(ctx); err != nil {
                log.Error("Unable to load base repository for PR[%d] Error: %v", pr.ID, err)
                return err
        }
@@ -474,7 +474,7 @@ func pushToBaseRepoHelper(ctx context.Context, pr *models.PullRequest, prefixHea
 // UpdateRef update refs/pull/id/head directly for agit flow pull request
 func UpdateRef(ctx context.Context, pr *models.PullRequest) (err error) {
        log.Trace("UpdateRef[%d]: upgate pull request ref in base repo '%s'", pr.ID, pr.GetGitRefName())
-       if err := pr.LoadBaseRepo(); err != nil {
+       if err := pr.LoadBaseRepoCtx(ctx); err != nil {
                log.Error("Unable to load base repository for PR[%d] Error: %v", pr.ID, err)
                return err
        }
@@ -793,7 +793,7 @@ func getAllCommitStatus(gitRepo *git.Repository, pr *models.PullRequest) (status
 // IsHeadEqualWithBranch returns if the commits of branchName are available in pull request head
 func IsHeadEqualWithBranch(ctx context.Context, pr *models.PullRequest, branchName string) (bool, error) {
        var err error
-       if err = pr.LoadBaseRepo(); err != nil {
+       if err = pr.LoadBaseRepoCtx(ctx); err != nil {
                return false, err
        }
        baseGitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, pr.BaseRepo.RepoPath())
@@ -807,7 +807,7 @@ func IsHeadEqualWithBranch(ctx context.Context, pr *models.PullRequest, branchNa
                return false, err
        }
 
-       if err = pr.LoadHeadRepo(); err != nil {
+       if err = pr.LoadHeadRepoCtx(ctx); err != nil {
                return false, err
        }
        var headGitRepo *git.Repository
index e7e6f3135ba918fe85f41561408790db93a336f5..940fe4470d162a96881e151bab18573d8d66824a 100644 (file)
@@ -122,7 +122,7 @@ func createCodeComment(ctx context.Context, doer *user_model.User, repo *repo_mo
                return nil, fmt.Errorf("GetPullRequestByIssueID: %v", err)
        }
        pr := issue.PullRequest
-       if err := pr.LoadBaseRepo(); err != nil {
+       if err := pr.LoadBaseRepoCtx(ctx); err != nil {
                return nil, fmt.Errorf("LoadHeadRepo: %v", err)
        }
        gitRepo, closer, err := git.RepositoryFromContextOrOpen(ctx, pr.BaseRepo.RepoPath())
index 22ef53937d8ac798fe0b9a9ea27a4ec4441767da..f8f44ac0187bc2e2111dcc37b846d8404ea1a1d9 100644 (file)
@@ -21,7 +21,7 @@ import (
 // createTemporaryRepo creates a temporary repo with "base" for pr.BaseBranch and "tracking" for  pr.HeadBranch
 // it also create a second base branch called "original_base"
 func createTemporaryRepo(ctx context.Context, pr *models.PullRequest) (string, error) {
-       if err := pr.LoadHeadRepo(); err != nil {
+       if err := pr.LoadHeadRepoCtx(ctx); err != nil {
                log.Error("LoadHeadRepo: %v", err)
                return "", fmt.Errorf("LoadHeadRepo: %v", err)
        } else if pr.HeadRepo == nil {
@@ -29,7 +29,7 @@ func createTemporaryRepo(ctx context.Context, pr *models.PullRequest) (string, e
                return "", &repo_model.ErrRepoNotExist{
                        ID: pr.HeadRepoID,
                }
-       } else if err := pr.LoadBaseRepo(); err != nil {
+       } else if err := pr.LoadBaseRepoCtx(ctx); err != nil {
                log.Error("LoadBaseRepo: %v", err)
                return "", fmt.Errorf("LoadBaseRepo: %v", err)
        } else if pr.BaseRepo == nil {
index 2ad58ecd29ac876ec5d891c689b78e6290d7f63b..899bee1f19770b53a2fb07d174e00eab73a8938f 100644 (file)
@@ -42,10 +42,10 @@ func Update(ctx context.Context, pull *models.PullRequest, doer *user_model.User
                return fmt.Errorf("Not support update agit flow pull request's head branch")
        }
 
-       if err := pr.LoadHeadRepo(); err != nil {
+       if err := pr.LoadHeadRepoCtx(ctx); err != nil {
                log.Error("LoadHeadRepo: %v", err)
                return fmt.Errorf("LoadHeadRepo: %v", err)
-       } else if err = pr.LoadBaseRepo(); err != nil {
+       } else if err = pr.LoadBaseRepoCtx(ctx); err != nil {
                log.Error("LoadBaseRepo: %v", err)
                return fmt.Errorf("LoadBaseRepo: %v", err)
        }
@@ -71,7 +71,7 @@ func Update(ctx context.Context, pull *models.PullRequest, doer *user_model.User
 }
 
 // IsUserAllowedToUpdate check if user is allowed to update PR with given permissions and branch protections
-func IsUserAllowedToUpdate(pull *models.PullRequest, user *user_model.User) (mergeAllowed, rebaseAllowed bool, err error) {
+func IsUserAllowedToUpdate(ctx context.Context, pull *models.PullRequest, user *user_model.User) (mergeAllowed, rebaseAllowed bool, err error) {
        if pull.Flow == models.PullRequestFlowAGit {
                return false, false, nil
        }
@@ -79,7 +79,7 @@ func IsUserAllowedToUpdate(pull *models.PullRequest, user *user_model.User) (mer
        if user == nil {
                return false, false, nil
        }
-       headRepoPerm, err := models.GetUserRepoPermission(pull.HeadRepo, user)
+       headRepoPerm, err := models.GetUserRepoPermission(ctx, pull.HeadRepo, user)
        if err != nil {
                return false, false, err
        }
@@ -122,10 +122,10 @@ func IsUserAllowedToUpdate(pull *models.PullRequest, user *user_model.User) (mer
 // GetDiverging determines how many commits a PR is ahead or behind the PR base branch
 func GetDiverging(ctx context.Context, pr *models.PullRequest) (*git.DivergeObject, error) {
        log.Trace("GetDiverging[%d]: compare commits", pr.ID)
-       if err := pr.LoadBaseRepo(); err != nil {
+       if err := pr.LoadBaseRepoCtx(ctx); err != nil {
                return nil, err
        }
-       if err := pr.LoadHeadRepo(); err != nil {
+       if err := pr.LoadHeadRepoCtx(ctx); err != nil {
                return nil, err
        }