forked from drone/go-scm
-
Notifications
You must be signed in to change notification settings - Fork 86
/
milestone.go
104 lines (94 loc) · 3 KB
/
milestone.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package gitea
import (
"context"
"code.gitea.io/sdk/gitea"
"github.com/jenkins-x/go-scm/scm"
)
type milestoneService struct {
client *wrapper
}
func (s *milestoneService) Find(ctx context.Context, repo string, id int) (*scm.Milestone, *scm.Response, error) {
namespace, name := scm.Split(repo)
out, resp, err := s.client.GiteaClient.GetMilestone(namespace, name, int64(id))
return convertMilestone(out), toSCMResponse(resp), err
}
func (s *milestoneService) List(ctx context.Context, repo string, opts scm.MilestoneListOptions) ([]*scm.Milestone, *scm.Response, error) {
namespace, name := scm.Split(repo)
in := gitea.ListMilestoneOption{
ListOptions: gitea.ListOptions{
Page: opts.Page,
PageSize: opts.Size,
},
}
if opts.Closed && opts.Open {
in.State = gitea.StateAll
} else if opts.Closed {
in.State = gitea.StateClosed
} else if opts.Open {
in.State = gitea.StateOpen
}
out, resp, err := s.client.GiteaClient.ListRepoMilestones(namespace, name, in)
return convertMilestoneList(out), toSCMResponse(resp), err
}
func (s *milestoneService) Create(ctx context.Context, repo string, input *scm.MilestoneInput) (*scm.Milestone, *scm.Response, error) {
namespace, name := scm.Split(repo)
in := gitea.CreateMilestoneOption{
Title: input.Title,
Description: input.Description,
State: gitea.StateOpen,
Deadline: input.DueDate,
}
if input.State == "closed" {
in.State = gitea.StateClosed
}
out, resp, err := s.client.GiteaClient.CreateMilestone(namespace, name, in)
return convertMilestone(out), toSCMResponse(resp), err
}
func (s *milestoneService) Delete(ctx context.Context, repo string, id int) (*scm.Response, error) {
namespace, name := scm.Split(repo)
resp, err := s.client.GiteaClient.DeleteMilestone(namespace, name, int64(id))
return toSCMResponse(resp), err
}
func (s *milestoneService) Update(ctx context.Context, repo string, id int, input *scm.MilestoneInput) (*scm.Milestone, *scm.Response, error) {
namespace, name := scm.Split(repo)
in := gitea.EditMilestoneOption{}
stateOpen := gitea.StateOpen
stateClosed := gitea.StateClosed
if input.Title != "" {
in.Title = input.Title
}
switch input.State {
case "open":
in.State = &stateOpen
case "close", "closed":
in.State = &stateClosed
}
if input.Description != "" {
in.Description = &input.Description
}
if input.DueDate != nil {
in.Deadline = input.DueDate
}
out, resp, err := s.client.GiteaClient.EditMilestone(namespace, name, int64(id), in)
return convertMilestone(out), toSCMResponse(resp), err
}
func convertMilestoneList(from []*gitea.Milestone) []*scm.Milestone {
var to []*scm.Milestone
for _, m := range from {
to = append(to, convertMilestone(m))
}
return to
}
func convertMilestone(from *gitea.Milestone) *scm.Milestone {
if from == nil || from.Deadline == nil {
return nil
}
return &scm.Milestone{
Number: int(from.ID),
ID: int(from.ID),
Title: from.Title,
Description: from.Description,
State: string(from.State),
DueDate: from.Deadline,
}
}