cli/api/issue.go

221 lines
5.8 KiB
Go

// This is a silly wrapper for go-gitlab but helps maintain consistency
package api
import (
"net/http"
"github.com/xanzy/go-gitlab"
)
var ListIssueNotes = func(client *gitlab.Client, projectID interface{}, issueID int, opts *gitlab.ListIssueNotesOptions) ([]*gitlab.Note, error) {
if client == nil {
client = apiClient.Lab()
}
if opts.PerPage == 0 {
opts.PerPage = DefaultListLimit
}
notes, _, err := client.Notes.ListIssueNotes(projectID, issueID, opts)
if err != nil {
return nil, err
}
return notes, nil
}
var UpdateIssue = func(client *gitlab.Client, projectID interface{}, issueID int, opts *gitlab.UpdateIssueOptions) (*gitlab.Issue, error) {
if client == nil {
client = apiClient.Lab()
}
issue, _, err := client.Issues.UpdateIssue(projectID, issueID, opts)
if err != nil {
return nil, err
}
return issue, nil
}
var GetIssue = func(client *gitlab.Client, projectID interface{}, issueID int) (*gitlab.Issue, error) {
if client == nil {
client = apiClient.Lab()
}
issue, _, err := client.Issues.GetIssue(projectID, issueID)
if err != nil {
return nil, err
}
return issue, nil
}
var ProjectListIssueOptionsToGroup = func(l *gitlab.ListProjectIssuesOptions) *gitlab.ListGroupIssuesOptions {
return &gitlab.ListGroupIssuesOptions{
ListOptions: l.ListOptions,
State: l.State,
Labels: l.Labels,
NotLabels: l.NotLabels,
WithLabelDetails: l.WithLabelDetails,
IIDs: l.IIDs,
Milestone: l.Milestone,
Scope: l.Scope,
AuthorID: l.AuthorID,
NotAuthorID: l.NotAuthorID,
AssigneeID: l.AssigneeID,
NotAssigneeID: l.NotAssigneeID,
AssigneeUsername: l.AssigneeUsername,
MyReactionEmoji: l.MyReactionEmoji,
NotMyReactionEmoji: l.NotMyReactionEmoji,
OrderBy: l.OrderBy,
Sort: l.Sort,
Search: l.Search,
In: l.In,
CreatedAfter: l.CreatedAfter,
CreatedBefore: l.CreatedBefore,
UpdatedAfter: l.UpdatedAfter,
UpdatedBefore: l.UpdatedBefore,
IssueType: l.IssueType,
}
}
var ListGroupIssues = func(client *gitlab.Client, groupID interface{}, opts *gitlab.ListGroupIssuesOptions) ([]*gitlab.Issue, error) {
if client == nil {
client = apiClient.Lab()
}
if opts.PerPage == 0 {
opts.PerPage = DefaultListLimit
}
issues, _, err := client.Issues.ListGroupIssues(groupID, opts)
if err != nil {
return nil, err
}
return issues, nil
}
var ListIssues = func(client *gitlab.Client, projectID interface{}, opts *gitlab.ListProjectIssuesOptions) ([]*gitlab.Issue, error) {
if client == nil {
client = apiClient.Lab()
}
if opts.PerPage == 0 {
opts.PerPage = DefaultListLimit
}
issues, _, err := client.Issues.ListProjectIssues(projectID, opts)
if err != nil {
return nil, err
}
return issues, nil
}
var CreateIssue = func(client *gitlab.Client, projectID interface{}, opts *gitlab.CreateIssueOptions) (*gitlab.Issue, error) {
if client == nil {
client = apiClient.Lab()
}
issue, _, err := client.Issues.CreateIssue(projectID, opts)
if err != nil {
return nil, err
}
return issue, nil
}
var DeleteIssue = func(client *gitlab.Client, projectID interface{}, issueID int) error {
if client == nil {
client = apiClient.Lab()
}
_, err := client.Issues.DeleteIssue(projectID, issueID)
if err != nil {
return err
}
return nil
}
var CreateIssueNote = func(client *gitlab.Client, projectID interface{}, mrID int, opts *gitlab.CreateIssueNoteOptions) (*gitlab.Note, error) {
if client == nil {
client = apiClient.Lab()
}
note, _, err := client.Notes.CreateIssueNote(projectID, mrID, opts)
if err != nil {
return note, err
}
return note, nil
}
var SubscribeToIssue = func(client *gitlab.Client, projectID interface{}, issueID int, opts gitlab.RequestOptionFunc) (*gitlab.Issue, error) {
if client == nil {
client = apiClient.Lab()
}
issue, resp, err := client.Issues.SubscribeToIssue(projectID, issueID, opts)
if err != nil {
if resp != nil {
// If the user is already subscribed to the issue, the status code 304 is returned.
if resp.StatusCode == http.StatusNotModified {
return nil, ErrIssuableUserAlreadySubscribed
}
}
return issue, err
}
return issue, nil
}
var UnsubscribeFromIssue = func(client *gitlab.Client, projectID interface{}, issueID int, opts gitlab.RequestOptionFunc) (*gitlab.Issue, error) {
if client == nil {
client = apiClient.Lab()
}
issue, resp, err := client.Issues.UnsubscribeFromIssue(projectID, issueID, opts)
if err != nil {
if resp != nil {
// If the user is not subscribed to the issue, the status code 304 is returned.
if resp.StatusCode == http.StatusNotModified {
return nil, ErrIssuableUserNotSubscribed
}
}
return issue, err
}
return issue, nil
}
var LinkIssues = func(client *gitlab.Client, projectID interface{}, issueIDD int, opts *gitlab.CreateIssueLinkOptions) (*gitlab.Issue, *gitlab.Issue, error) {
if client == nil {
client = apiClient.Lab()
}
issueLink, _, err := client.IssueLinks.CreateIssueLink(projectID, issueIDD, opts)
if err != nil {
return nil, nil, err
}
return issueLink.SourceIssue, issueLink.TargetIssue, nil
}
var SetIssueTimeEstimate = func(client *gitlab.Client, projectID interface{}, issueIDD int, opts *gitlab.SetTimeEstimateOptions) (*gitlab.TimeStats, error) {
if client == nil {
client = apiClient.Lab()
}
timeStats, _, err := client.Issues.SetTimeEstimate(projectID, issueIDD, opts)
if err != nil {
return nil, err
}
return timeStats, nil
}
var AddIssueTimeSpent = func(client *gitlab.Client, projectID interface{}, issueIDD int, opts *gitlab.AddSpentTimeOptions) (*gitlab.TimeStats, error) {
if client == nil {
client = apiClient.Lab()
}
timeStats, _, err := client.Issues.AddSpentTime(projectID, issueIDD, opts)
if err != nil {
return nil, err
}
return timeStats, nil
}