Skip to content

Commit 384c2b3

Browse files
authored
Move pull request api convert to convert package (#9664)
* Move pull request api convert to convert package * Rename ToPullRequest to ToAPIPullRequest
1 parent 8878cfa commit 384c2b3

File tree

7 files changed

+198
-160
lines changed

7 files changed

+198
-160
lines changed

models/pull.go

Lines changed: 0 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
"code.gitea.io/gitea/modules/git"
1414
"code.gitea.io/gitea/modules/log"
1515
"code.gitea.io/gitea/modules/setting"
16-
api "code.gitea.io/gitea/modules/structs"
1716
"code.gitea.io/gitea/modules/timeutil"
1817
)
1918

@@ -397,139 +396,6 @@ func (pr *PullRequest) GetGitRefName() string {
397396
return fmt.Sprintf("refs/pull/%d/head", pr.Index)
398397
}
399398

400-
// APIFormat assumes following fields have been assigned with valid values:
401-
// Required - Issue
402-
// Optional - Merger
403-
func (pr *PullRequest) APIFormat() *api.PullRequest {
404-
return pr.apiFormat(x)
405-
}
406-
407-
func (pr *PullRequest) apiFormat(e Engine) *api.PullRequest {
408-
var (
409-
baseBranch *git.Branch
410-
headBranch *git.Branch
411-
baseCommit *git.Commit
412-
headCommit *git.Commit
413-
err error
414-
)
415-
if err = pr.Issue.loadRepo(e); err != nil {
416-
log.Error("loadRepo[%d]: %v", pr.ID, err)
417-
return nil
418-
}
419-
apiIssue := pr.Issue.apiFormat(e)
420-
if pr.BaseRepo == nil {
421-
pr.BaseRepo, err = getRepositoryByID(e, pr.BaseRepoID)
422-
if err != nil {
423-
log.Error("GetRepositoryById[%d]: %v", pr.ID, err)
424-
return nil
425-
}
426-
}
427-
if pr.HeadRepo == nil {
428-
pr.HeadRepo, err = getRepositoryByID(e, pr.HeadRepoID)
429-
if err != nil {
430-
log.Error("GetRepositoryById[%d]: %v", pr.ID, err)
431-
return nil
432-
}
433-
}
434-
435-
if err = pr.Issue.loadRepo(e); err != nil {
436-
log.Error("pr.Issue.loadRepo[%d]: %v", pr.ID, err)
437-
return nil
438-
}
439-
440-
apiPullRequest := &api.PullRequest{
441-
ID: pr.ID,
442-
URL: pr.Issue.HTMLURL(),
443-
Index: pr.Index,
444-
Poster: apiIssue.Poster,
445-
Title: apiIssue.Title,
446-
Body: apiIssue.Body,
447-
Labels: apiIssue.Labels,
448-
Milestone: apiIssue.Milestone,
449-
Assignee: apiIssue.Assignee,
450-
Assignees: apiIssue.Assignees,
451-
State: apiIssue.State,
452-
Comments: apiIssue.Comments,
453-
HTMLURL: pr.Issue.HTMLURL(),
454-
DiffURL: pr.Issue.DiffURL(),
455-
PatchURL: pr.Issue.PatchURL(),
456-
HasMerged: pr.HasMerged,
457-
MergeBase: pr.MergeBase,
458-
Deadline: apiIssue.Deadline,
459-
Created: pr.Issue.CreatedUnix.AsTimePtr(),
460-
Updated: pr.Issue.UpdatedUnix.AsTimePtr(),
461-
}
462-
baseBranch, err = pr.BaseRepo.GetBranch(pr.BaseBranch)
463-
if err != nil {
464-
if git.IsErrBranchNotExist(err) {
465-
apiPullRequest.Base = nil
466-
} else {
467-
log.Error("GetBranch[%s]: %v", pr.BaseBranch, err)
468-
return nil
469-
}
470-
} else {
471-
apiBaseBranchInfo := &api.PRBranchInfo{
472-
Name: pr.BaseBranch,
473-
Ref: pr.BaseBranch,
474-
RepoID: pr.BaseRepoID,
475-
Repository: pr.BaseRepo.innerAPIFormat(e, AccessModeNone, false),
476-
}
477-
baseCommit, err = baseBranch.GetCommit()
478-
if err != nil {
479-
if git.IsErrNotExist(err) {
480-
apiBaseBranchInfo.Sha = ""
481-
} else {
482-
log.Error("GetCommit[%s]: %v", baseBranch.Name, err)
483-
return nil
484-
}
485-
} else {
486-
apiBaseBranchInfo.Sha = baseCommit.ID.String()
487-
}
488-
apiPullRequest.Base = apiBaseBranchInfo
489-
}
490-
491-
headBranch, err = pr.HeadRepo.GetBranch(pr.HeadBranch)
492-
if err != nil {
493-
if git.IsErrBranchNotExist(err) {
494-
apiPullRequest.Head = nil
495-
} else {
496-
log.Error("GetBranch[%s]: %v", pr.HeadBranch, err)
497-
return nil
498-
}
499-
} else {
500-
apiHeadBranchInfo := &api.PRBranchInfo{
501-
Name: pr.HeadBranch,
502-
Ref: pr.HeadBranch,
503-
RepoID: pr.HeadRepoID,
504-
Repository: pr.HeadRepo.innerAPIFormat(e, AccessModeNone, false),
505-
}
506-
headCommit, err = headBranch.GetCommit()
507-
if err != nil {
508-
if git.IsErrNotExist(err) {
509-
apiHeadBranchInfo.Sha = ""
510-
} else {
511-
log.Error("GetCommit[%s]: %v", headBranch.Name, err)
512-
return nil
513-
}
514-
} else {
515-
apiHeadBranchInfo.Sha = headCommit.ID.String()
516-
}
517-
apiPullRequest.Head = apiHeadBranchInfo
518-
}
519-
520-
if pr.Status != PullRequestStatusChecking {
521-
mergeable := !(pr.Status == PullRequestStatusConflict || pr.Status == PullRequestStatusError) && !pr.IsWorkInProgress()
522-
apiPullRequest.Mergeable = mergeable
523-
}
524-
if pr.HasMerged {
525-
apiPullRequest.Merged = pr.MergedUnix.AsTimePtr()
526-
apiPullRequest.MergedCommitID = &pr.MergedCommitID
527-
apiPullRequest.MergedBy = pr.Merger.APIFormat()
528-
}
529-
530-
return apiPullRequest
531-
}
532-
533399
func (pr *PullRequest) getHeadRepo(e Engine) (err error) {
534400
pr.HeadRepo, err = getRepositoryByID(e, pr.HeadRepoID)
535401
if err != nil && !IsErrRepoNotExist(err) {

models/pull_test.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,6 @@ func TestPullRequest_LoadIssue(t *testing.T) {
2929
assert.Equal(t, int64(2), pr.Issue.ID)
3030
}
3131

32-
func TestPullRequest_APIFormat(t *testing.T) {
33-
assert.NoError(t, PrepareTestDatabase())
34-
pr := AssertExistsAndLoadBean(t, &PullRequest{ID: 1}).(*PullRequest)
35-
assert.NoError(t, pr.LoadAttributes())
36-
assert.NoError(t, pr.LoadIssue())
37-
apiPullRequest := pr.APIFormat()
38-
assert.NotNil(t, apiPullRequest)
39-
assert.Nil(t, apiPullRequest.Head)
40-
}
41-
4232
func TestPullRequest_GetBaseRepo(t *testing.T) {
4333
assert.NoError(t, PrepareTestDatabase())
4434
pr := AssertExistsAndLoadBean(t, &PullRequest{ID: 1}).(*PullRequest)

modules/convert/main_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Copyright 2020 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package convert
6+
7+
import (
8+
"path/filepath"
9+
"testing"
10+
11+
"code.gitea.io/gitea/models"
12+
)
13+
14+
func TestMain(m *testing.M) {
15+
models.MainTest(m, filepath.Join("..", ".."))
16+
}

modules/convert/pull.go

Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
// Copyright 2020 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package convert
6+
7+
import (
8+
"code.gitea.io/gitea/models"
9+
"code.gitea.io/gitea/modules/git"
10+
"code.gitea.io/gitea/modules/log"
11+
api "code.gitea.io/gitea/modules/structs"
12+
)
13+
14+
// ToAPIPullRequest assumes following fields have been assigned with valid values:
15+
// Required - Issue
16+
// Optional - Merger
17+
func ToAPIPullRequest(pr *models.PullRequest) *api.PullRequest {
18+
var (
19+
baseBranch *git.Branch
20+
headBranch *git.Branch
21+
baseCommit *git.Commit
22+
headCommit *git.Commit
23+
err error
24+
)
25+
if err = pr.Issue.LoadRepo(); err != nil {
26+
log.Error("loadRepo[%d]: %v", pr.ID, err)
27+
return nil
28+
}
29+
apiIssue := pr.Issue.APIFormat()
30+
if pr.BaseRepo == nil {
31+
pr.BaseRepo, err = models.GetRepositoryByID(pr.BaseRepoID)
32+
if err != nil {
33+
log.Error("GetRepositoryById[%d]: %v", pr.ID, err)
34+
return nil
35+
}
36+
}
37+
if pr.HeadRepo == nil {
38+
pr.HeadRepo, err = models.GetRepositoryByID(pr.HeadRepoID)
39+
if err != nil {
40+
log.Error("GetRepositoryById[%d]: %v", pr.ID, err)
41+
return nil
42+
}
43+
}
44+
45+
if err = pr.Issue.LoadRepo(); err != nil {
46+
log.Error("pr.Issue.loadRepo[%d]: %v", pr.ID, err)
47+
return nil
48+
}
49+
50+
apiPullRequest := &api.PullRequest{
51+
ID: pr.ID,
52+
URL: pr.Issue.HTMLURL(),
53+
Index: pr.Index,
54+
Poster: apiIssue.Poster,
55+
Title: apiIssue.Title,
56+
Body: apiIssue.Body,
57+
Labels: apiIssue.Labels,
58+
Milestone: apiIssue.Milestone,
59+
Assignee: apiIssue.Assignee,
60+
Assignees: apiIssue.Assignees,
61+
State: apiIssue.State,
62+
Comments: apiIssue.Comments,
63+
HTMLURL: pr.Issue.HTMLURL(),
64+
DiffURL: pr.Issue.DiffURL(),
65+
PatchURL: pr.Issue.PatchURL(),
66+
HasMerged: pr.HasMerged,
67+
MergeBase: pr.MergeBase,
68+
Deadline: apiIssue.Deadline,
69+
Created: pr.Issue.CreatedUnix.AsTimePtr(),
70+
Updated: pr.Issue.UpdatedUnix.AsTimePtr(),
71+
}
72+
baseBranch, err = pr.BaseRepo.GetBranch(pr.BaseBranch)
73+
if err != nil {
74+
if git.IsErrBranchNotExist(err) {
75+
apiPullRequest.Base = nil
76+
} else {
77+
log.Error("GetBranch[%s]: %v", pr.BaseBranch, err)
78+
return nil
79+
}
80+
} else {
81+
apiBaseBranchInfo := &api.PRBranchInfo{
82+
Name: pr.BaseBranch,
83+
Ref: pr.BaseBranch,
84+
RepoID: pr.BaseRepoID,
85+
Repository: pr.BaseRepo.APIFormat(models.AccessModeNone),
86+
}
87+
baseCommit, err = baseBranch.GetCommit()
88+
if err != nil {
89+
if git.IsErrNotExist(err) {
90+
apiBaseBranchInfo.Sha = ""
91+
} else {
92+
log.Error("GetCommit[%s]: %v", baseBranch.Name, err)
93+
return nil
94+
}
95+
} else {
96+
apiBaseBranchInfo.Sha = baseCommit.ID.String()
97+
}
98+
apiPullRequest.Base = apiBaseBranchInfo
99+
}
100+
101+
headBranch, err = pr.HeadRepo.GetBranch(pr.HeadBranch)
102+
if err != nil {
103+
if git.IsErrBranchNotExist(err) {
104+
apiPullRequest.Head = nil
105+
} else {
106+
log.Error("GetBranch[%s]: %v", pr.HeadBranch, err)
107+
return nil
108+
}
109+
} else {
110+
apiHeadBranchInfo := &api.PRBranchInfo{
111+
Name: pr.HeadBranch,
112+
Ref: pr.HeadBranch,
113+
RepoID: pr.HeadRepoID,
114+
Repository: pr.HeadRepo.APIFormat(models.AccessModeNone),
115+
}
116+
headCommit, err = headBranch.GetCommit()
117+
if err != nil {
118+
if git.IsErrNotExist(err) {
119+
apiHeadBranchInfo.Sha = ""
120+
} else {
121+
log.Error("GetCommit[%s]: %v", headBranch.Name, err)
122+
return nil
123+
}
124+
} else {
125+
apiHeadBranchInfo.Sha = headCommit.ID.String()
126+
}
127+
apiPullRequest.Head = apiHeadBranchInfo
128+
}
129+
130+
if pr.Status != models.PullRequestStatusChecking {
131+
mergeable := !(pr.Status == models.PullRequestStatusConflict || pr.Status == models.PullRequestStatusError) && !pr.IsWorkInProgress()
132+
apiPullRequest.Mergeable = mergeable
133+
}
134+
if pr.HasMerged {
135+
apiPullRequest.Merged = pr.MergedUnix.AsTimePtr()
136+
apiPullRequest.MergedCommitID = &pr.MergedCommitID
137+
apiPullRequest.MergedBy = pr.Merger.APIFormat()
138+
}
139+
140+
return apiPullRequest
141+
}

modules/convert/pull_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// Copyright 2020 The Gitea Authors. All rights reserved.
2+
// Use of this source code is governed by a MIT-style
3+
// license that can be found in the LICENSE file.
4+
5+
package convert
6+
7+
import (
8+
"testing"
9+
10+
"code.gitea.io/gitea/models"
11+
12+
"github.com/stretchr/testify/assert"
13+
)
14+
15+
func TestPullRequest_APIFormat(t *testing.T) {
16+
assert.NoError(t, models.PrepareTestDatabase())
17+
pr := models.AssertExistsAndLoadBean(t, &models.PullRequest{ID: 1}).(*models.PullRequest)
18+
assert.NoError(t, pr.LoadAttributes())
19+
assert.NoError(t, pr.LoadIssue())
20+
apiPullRequest := ToAPIPullRequest(pr)
21+
assert.NotNil(t, apiPullRequest)
22+
assert.Nil(t, apiPullRequest.Head)
23+
}

0 commit comments

Comments
 (0)