mirror of https://gitlab.com/gitlab-org/cli.git
221 lines
5.8 KiB
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
|
|
}
|