summaryrefslogtreecommitdiffstats
path: root/models/pull.go
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2019-10-18 19:13:31 +0800
committerGitHub <noreply@github.com>2019-10-18 19:13:31 +0800
commit945f121262ef5a393d9530b62a82b2c141bbe21c (patch)
tree13d4d91da9a75295ee3455ff183a61c4d3fbb3ad /models/pull.go
parentfecd8f949dedac0751db99dec590ff12ae56818d (diff)
downloadgitea-945f121262ef5a393d9530b62a82b2c141bbe21c.tar.gz
gitea-945f121262ef5a393d9530b62a82b2c141bbe21c.zip
Fix bug on pull requests when transfer head repository (#8564)
* fix bug on pull requests when transfer head repository * add migration and fix lint * fix tests and add a cache check on LoadBaseRepo
Diffstat (limited to 'models/pull.go')
-rw-r--r--models/pull.go46
1 files changed, 32 insertions, 14 deletions
diff --git a/models/pull.go b/models/pull.go
index 817ea09cca..a3554a1b3d 100644
--- a/models/pull.go
+++ b/models/pull.go
@@ -66,7 +66,6 @@ type PullRequest struct {
HeadRepo *Repository `xorm:"-"`
BaseRepoID int64 `xorm:"INDEX"`
BaseRepo *Repository `xorm:"-"`
- HeadUserName string
HeadBranch string
BaseBranch string
ProtectedBranch *ProtectedBranch `xorm:"-"`
@@ -79,6 +78,15 @@ type PullRequest struct {
MergedUnix timeutil.TimeStamp `xorm:"updated INDEX"`
}
+// MustHeadUserName returns the HeadRepo's username if failed return blank
+func (pr *PullRequest) MustHeadUserName() string {
+ if err := pr.LoadHeadRepo(); err != nil {
+ log.Error("LoadHeadRepo: %v", err)
+ return ""
+ }
+ return pr.HeadRepo.MustOwnerName()
+}
+
// Note: don't try to get Issue because will end up recursive querying.
func (pr *PullRequest) loadAttributes(e Engine) (err error) {
if pr.HasMerged && pr.Merger == nil {
@@ -102,6 +110,10 @@ func (pr *PullRequest) LoadAttributes() error {
// LoadBaseRepo loads pull request base repository from database
func (pr *PullRequest) LoadBaseRepo() error {
if pr.BaseRepo == nil {
+ if pr.HeadRepoID == pr.BaseRepoID && pr.HeadRepo != nil {
+ pr.BaseRepo = pr.HeadRepo
+ return nil
+ }
var repo Repository
if has, err := x.ID(pr.BaseRepoID).Get(&repo); err != nil {
return err
@@ -113,6 +125,24 @@ func (pr *PullRequest) LoadBaseRepo() error {
return nil
}
+// LoadHeadRepo loads pull request head repository from database
+func (pr *PullRequest) LoadHeadRepo() error {
+ if pr.HeadRepo == nil {
+ if pr.HeadRepoID == pr.BaseRepoID && pr.BaseRepo != nil {
+ pr.HeadRepo = pr.BaseRepo
+ return nil
+ }
+ var repo Repository
+ if has, err := x.ID(pr.HeadRepoID).Get(&repo); err != nil {
+ return err
+ } else if !has {
+ return ErrRepoNotExist{ID: pr.BaseRepoID}
+ }
+ pr.HeadRepo = &repo
+ }
+ return nil
+}
+
// LoadIssue loads issue information from database
func (pr *PullRequest) LoadIssue() (err error) {
return pr.loadIssue(x)
@@ -152,7 +182,7 @@ func (pr *PullRequest) GetDefaultMergeMessage() string {
return ""
}
}
- return fmt.Sprintf("Merge branch '%s' of %s/%s into %s", pr.HeadBranch, pr.HeadUserName, pr.HeadRepo.Name, pr.BaseBranch)
+ return fmt.Sprintf("Merge branch '%s' of %s/%s into %s", pr.HeadBranch, pr.MustHeadUserName(), pr.HeadRepo.Name, pr.BaseBranch)
}
// GetDefaultSquashMessage returns default message used when squash and merging pull request
@@ -1072,18 +1102,6 @@ func (prs PullRequestList) InvalidateCodeComments(doer *User, repo *git.Reposito
return prs.invalidateCodeComments(x, doer, repo, branch)
}
-// ChangeUsernameInPullRequests changes the name of head_user_name
-func ChangeUsernameInPullRequests(oldUserName, newUserName string) error {
- pr := PullRequest{
- HeadUserName: strings.ToLower(newUserName),
- }
- _, err := x.
- Cols("head_user_name").
- Where("head_user_name = ?", strings.ToLower(oldUserName)).
- Update(pr)
- return err
-}
-
// checkAndUpdateStatus checks if pull request is possible to leaving checking status,
// and set to be either conflict or mergeable.
func (pr *PullRequest) checkAndUpdateStatus() {