Commit ca13d83a authored by Sander van Harmelen's avatar Sander van Harmelen

Merge pull request #48 from svanharmelen/b-fix-labels

Fix label marshalling
parents 38647abb b09c4d27
...@@ -76,15 +76,23 @@ func (i Issue) String() string { ...@@ -76,15 +76,23 @@ func (i Issue) String() string {
return Stringify(i) return Stringify(i)
} }
// Labels is a custom type with specific marshaling characteristics.
type Labels []string
// MarshalJSON implements the json.Marshaler interface.
func (l *Labels) MarshalJSON() ([]byte, error) {
return []byte(strings.Join(*l, ",")), nil
}
// ListIssuesOptions represents the available ListIssues() options. // ListIssuesOptions represents the available ListIssues() options.
// //
// GitLab API docs: http://doc.gitlab.com/ce/api/issues.html#list-issues // GitLab API docs: http://doc.gitlab.com/ce/api/issues.html#list-issues
type ListIssuesOptions struct { type ListIssuesOptions struct {
ListOptions ListOptions
State string `url:"state,omitempty" json:"state,omitempty"` State string `url:"state,omitempty" json:"state,omitempty"`
Labels []string `url:"labels,omitempty" json:"labels,omitempty"` Labels Labels `url:"labels,comma,omitempty" json:"labels,omitempty"`
OrderBy string `url:"order_by,omitempty" json:"order_by,omitempty"` OrderBy string `url:"order_by,omitempty" json:"order_by,omitempty"`
Sort string `url:"sort,omitempty" json:"sort,omitempty"` Sort string `url:"sort,omitempty" json:"sort,omitempty"`
} }
// ListIssues gets all issues created by authenticated user. This function // ListIssues gets all issues created by authenticated user. This function
...@@ -111,12 +119,12 @@ func (s *IssuesService) ListIssues(opt *ListIssuesOptions) ([]*Issue, *Response, ...@@ -111,12 +119,12 @@ func (s *IssuesService) ListIssues(opt *ListIssuesOptions) ([]*Issue, *Response,
// GitLab API docs: http://doc.gitlab.com/ce/api/issues.html#list-issues // GitLab API docs: http://doc.gitlab.com/ce/api/issues.html#list-issues
type ListProjectIssuesOptions struct { type ListProjectIssuesOptions struct {
ListOptions ListOptions
IID int `url:"iid,omitempty" json:"iid,omitempty"` IID int `url:"iid,omitempty" json:"iid,omitempty"`
State string `url:"state,omitempty" json:"state,omitempty"` State string `url:"state,omitempty" json:"state,omitempty"`
Labels []string `url:"labels,omitempty" json:"labels,omitempty"` Labels Labels `url:"labels,comma,omitempty" json:"labels,omitempty"`
Milestone string `url:"milestone,omitempty" json:"milestone,omitempty"` Milestone string `url:"milestone,omitempty" json:"milestone,omitempty"`
OrderBy string `url:"order_by,omitempty" json:"order_by,omitempty"` OrderBy string `url:"order_by,omitempty" json:"order_by,omitempty"`
Sort string `url:"sort,omitempty" json:"sort,omitempty"` Sort string `url:"sort,omitempty" json:"sort,omitempty"`
} }
// ListProjectIssues gets a list of project issues. This function accepts // ListProjectIssues gets a list of project issues. This function accepts
...@@ -174,11 +182,11 @@ func (s *IssuesService) GetIssue(pid interface{}, issue int) (*Issue, *Response, ...@@ -174,11 +182,11 @@ func (s *IssuesService) GetIssue(pid interface{}, issue int) (*Issue, *Response,
// //
// GitLab API docs: http://doc.gitlab.com/ce/api/issues.html#new-issues // GitLab API docs: http://doc.gitlab.com/ce/api/issues.html#new-issues
type CreateIssueOptions struct { type CreateIssueOptions struct {
Title string `url:"title,omitempty" json:"title,omitempty"` Title string `url:"title,omitempty" json:"title,omitempty"`
Description string `url:"description,omitempty" json:"description,omitempty"` Description string `url:"description,omitempty" json:"description,omitempty"`
AssigneeID int `url:"assignee_id,omitempty" json:"assignee_id,omitempty"` AssigneeID int `url:"assignee_id,omitempty" json:"assignee_id,omitempty"`
MilestoneID int `url:"milestone_id,omitempty" json:"milestone_id,omitempty"` MilestoneID int `url:"milestone_id,omitempty" json:"milestone_id,omitempty"`
Labels []string `url:"labels,omitempty" json:"labels,omitempty"` Labels Labels `url:"labels,comma,omitempty" json:"labels,omitempty"`
} }
// CreateIssue creates a new project issue. // CreateIssue creates a new project issue.
...@@ -193,11 +201,6 @@ func (s *IssuesService) CreateIssue( ...@@ -193,11 +201,6 @@ func (s *IssuesService) CreateIssue(
} }
u := fmt.Sprintf("projects/%s/issues", url.QueryEscape(project)) u := fmt.Sprintf("projects/%s/issues", url.QueryEscape(project))
// This is needed to get a single, comma separated string
if len(opt.Labels) > 0 {
opt.Labels = []string{strings.Join(opt.Labels, ",")}
}
req, err := s.client.NewRequest("POST", u, opt) req, err := s.client.NewRequest("POST", u, opt)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
...@@ -218,12 +221,12 @@ func (s *IssuesService) CreateIssue( ...@@ -218,12 +221,12 @@ func (s *IssuesService) CreateIssue(
// //
// GitLab API docs: http://doc.gitlab.com/ce/api/issues.html#edit-issues // GitLab API docs: http://doc.gitlab.com/ce/api/issues.html#edit-issues
type UpdateIssueOptions struct { type UpdateIssueOptions struct {
Title string `url:"title,omitempty" json:"title,omitempty"` Title string `url:"title,omitempty" json:"title,omitempty"`
Description string `url:"description,omitempty" json:"description,omitempty"` Description string `url:"description,omitempty" json:"description,omitempty"`
AssigneeID int `url:"assignee_id,omitempty" json:"assignee_id,omitempty"` AssigneeID int `url:"assignee_id,omitempty" json:"assignee_id,omitempty"`
MilestoneID int `url:"milestone_id,omitempty" json:"milestone_id,omitempty"` MilestoneID int `url:"milestone_id,omitempty" json:"milestone_id,omitempty"`
Labels []string `url:"labels,omitempty" json:"labels,omitempty"` Labels Labels `url:"labels,comma,omitempty" json:"labels,omitempty"`
StateEvent string `url:"state_event,omitempty" json:"state_event,omitempty"` StateEvent string `url:"state_event,omitempty" json:"state_event,omitempty"`
} }
// UpdateIssue updates an existing project issue. This function is also used // UpdateIssue updates an existing project issue. This function is also used
...@@ -240,9 +243,6 @@ func (s *IssuesService) UpdateIssue( ...@@ -240,9 +243,6 @@ func (s *IssuesService) UpdateIssue(
} }
u := fmt.Sprintf("projects/%s/issues/%d", url.QueryEscape(project), issue) u := fmt.Sprintf("projects/%s/issues/%d", url.QueryEscape(project), issue)
// This is needed to get a single, comma separated string
opt.Labels = []string{strings.Join(opt.Labels, ",")}
req, err := s.client.NewRequest("PUT", u, opt) req, err := s.client.NewRequest("PUT", u, opt)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, err
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment