mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 03:25:11 +01:00 
			
		
		
		
	Fix pull requests API convert panic when head repository is deleted. (#34685)
Fix #34682
This commit is contained in:
		
							parent
							
								
									d5afdccde8
								
							
						
					
					
						commit
						fbc3796f9e
					
				| @ -419,6 +419,9 @@ func ToAPIPullRequests(ctx context.Context, baseRepo *repo_model.Repository, prs | ||||
| 		if baseBranch != nil { | ||||
| 			apiPullRequest.Base.Sha = baseBranch.CommitID | ||||
| 		} | ||||
| 		if pr.HeadRepoID == pr.BaseRepoID { | ||||
| 			apiPullRequest.Head.Repository = apiPullRequest.Base.Repository | ||||
| 		} | ||||
| 
 | ||||
| 		// pull request head branch, both repository and branch could not exist | ||||
| 		if pr.HeadRepo != nil { | ||||
| @ -431,22 +434,19 @@ func ToAPIPullRequests(ctx context.Context, baseRepo *repo_model.Repository, prs | ||||
| 			if exist { | ||||
| 				apiPullRequest.Head.Ref = pr.HeadBranch | ||||
| 			} | ||||
| 			if pr.HeadRepoID != pr.BaseRepoID { | ||||
| 				p, err := access_model.GetUserRepoPermission(ctx, pr.HeadRepo, doer) | ||||
| 				if err != nil { | ||||
| 					log.Error("GetUserRepoPermission[%d]: %v", pr.HeadRepoID, err) | ||||
| 					p.AccessMode = perm.AccessModeNone | ||||
| 				} | ||||
| 				apiPullRequest.Head.Repository = ToRepo(ctx, pr.HeadRepo, p) | ||||
| 			} | ||||
| 		} | ||||
| 		if apiPullRequest.Head.Ref == "" { | ||||
| 			apiPullRequest.Head.Ref = pr.GetGitRefName() | ||||
| 		} | ||||
| 
 | ||||
| 		if pr.HeadRepoID == pr.BaseRepoID { | ||||
| 			apiPullRequest.Head.Repository = apiPullRequest.Base.Repository | ||||
| 		} else { | ||||
| 			p, err := access_model.GetUserRepoPermission(ctx, pr.HeadRepo, doer) | ||||
| 			if err != nil { | ||||
| 				log.Error("GetUserRepoPermission[%d]: %v", pr.HeadRepoID, err) | ||||
| 				p.AccessMode = perm.AccessModeNone | ||||
| 			} | ||||
| 			apiPullRequest.Head.Repository = ToRepo(ctx, pr.HeadRepo, p) | ||||
| 		} | ||||
| 
 | ||||
| 		if pr.Flow == issues_model.PullRequestFlowAGit { | ||||
| 			apiPullRequest.Head.Name = "" | ||||
| 		} | ||||
|  | ||||
| @ -46,4 +46,11 @@ func TestPullRequest_APIFormat(t *testing.T) { | ||||
| 	assert.NotNil(t, apiPullRequest) | ||||
| 	assert.Nil(t, apiPullRequest.Head.Repository) | ||||
| 	assert.EqualValues(t, -1, apiPullRequest.Head.RepoID) | ||||
| 
 | ||||
| 	apiPullRequests, err := ToAPIPullRequests(git.DefaultContext, pr.BaseRepo, []*issues_model.PullRequest{pr}, nil) | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.Len(t, apiPullRequests, 1) | ||||
| 	assert.NotNil(t, apiPullRequests[0]) | ||||
| 	assert.Nil(t, apiPullRequests[0].Head.Repository) | ||||
| 	assert.EqualValues(t, -1, apiPullRequests[0].Head.RepoID) | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user