only return head: null if source branch was deleted (#6705)
* only return head: null if source branch was deleted * add URL into GetPullRequest * TestPullRequest_APIFormat * log error if it is not Err(Branch)NotExist
This commit is contained in:
		
					parent
					
						
							
								cb2ec41dce
							
						
					
				
			
			
				commit
				
					
						ff85a6331e
					
				
			
		
					 2 changed files with 67 additions and 33 deletions
				
			
		| 
						 | 
					@ -189,36 +189,6 @@ func (pr *PullRequest) apiFormat(e Engine) *api.PullRequest {
 | 
				
			||||||
			return nil
 | 
								return nil
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if baseBranch, err = pr.BaseRepo.GetBranch(pr.BaseBranch); err != nil {
 | 
					 | 
				
			||||||
		log.Error("pr.BaseRepo.GetBranch[%d]: %v", pr.BaseBranch, err)
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if baseCommit, err = baseBranch.GetCommit(); err != nil {
 | 
					 | 
				
			||||||
		log.Error("baseBranch.GetCommit[%d]: %v", pr.ID, err)
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if headBranch, err = pr.HeadRepo.GetBranch(pr.HeadBranch); err != nil {
 | 
					 | 
				
			||||||
		log.Error("pr.HeadRepo.GetBranch[%d]: %v", pr.HeadBranch, err)
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if headCommit, err = headBranch.GetCommit(); err != nil {
 | 
					 | 
				
			||||||
		log.Error("headBranch.GetCommit[%d]: %v", pr.ID, err)
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	apiBaseBranchInfo := &api.PRBranchInfo{
 | 
					 | 
				
			||||||
		Name:       pr.BaseBranch,
 | 
					 | 
				
			||||||
		Ref:        pr.BaseBranch,
 | 
					 | 
				
			||||||
		Sha:        baseCommit.ID.String(),
 | 
					 | 
				
			||||||
		RepoID:     pr.BaseRepoID,
 | 
					 | 
				
			||||||
		Repository: pr.BaseRepo.innerAPIFormat(e, AccessModeNone, false),
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	apiHeadBranchInfo := &api.PRBranchInfo{
 | 
					 | 
				
			||||||
		Name:       pr.HeadBranch,
 | 
					 | 
				
			||||||
		Ref:        pr.HeadBranch,
 | 
					 | 
				
			||||||
		Sha:        headCommit.ID.String(),
 | 
					 | 
				
			||||||
		RepoID:     pr.HeadRepoID,
 | 
					 | 
				
			||||||
		Repository: pr.HeadRepo.innerAPIFormat(e, AccessModeNone, false),
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err = pr.Issue.loadRepo(e); err != nil {
 | 
						if err = pr.Issue.loadRepo(e); err != nil {
 | 
				
			||||||
		log.Error("pr.Issue.loadRepo[%d]: %v", pr.ID, err)
 | 
							log.Error("pr.Issue.loadRepo[%d]: %v", pr.ID, err)
 | 
				
			||||||
| 
						 | 
					@ -227,6 +197,7 @@ func (pr *PullRequest) apiFormat(e Engine) *api.PullRequest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	apiPullRequest := &api.PullRequest{
 | 
						apiPullRequest := &api.PullRequest{
 | 
				
			||||||
		ID:        pr.ID,
 | 
							ID:        pr.ID,
 | 
				
			||||||
 | 
							URL:       pr.Issue.HTMLURL(),
 | 
				
			||||||
		Index:     pr.Index,
 | 
							Index:     pr.Index,
 | 
				
			||||||
		Poster:    apiIssue.Poster,
 | 
							Poster:    apiIssue.Poster,
 | 
				
			||||||
		Title:     apiIssue.Title,
 | 
							Title:     apiIssue.Title,
 | 
				
			||||||
| 
						 | 
					@ -241,13 +212,68 @@ func (pr *PullRequest) apiFormat(e Engine) *api.PullRequest {
 | 
				
			||||||
		DiffURL:   pr.Issue.DiffURL(),
 | 
							DiffURL:   pr.Issue.DiffURL(),
 | 
				
			||||||
		PatchURL:  pr.Issue.PatchURL(),
 | 
							PatchURL:  pr.Issue.PatchURL(),
 | 
				
			||||||
		HasMerged: pr.HasMerged,
 | 
							HasMerged: pr.HasMerged,
 | 
				
			||||||
		Base:      apiBaseBranchInfo,
 | 
					 | 
				
			||||||
		Head:      apiHeadBranchInfo,
 | 
					 | 
				
			||||||
		MergeBase: pr.MergeBase,
 | 
							MergeBase: pr.MergeBase,
 | 
				
			||||||
		Deadline:  apiIssue.Deadline,
 | 
							Deadline:  apiIssue.Deadline,
 | 
				
			||||||
		Created:   pr.Issue.CreatedUnix.AsTimePtr(),
 | 
							Created:   pr.Issue.CreatedUnix.AsTimePtr(),
 | 
				
			||||||
		Updated:   pr.Issue.UpdatedUnix.AsTimePtr(),
 | 
							Updated:   pr.Issue.UpdatedUnix.AsTimePtr(),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						baseBranch, err = pr.BaseRepo.GetBranch(pr.BaseBranch)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							if git.IsErrBranchNotExist(err) {
 | 
				
			||||||
 | 
								apiPullRequest.Base = nil
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								log.Error("GetBranch[%s]: %v", pr.BaseBranch, err)
 | 
				
			||||||
 | 
								return nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							apiBaseBranchInfo := &api.PRBranchInfo{
 | 
				
			||||||
 | 
								Name:       pr.BaseBranch,
 | 
				
			||||||
 | 
								Ref:        pr.BaseBranch,
 | 
				
			||||||
 | 
								RepoID:     pr.BaseRepoID,
 | 
				
			||||||
 | 
								Repository: pr.BaseRepo.innerAPIFormat(e, AccessModeNone, false),
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							baseCommit, err = baseBranch.GetCommit()
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								if git.IsErrNotExist(err) {
 | 
				
			||||||
 | 
									apiBaseBranchInfo.Sha = ""
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									log.Error("GetCommit[%s]: %v", baseBranch.Name, err)
 | 
				
			||||||
 | 
									return nil
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								apiBaseBranchInfo.Sha = baseCommit.ID.String()
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							apiPullRequest.Base = apiBaseBranchInfo
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						headBranch, err = pr.HeadRepo.GetBranch(pr.HeadBranch)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							if git.IsErrBranchNotExist(err) {
 | 
				
			||||||
 | 
								apiPullRequest.Head = nil
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								log.Error("GetBranch[%s]: %v", pr.HeadBranch, err)
 | 
				
			||||||
 | 
								return nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							apiHeadBranchInfo := &api.PRBranchInfo{
 | 
				
			||||||
 | 
								Name:       pr.HeadBranch,
 | 
				
			||||||
 | 
								Ref:        pr.HeadBranch,
 | 
				
			||||||
 | 
								RepoID:     pr.HeadRepoID,
 | 
				
			||||||
 | 
								Repository: pr.HeadRepo.innerAPIFormat(e, AccessModeNone, false),
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							headCommit, err = headBranch.GetCommit()
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								if git.IsErrNotExist(err) {
 | 
				
			||||||
 | 
									apiHeadBranchInfo.Sha = ""
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									log.Error("GetCommit[%s]: %v", headBranch.Name, err)
 | 
				
			||||||
 | 
									return nil
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								apiHeadBranchInfo.Sha = headCommit.ID.String()
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							apiPullRequest.Head = apiHeadBranchInfo
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if pr.Status != PullRequestStatusChecking {
 | 
						if pr.Status != PullRequestStatusChecking {
 | 
				
			||||||
		mergeable := pr.Status != PullRequestStatusConflict && !pr.IsWorkInProgress()
 | 
							mergeable := pr.Status != PullRequestStatusConflict && !pr.IsWorkInProgress()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,15 @@ func TestPullRequest_LoadIssue(t *testing.T) {
 | 
				
			||||||
	assert.Equal(t, int64(2), pr.Issue.ID)
 | 
						assert.Equal(t, int64(2), pr.Issue.ID)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TODO TestPullRequest_APIFormat
 | 
					func TestPullRequest_APIFormat(t *testing.T) {
 | 
				
			||||||
 | 
						assert.NoError(t, PrepareTestDatabase())
 | 
				
			||||||
 | 
						pr := AssertExistsAndLoadBean(t, &PullRequest{ID: 1}).(*PullRequest)
 | 
				
			||||||
 | 
						assert.NoError(t, pr.LoadAttributes())
 | 
				
			||||||
 | 
						assert.NoError(t, pr.LoadIssue())
 | 
				
			||||||
 | 
						apiPullRequest := pr.APIFormat()
 | 
				
			||||||
 | 
						assert.NotNil(t, apiPullRequest)
 | 
				
			||||||
 | 
						assert.Nil(t, apiPullRequest.Head)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestPullRequest_GetBaseRepo(t *testing.T) {
 | 
					func TestPullRequest_GetBaseRepo(t *testing.T) {
 | 
				
			||||||
	assert.NoError(t, PrepareTestDatabase())
 | 
						assert.NoError(t, PrepareTestDatabase())
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue