diff options
author | Unknwon <u@gogs.io> | 2016-12-22 01:28:06 -0500 |
---|---|---|
committer | Unknwon <u@gogs.io> | 2016-12-22 01:28:06 -0500 |
commit | d04b19545db513c31d86d503046f51ba780e4038 (patch) | |
tree | f0948450c9afeb6e41d9eb1e2b5bff5cf0e3c9dc /models/pull.go | |
parent | 3b0e2c1c3fd1b20d5afc3344aefb8af1b1dcb5b4 (diff) |
Code fix for PR #3547
Diffstat (limited to 'models/pull.go')
-rw-r--r-- | models/pull.go | 74 |
1 files changed, 30 insertions, 44 deletions
diff --git a/models/pull.go b/models/pull.go index 4bfc8ddf..cb52a302 100644 --- a/models/pull.go +++ b/models/pull.go @@ -85,6 +85,20 @@ func (pr *PullRequest) AfterSet(colName string, _ xorm.Cell) { // Note: don't try to get Issue because will end up recursive querying. func (pr *PullRequest) loadAttributes(e Engine) (err error) { + if pr.HeadRepo == nil { + pr.HeadRepo, err = getRepositoryByID(e, pr.HeadRepoID) + if err != nil && !IsErrRepoNotExist(err) { + return fmt.Errorf("getRepositoryByID.(HeadRepo) [%d]: %v", pr.HeadRepoID, err) + } + } + + if pr.BaseRepo == nil { + pr.BaseRepo, err = getRepositoryByID(e, pr.BaseRepoID) + if err != nil { + return fmt.Errorf("getRepositoryByID.(BaseRepo) [%d]: %v", pr.BaseRepoID, err) + } + } + if pr.HasMerged && pr.Merger == nil { pr.Merger, err = getUserByID(e, pr.MergerID) if IsErrUserNotExist(err) { @@ -112,11 +126,19 @@ func (pr *PullRequest) LoadIssue() (err error) { } // This method assumes following fields have been assigned with valid values: -// Required - Issue -// Required - HeadRepo -// Required - BaseRepo -// Optional - Merger +// Required - Issue, BaseRepo +// Optional - HeadRepo, Merger func (pr *PullRequest) APIFormat() *api.PullRequest { + // In case of head repo has been deleted. + var apiHeadRepo *api.Repository + if pr.HeadRepo == nil { + apiHeadRepo = &api.Repository{ + Name: "deleted", + } + } else { + apiHeadRepo = pr.HeadRepo.APIFormat(nil) + } + apiIssue := pr.Issue.APIFormat() apiPullRequest := &api.PullRequest{ ID: pr.ID, @@ -130,7 +152,7 @@ func (pr *PullRequest) APIFormat() *api.PullRequest { State: apiIssue.State, Comments: apiIssue.Comments, HeadBranch: pr.HeadBranch, - HeadRepo: pr.HeadRepo.APIFormat(nil), + HeadRepo: apiHeadRepo, BaseBranch: pr.BaseBranch, BaseRepo: pr.BaseRepo.APIFormat(nil), HTMLURL: pr.Issue.HTMLURL(), @@ -150,30 +172,6 @@ func (pr *PullRequest) APIFormat() *api.PullRequest { return apiPullRequest } -func (pr *PullRequest) getHeadRepo(e Engine) (err error) { - pr.HeadRepo, err = getRepositoryByID(e, pr.HeadRepoID) - if err != nil && !IsErrRepoNotExist(err) { - return fmt.Errorf("getRepositoryByID(head): %v", err) - } - return nil -} - -func (pr *PullRequest) GetHeadRepo() error { - return pr.getHeadRepo(x) -} - -func (pr *PullRequest) GetBaseRepo() (err error) { - if pr.BaseRepo != nil { - return nil - } - - pr.BaseRepo, err = GetRepositoryByID(pr.BaseRepoID) - if err != nil { - return fmt.Errorf("GetRepositoryByID(base): %v", err) - } - return nil -} - // IsChecking returns true if this pull request is still checking conflict. func (pr *PullRequest) IsChecking() bool { return pr.Status == PULL_REQUEST_STATUS_CHECKING @@ -187,12 +185,6 @@ func (pr *PullRequest) CanAutoMerge() bool { // Merge merges pull request to base repository. // FIXME: add repoWorkingPull make sure two merges does not happen at same time. func (pr *PullRequest) Merge(doer *User, baseGitRepo *git.Repository) (err error) { - if err = pr.GetHeadRepo(); err != nil { - return fmt.Errorf("GetHeadRepo: %v", err) - } else if err = pr.GetBaseRepo(); err != nil { - return fmt.Errorf("GetBaseRepo: %v", err) - } - defer func() { go HookQueue.Add(pr.BaseRepo.ID) go AddTestPullRequestTask(doer, pr.BaseRepo.ID, pr.BaseBranch, false) @@ -548,17 +540,11 @@ func (pr *PullRequest) UpdateCols(cols ...string) error { // UpdatePatch generates and saves a new patch. func (pr *PullRequest) UpdatePatch() (err error) { - if err = pr.GetHeadRepo(); err != nil { - return fmt.Errorf("GetHeadRepo: %v", err) - } else if pr.HeadRepo == nil { + if pr.HeadRepo == nil { log.Trace("PullRequest[%d].UpdatePatch: ignored cruppted data", pr.ID) return nil } - if err = pr.GetBaseRepo(); err != nil { - return fmt.Errorf("GetBaseRepo: %v", err) - } - headGitRepo, err := git.OpenRepository(pr.HeadRepo.RepoPath()) if err != nil { return fmt.Errorf("OpenRepository: %v", err) @@ -763,8 +749,8 @@ func TestPullRequests() { func(idx int, bean interface{}) error { pr := bean.(*PullRequest) - if err := pr.GetBaseRepo(); err != nil { - log.Error(3, "GetBaseRepo: %v", err) + if err := pr.LoadAttributes(); err != nil { + log.Error(3, "LoadAttributes: %v", err) return nil } |