Skip to content

Commit 637a38a

Browse files
committed
retrieve sha from pull head when pull request branch deleted and fix tests
1 parent ac5de13 commit 637a38a

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

modules/convert/pull.go

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ func ToAPIPullRequest(pr *models.PullRequest) *api.PullRequest {
2222
baseBranch *git.Branch
2323
headBranch *git.Branch
2424
baseCommit *git.Commit
25-
headCommit *git.Commit
2625
err error
2726
)
2827

@@ -99,22 +98,37 @@ func ToAPIPullRequest(pr *models.PullRequest) *api.PullRequest {
9998
apiPullRequest.Head.RepoID = pr.HeadRepo.ID
10099
apiPullRequest.Head.Repository = pr.HeadRepo.APIFormat(models.AccessModeNone)
101100

102-
headBranch, err = repo_module.GetBranch(pr.HeadRepo, pr.HeadBranch)
101+
headGitRepo, err := git.OpenRepository(pr.HeadRepo.RepoPath())
102+
if err != nil {
103+
log.Error("OpenRepository[%s]: %v", pr.HeadRepo.RepoPath(), err)
104+
return nil
105+
}
106+
defer headGitRepo.Close()
107+
108+
headBranch, err = headGitRepo.GetBranch(pr.HeadBranch)
103109
if err != nil && !git.IsErrBranchNotExist(err) {
104110
log.Error("GetBranch[%s]: %v", pr.HeadBranch, err)
105111
return nil
106112
}
107113

108-
if err == nil {
109-
headCommit, err = headBranch.GetCommit()
114+
if git.IsErrBranchNotExist(err) {
115+
headCommitID, err := headGitRepo.GetRefCommitID(apiPullRequest.Head.Ref)
116+
if err != nil && !git.IsErrNotExist(err) {
117+
log.Error("GetCommit[%s]: %v", headBranch.Name, err)
118+
return nil
119+
}
120+
if err == nil {
121+
apiPullRequest.Head.Sha = headCommitID
122+
}
123+
} else {
124+
commit, err := headBranch.GetCommit()
110125
if err != nil && !git.IsErrNotExist(err) {
111126
log.Error("GetCommit[%s]: %v", headBranch.Name, err)
112127
return nil
113128
}
114-
115129
if err == nil {
116130
apiPullRequest.Head.Ref = pr.HeadBranch
117-
apiPullRequest.Head.Sha = headCommit.ID.String()
131+
apiPullRequest.Head.Sha = commit.ID.String()
118132
}
119133
}
120134
}

modules/convert/pull_test.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,26 @@ import (
88
"testing"
99

1010
"code.gitea.io/gitea/models"
11+
"code.gitea.io/gitea/modules/structs"
1112

1213
"github.com/stretchr/testify/assert"
1314
)
1415

1516
func TestPullRequest_APIFormat(t *testing.T) {
1617
//with HeadRepo
1718
assert.NoError(t, models.PrepareTestDatabase())
19+
headRepo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 1}).(*models.Repository)
1820
pr := models.AssertExistsAndLoadBean(t, &models.PullRequest{ID: 1}).(*models.PullRequest)
1921
assert.NoError(t, pr.LoadAttributes())
2022
assert.NoError(t, pr.LoadIssue())
2123
apiPullRequest := ToAPIPullRequest(pr)
2224
assert.NotNil(t, apiPullRequest)
23-
assert.Nil(t, apiPullRequest.Head)
25+
assert.EqualValues(t, &structs.PRBranchInfo{
26+
Name: "branch1",
27+
Ref: "refs/pull/2/head",
28+
RepoID: 1,
29+
Repository: headRepo.APIFormat(models.AccessModeNone),
30+
}, apiPullRequest.Head)
2431

2532
//withOut HeadRepo
2633
pr = models.AssertExistsAndLoadBean(t, &models.PullRequest{ID: 1}).(*models.PullRequest)

0 commit comments

Comments
 (0)