Skip to content

Commit fbc3796

Browse files
authored
Fix pull requests API convert panic when head repository is deleted. (go-gitea#34685)
Fix go-gitea#34682
1 parent d5afdcc commit fbc3796

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

services/convert/pull.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,9 @@ func ToAPIPullRequests(ctx context.Context, baseRepo *repo_model.Repository, prs
419419
if baseBranch != nil {
420420
apiPullRequest.Base.Sha = baseBranch.CommitID
421421
}
422+
if pr.HeadRepoID == pr.BaseRepoID {
423+
apiPullRequest.Head.Repository = apiPullRequest.Base.Repository
424+
}
422425

423426
// pull request head branch, both repository and branch could not exist
424427
if pr.HeadRepo != nil {
@@ -431,22 +434,19 @@ func ToAPIPullRequests(ctx context.Context, baseRepo *repo_model.Repository, prs
431434
if exist {
432435
apiPullRequest.Head.Ref = pr.HeadBranch
433436
}
437+
if pr.HeadRepoID != pr.BaseRepoID {
438+
p, err := access_model.GetUserRepoPermission(ctx, pr.HeadRepo, doer)
439+
if err != nil {
440+
log.Error("GetUserRepoPermission[%d]: %v", pr.HeadRepoID, err)
441+
p.AccessMode = perm.AccessModeNone
442+
}
443+
apiPullRequest.Head.Repository = ToRepo(ctx, pr.HeadRepo, p)
444+
}
434445
}
435446
if apiPullRequest.Head.Ref == "" {
436447
apiPullRequest.Head.Ref = pr.GetGitRefName()
437448
}
438449

439-
if pr.HeadRepoID == pr.BaseRepoID {
440-
apiPullRequest.Head.Repository = apiPullRequest.Base.Repository
441-
} else {
442-
p, err := access_model.GetUserRepoPermission(ctx, pr.HeadRepo, doer)
443-
if err != nil {
444-
log.Error("GetUserRepoPermission[%d]: %v", pr.HeadRepoID, err)
445-
p.AccessMode = perm.AccessModeNone
446-
}
447-
apiPullRequest.Head.Repository = ToRepo(ctx, pr.HeadRepo, p)
448-
}
449-
450450
if pr.Flow == issues_model.PullRequestFlowAGit {
451451
apiPullRequest.Head.Name = ""
452452
}

services/convert/pull_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,11 @@ func TestPullRequest_APIFormat(t *testing.T) {
4646
assert.NotNil(t, apiPullRequest)
4747
assert.Nil(t, apiPullRequest.Head.Repository)
4848
assert.EqualValues(t, -1, apiPullRequest.Head.RepoID)
49+
50+
apiPullRequests, err := ToAPIPullRequests(git.DefaultContext, pr.BaseRepo, []*issues_model.PullRequest{pr}, nil)
51+
assert.NoError(t, err)
52+
assert.Len(t, apiPullRequests, 1)
53+
assert.NotNil(t, apiPullRequests[0])
54+
assert.Nil(t, apiPullRequests[0].Head.Repository)
55+
assert.EqualValues(t, -1, apiPullRequests[0].Head.RepoID)
4956
}

0 commit comments

Comments
 (0)