Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
G
go-gitlab
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
go
go-gitlab
Commits
b75a71e9
Commit
b75a71e9
authored
Oct 11, 2018
by
Sune Keller
Committed by
Sander van Harmelen
Oct 11, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add Discussions API implementation (#481)
Add Discussions API implementation
parent
b9570190
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
1112 additions
and
1 deletion
+1112
-1
discussions.go
discussions.go
+1082
-0
gitlab.go
gitlab.go
+2
-0
notes.go
notes.go
+28
-1
No files found.
discussions.go
0 → 100644
View file @
b75a71e9
//
// Copyright 2018, Sander van Harmelen
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
package
gitlab
import
(
"fmt"
"net/url"
"time"
)
// DiscussionsService handles communication with the discussions related methods
// of the GitLab API.
//
// GitLab API docs: https://docs.gitlab.com/ce/api/discussions.html
type
DiscussionsService
struct
{
client
*
Client
}
// Discussion represents a GitLab discussion.
//
// GitLab API docs: https://docs.gitlab.com/ce/api/discussions.html
type
Discussion
struct
{
ID
string
`json:"id"`
IndividualNote
bool
`json:"individual_note"`
Notes
[]
*
Note
`json:"notes"`
}
func
(
d
Discussion
)
String
()
string
{
return
Stringify
(
d
)
}
// ListProjectIssueDiscussionsOptions represents the available
// ListIssueDiscussions() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#list-project-issue-discussions
type
ListProjectIssueDiscussionsOptions
ListOptions
// ListProjectIssueDiscussions gets a list of all discussions for a single
// issue.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#list-project-issue-discussions
func
(
s
*
DiscussionsService
)
ListProjectIssueDiscussions
(
pid
interface
{},
issue
int
,
opt
*
ListProjectIssueDiscussionsOptions
,
options
...
OptionFunc
)
([]
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/issues/%d/discussions"
,
url
.
QueryEscape
(
project
),
issue
)
req
,
err
:=
s
.
client
.
NewRequest
(
"GET"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
var
ds
[]
*
Discussion
resp
,
err
:=
s
.
client
.
Do
(
req
,
&
ds
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
ds
,
resp
,
err
}
// GetIssueDiscussion returns a single discussion for a specific project issue.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#get-single-issue-discussion
func
(
s
*
DiscussionsService
)
GetIssueDiscussion
(
pid
interface
{},
issue
int
,
discussion
string
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/issues/%d/discussions/%s"
,
url
.
QueryEscape
(
project
),
issue
,
discussion
)
req
,
err
:=
s
.
client
.
NewRequest
(
"GET"
,
u
,
nil
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// CreateIssueDiscussionOptions represents the available CreateIssueDiscussion()
// options.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#create-new-issue-discussion
type
CreateIssueDiscussionOptions
struct
{
Body
*
string
`url:"body,omitempty" json:"body,omitempty"`
CreatedAt
*
time
.
Time
`url:"created_at,omitempty" json:"created_at,omitempty"`
}
// CreateIssueDiscussion creates a new discussion to a single project issue.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#create-new-issue-discussion
func
(
s
*
DiscussionsService
)
CreateIssueDiscussion
(
pid
interface
{},
issue
int
,
opt
*
CreateIssueDiscussionOptions
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/issues/%d/discussions"
,
url
.
QueryEscape
(
project
),
issue
)
req
,
err
:=
s
.
client
.
NewRequest
(
"POST"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// AddIssueDiscussionNoteOptions represents the available
// AddIssueDiscussionNote() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#add-note-to-existing-issue-discussion
type
AddIssueDiscussionNoteOptions
struct
{
Body
*
string
`url:"body,omitempty" json:"body,omitempty"`
CreatedAt
*
time
.
Time
`url:"created_at,omitempty" json:"created_at,omitempty"`
}
// AddIssueDiscussionNote creates a new discussion to a single project issue.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#add-note-to-existing-issue-discussion
func
(
s
*
DiscussionsService
)
AddIssueDiscussionNote
(
pid
interface
{},
issue
int
,
discussion
string
,
opt
*
AddIssueDiscussionNoteOptions
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/issues/%d/discussions/%s/notes"
,
url
.
QueryEscape
(
project
),
issue
,
discussion
)
req
,
err
:=
s
.
client
.
NewRequest
(
"POST"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// UpdateIssueDiscussionNoteOptions represents the available
// UpdateIssueDiscussion() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#modify-existing-issue-discussion-note
type
UpdateIssueDiscussionNoteOptions
struct
{
Body
*
string
`url:"body,omitempty" json:"body,omitempty"`
CreatedAt
*
time
.
Time
`url:"created_at,omitempty" json:"created_at,omitempty"`
}
// UpdateIssueDiscussionNote modifies existing discussion of an issue.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#modify-existing-issue-discussion-note
func
(
s
*
DiscussionsService
)
UpdateIssueDiscussionNote
(
pid
interface
{},
issue
int
,
discussion
string
,
note
int
,
opt
*
UpdateIssueDiscussionNoteOptions
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/issues/%d/discussions/%s/notes/%d"
,
url
.
QueryEscape
(
project
),
issue
,
discussion
,
note
)
req
,
err
:=
s
.
client
.
NewRequest
(
"PUT"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// DeleteIssueDiscussionNote deletes an existing discussion of an issue.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#delete-an-issue-discussion-note
func
(
s
*
DiscussionsService
)
DeleteIssueDiscussionNote
(
pid
interface
{},
issue
int
,
discussion
string
,
note
int
,
options
...
OptionFunc
)
(
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/issues/%d/discussions/%s/notes/%d"
,
url
.
QueryEscape
(
project
),
issue
,
discussion
,
note
)
req
,
err
:=
s
.
client
.
NewRequest
(
"DELETE"
,
u
,
nil
,
options
)
if
err
!=
nil
{
return
nil
,
err
}
return
s
.
client
.
Do
(
req
,
nil
)
}
// ListProjectSnippetDiscussionsOptions represents the available
// ListSnippetDiscussions() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#list-all-snippet-discussions
type
ListProjectSnippetDiscussionsOptions
ListOptions
// ListProjectSnippetDiscussions gets a list of all discussions for a single
// snippet. Snippet discussions are comments users can post to a snippet.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#list-all-snippet-discussions
func
(
s
*
DiscussionsService
)
ListProjectSnippetDiscussions
(
pid
interface
{},
snippet
int
,
opt
*
ListProjectSnippetDiscussionsOptions
,
options
...
OptionFunc
)
([]
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/snippets/%d/discussions"
,
url
.
QueryEscape
(
project
),
snippet
)
req
,
err
:=
s
.
client
.
NewRequest
(
"GET"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
var
ds
[]
*
Discussion
resp
,
err
:=
s
.
client
.
Do
(
req
,
&
ds
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
ds
,
resp
,
err
}
// GetSnippetDiscussion returns a single discussion for a given snippet.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#get-single-snippet-discussion
func
(
s
*
DiscussionsService
)
GetSnippetDiscussion
(
pid
interface
{},
snippet
int
,
discussion
string
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/snippets/%d/discussions/%s"
,
url
.
QueryEscape
(
project
),
snippet
,
discussion
)
req
,
err
:=
s
.
client
.
NewRequest
(
"GET"
,
u
,
nil
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// CreateSnippetDiscussionOptions represents the available
// CreateSnippetDiscussion() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#create-new-snippet-discussion
type
CreateSnippetDiscussionOptions
struct
{
Body
*
string
`url:"body,omitempty" json:"body,omitempty"`
CreatedAt
*
time
.
Time
`url:"created_at,omitempty" json:"created_at,omitempty"`
}
// CreateSnippetDiscussion creates a new discussion for a single snippet.
// Snippet discussions are comments users can post to a snippet.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#create-new-snippet-discussion
func
(
s
*
DiscussionsService
)
CreateSnippetDiscussion
(
pid
interface
{},
snippet
int
,
opt
*
CreateSnippetDiscussionOptions
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/snippets/%d/discussions"
,
url
.
QueryEscape
(
project
),
snippet
)
req
,
err
:=
s
.
client
.
NewRequest
(
"POST"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// AddSnippetDiscussionNoteOptions represents the available
// AddSnippetDiscussionNote() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#add-note-to-existing-snippet-discussion
type
AddSnippetDiscussionNoteOptions
struct
{
Body
*
string
`url:"body,omitempty" json:"body,omitempty"`
CreatedAt
*
time
.
Time
`url:"created_at,omitempty" json:"created_at,omitempty"`
}
// AddSnippetDiscussionNote creates a new discussion to a single project
// snippet.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#add-note-to-existing-snippet-discussion
func
(
s
*
DiscussionsService
)
AddSnippetDiscussionNote
(
pid
interface
{},
snippet
int
,
discussion
string
,
opt
*
AddSnippetDiscussionNoteOptions
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/snippets/%d/discussions/%s/notes"
,
url
.
QueryEscape
(
project
),
snippet
,
discussion
)
req
,
err
:=
s
.
client
.
NewRequest
(
"POST"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// UpdateSnippetDiscussionNoteOptions represents the available
// UpdateSnippetDiscussion() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#modify-existing-snippet-discussion-note
type
UpdateSnippetDiscussionNoteOptions
struct
{
Body
*
string
`url:"body,omitempty" json:"body,omitempty"`
CreatedAt
*
time
.
Time
`url:"created_at,omitempty" json:"created_at,omitempty"`
}
// UpdateSnippetDiscussionNote modifies existing discussion of a snippet.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#modify-existing-snippet-discussion-note
func
(
s
*
DiscussionsService
)
UpdateSnippetDiscussionNote
(
pid
interface
{},
snippet
int
,
discussion
string
,
note
int
,
opt
*
UpdateSnippetDiscussionNoteOptions
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/snippets/%d/discussions/%s/notes/%d"
,
url
.
QueryEscape
(
project
),
snippet
,
discussion
,
note
)
req
,
err
:=
s
.
client
.
NewRequest
(
"PUT"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// DeleteSnippetDiscussionNote deletes an existing discussion of a snippet.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#delete-a-snippet-discussion-note
func
(
s
*
DiscussionsService
)
DeleteSnippetDiscussionNote
(
pid
interface
{},
snippet
int
,
discussion
string
,
note
int
,
options
...
OptionFunc
)
(
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/snippets/%d/discussions/%s/notes/%d"
,
url
.
QueryEscape
(
project
),
snippet
,
discussion
,
note
)
req
,
err
:=
s
.
client
.
NewRequest
(
"DELETE"
,
u
,
nil
,
options
)
if
err
!=
nil
{
return
nil
,
err
}
return
s
.
client
.
Do
(
req
,
nil
)
}
// ListGroupEpicDiscussionsOptions represents the available
// ListEpicDiscussions() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/discussions.html#list-all-epic-discussions
type
ListGroupEpicDiscussionsOptions
ListOptions
// ListGroupEpicDiscussions gets a list of all discussions for a single
// epic. Epic discussions are comments users can post to a epic.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/discussions.html#list-all-epic-discussions
func
(
s
*
DiscussionsService
)
ListGroupEpicDiscussions
(
gid
interface
{},
epic
int
,
opt
*
ListGroupEpicDiscussionsOptions
,
options
...
OptionFunc
)
([]
*
Discussion
,
*
Response
,
error
)
{
group
,
err
:=
parseID
(
gid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"groups/%s/epics/%d/discussions"
,
url
.
QueryEscape
(
group
),
epic
)
req
,
err
:=
s
.
client
.
NewRequest
(
"GET"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
var
ds
[]
*
Discussion
resp
,
err
:=
s
.
client
.
Do
(
req
,
&
ds
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
ds
,
resp
,
err
}
// GetEpicDiscussion returns a single discussion for a given epic.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/discussions.html#get-single-epic-discussion
func
(
s
*
DiscussionsService
)
GetEpicDiscussion
(
gid
interface
{},
epic
int
,
discussion
string
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
group
,
err
:=
parseID
(
gid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"groups/%s/epics/%d/discussions/%s"
,
url
.
QueryEscape
(
group
),
epic
,
discussion
)
req
,
err
:=
s
.
client
.
NewRequest
(
"GET"
,
u
,
nil
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// CreateEpicDiscussionOptions represents the available CreateEpicDiscussion()
// options.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/discussions.html#create-new-epic-discussion
type
CreateEpicDiscussionOptions
struct
{
Body
*
string
`url:"body,omitempty" json:"body,omitempty"`
CreatedAt
*
time
.
Time
`url:"created_at,omitempty" json:"created_at,omitempty"`
}
// CreateEpicDiscussion creates a new discussion for a single epic. Epic
// discussions are comments users can post to a epic.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/discussions.html#create-new-epic-discussion
func
(
s
*
DiscussionsService
)
CreateEpicDiscussion
(
gid
interface
{},
epic
int
,
opt
*
CreateEpicDiscussionOptions
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
group
,
err
:=
parseID
(
gid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"groups/%s/epics/%d/discussions"
,
url
.
QueryEscape
(
group
),
epic
)
req
,
err
:=
s
.
client
.
NewRequest
(
"POST"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// AddEpicDiscussionNoteOptions represents the available
// AddEpicDiscussionNote() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/discussions.html#add-note-to-existing-epic-discussion
type
AddEpicDiscussionNoteOptions
struct
{
Body
*
string
`url:"body,omitempty" json:"body,omitempty"`
CreatedAt
*
time
.
Time
`url:"created_at,omitempty" json:"created_at,omitempty"`
}
// AddEpicDiscussionNote creates a new discussion to a single project epic.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/discussions.html#add-note-to-existing-epic-discussion
func
(
s
*
DiscussionsService
)
AddEpicDiscussionNote
(
gid
interface
{},
epic
int
,
discussion
string
,
opt
*
AddEpicDiscussionNoteOptions
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
group
,
err
:=
parseID
(
gid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"groups/%s/epics/%d/discussions/%s/notes"
,
url
.
QueryEscape
(
group
),
epic
,
discussion
)
req
,
err
:=
s
.
client
.
NewRequest
(
"POST"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// UpdateEpicDiscussionNoteOptions represents the available
// UpdateEpicDiscussion() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/discussions.html#modify-existing-epic-discussion-note
type
UpdateEpicDiscussionNoteOptions
struct
{
Body
*
string
`url:"body,omitempty" json:"body,omitempty"`
CreatedAt
*
time
.
Time
`url:"created_at,omitempty" json:"created_at,omitempty"`
}
// UpdateEpicDiscussionNote modifies existing discussion of a epic.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/discussions.html#modify-existing-epic-discussion-note
func
(
s
*
DiscussionsService
)
UpdateEpicDiscussionNote
(
gid
interface
{},
epic
int
,
discussion
string
,
note
int
,
opt
*
UpdateEpicDiscussionNoteOptions
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
group
,
err
:=
parseID
(
gid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"groups/%s/epics/%d/discussions/%s/notes/%d"
,
url
.
QueryEscape
(
group
),
epic
,
discussion
,
note
)
req
,
err
:=
s
.
client
.
NewRequest
(
"PUT"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// DeleteEpicDiscussionNote deletes an existing discussion of a epic.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/discussions.html#delete-an-epic-discussion-note
func
(
s
*
DiscussionsService
)
DeleteEpicDiscussionNote
(
gid
interface
{},
epic
int
,
discussion
string
,
note
int
,
options
...
OptionFunc
)
(
*
Response
,
error
)
{
group
,
err
:=
parseID
(
gid
)
if
err
!=
nil
{
return
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"groups/%s/epics/%d/discussions/%s/notes/%d"
,
url
.
QueryEscape
(
group
),
epic
,
discussion
,
note
)
req
,
err
:=
s
.
client
.
NewRequest
(
"DELETE"
,
u
,
nil
,
options
)
if
err
!=
nil
{
return
nil
,
err
}
return
s
.
client
.
Do
(
req
,
nil
)
}
// ListMergeRequestDiscussionsOptions represents the available
// ListMergeRequestDiscussions() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#list-all-merge-request-discussions
type
ListMergeRequestDiscussionsOptions
ListOptions
// ListMergeRequestDiscussions gets a list of all discussions for a single
// merge request.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#list-all-merge-request-discussions
func
(
s
*
DiscussionsService
)
ListMergeRequestDiscussions
(
pid
interface
{},
mergeRequest
int
,
opt
*
ListMergeRequestDiscussionsOptions
,
options
...
OptionFunc
)
([]
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/merge_requests/%d/discussions"
,
url
.
QueryEscape
(
project
),
mergeRequest
)
req
,
err
:=
s
.
client
.
NewRequest
(
"GET"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
var
ds
[]
*
Discussion
resp
,
err
:=
s
.
client
.
Do
(
req
,
&
ds
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
ds
,
resp
,
err
}
// GetMergeRequestDiscussion returns a single discussion for a given merge
// request.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#get-single-merge-request-discussion
func
(
s
*
DiscussionsService
)
GetMergeRequestDiscussion
(
pid
interface
{},
mergeRequest
int
,
discussion
string
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/merge_requests/%d/discussions/%s"
,
url
.
QueryEscape
(
project
),
mergeRequest
,
discussion
)
req
,
err
:=
s
.
client
.
NewRequest
(
"GET"
,
u
,
nil
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// CreateMergeRequestDiscussionOptions represents the available
// CreateMergeRequestDiscussion() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#create-new-merge-request-discussion
type
CreateMergeRequestDiscussionOptions
struct
{
Body
*
string
`url:"body,omitempty" json:"body,omitempty"`
CreatedAt
*
time
.
Time
`url:"created_at,omitempty" json:"created_at,omitempty"`
Position
*
NotePosition
`url:"position,omitempty" json:"position,omitempty"`
}
// CreateMergeRequestDiscussion creates a new discussion for a single merge
// request.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#create-new-merge-request-discussion
func
(
s
*
DiscussionsService
)
CreateMergeRequestDiscussion
(
pid
interface
{},
mergeRequest
int
,
opt
*
CreateMergeRequestDiscussionOptions
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/merge_requests/%d/discussions"
,
url
.
QueryEscape
(
project
),
mergeRequest
)
req
,
err
:=
s
.
client
.
NewRequest
(
"POST"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// ResolveMergeRequestDiscussionOptions represents the available
// ResolveMergeRequestDiscussion() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/discussions.html#resolve-a-merge-request-discussion
type
ResolveMergeRequestDiscussionOptions
struct
{
Resolved
*
bool
`url:"resolved,omitempty" json:"resolved,omitempty"`
}
// ResolveMergeRequestDiscussion resolves/unresolves whole discussion of a merge
// request.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/discussions.html#resolve-a-merge-request-discussion
func
(
s
*
DiscussionsService
)
ResolveMergeRequestDiscussion
(
pid
interface
{},
mergeRequest
int
,
discussion
string
,
opt
*
ResolveMergeRequestDiscussionOptions
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/merge_requests/%d/discussions/%s"
,
url
.
QueryEscape
(
project
),
mergeRequest
,
discussion
)
req
,
err
:=
s
.
client
.
NewRequest
(
"PUT"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// AddMergeRequestDiscussionNoteOptions represents the available
// AddMergeRequestDiscussionNote() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#add-note-to-existing-merge-request-discussion
type
AddMergeRequestDiscussionNoteOptions
struct
{
Body
*
string
`url:"body,omitempty" json:"body,omitempty"`
CreatedAt
*
time
.
Time
`url:"created_at,omitempty" json:"created_at,omitempty"`
}
// AddMergeRequestDiscussionNote creates a new discussion to a single project
// merge request.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#add-note-to-existing-merge-request-discussion
func
(
s
*
DiscussionsService
)
AddMergeRequestDiscussionNote
(
pid
interface
{},
mergeRequest
int
,
discussion
string
,
opt
*
AddMergeRequestDiscussionNoteOptions
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/merge_requests/%d/discussions/%s/notes"
,
url
.
QueryEscape
(
project
),
mergeRequest
,
discussion
)
req
,
err
:=
s
.
client
.
NewRequest
(
"POST"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// UpdateMergeRequestDiscussionNoteOptions represents the available
// UpdateMergeRequestDiscussion() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#modify-existing-merge-request-discussion-note
type
UpdateMergeRequestDiscussionNoteOptions
struct
{
Body
*
string
`url:"body,omitempty" json:"body,omitempty"`
CreatedAt
*
time
.
Time
`url:"created_at,omitempty" json:"created_at,omitempty"`
}
// UpdateMergeRequestDiscussionNote modifies existing discussion of a merge
// request.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#modify-existing-merge-request-discussion-note
func
(
s
*
DiscussionsService
)
UpdateMergeRequestDiscussionNote
(
pid
interface
{},
mergeRequest
int
,
discussion
string
,
note
int
,
opt
*
UpdateMergeRequestDiscussionNoteOptions
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/merge_requests/%d/discussions/%s/notes/%d"
,
url
.
QueryEscape
(
project
),
mergeRequest
,
discussion
,
note
)
req
,
err
:=
s
.
client
.
NewRequest
(
"PUT"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// DeleteMergeRequestDiscussionNote deletes an existing discussion of a merge
// request.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#delete-a-merge-request-discussion-note
func
(
s
*
DiscussionsService
)
DeleteMergeRequestDiscussionNote
(
pid
interface
{},
mergeRequest
int
,
discussion
string
,
note
int
,
options
...
OptionFunc
)
(
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/merge_requests/%d/discussions/%s/notes/%d"
,
url
.
QueryEscape
(
project
),
mergeRequest
,
discussion
,
note
)
req
,
err
:=
s
.
client
.
NewRequest
(
"DELETE"
,
u
,
nil
,
options
)
if
err
!=
nil
{
return
nil
,
err
}
return
s
.
client
.
Do
(
req
,
nil
)
}
// ListProjectCommitDiscussionsOptions represents the available
// ListCommitDiscussions() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#list-project-commit-discussions
type
ListProjectCommitDiscussionsOptions
ListOptions
// ListProjectCommitDiscussions gets a list of all discussions for a single
// commit.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#list-project-commit-discussions
func
(
s
*
DiscussionsService
)
ListProjectCommitDiscussions
(
pid
interface
{},
commit
string
,
opt
*
ListProjectCommitDiscussionsOptions
,
options
...
OptionFunc
)
([]
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/repository/commits/%s/discussions"
,
url
.
QueryEscape
(
project
),
commit
)
req
,
err
:=
s
.
client
.
NewRequest
(
"GET"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
var
ds
[]
*
Discussion
resp
,
err
:=
s
.
client
.
Do
(
req
,
&
ds
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
ds
,
resp
,
err
}
// GetCommitDiscussion returns a single discussion for a specific project
// commit.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#get-single-commit-discussion
func
(
s
*
DiscussionsService
)
GetCommitDiscussion
(
pid
interface
{},
commit
string
,
discussion
string
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/repository/commits/%s/discussions/%s"
,
url
.
QueryEscape
(
project
),
commit
,
discussion
)
req
,
err
:=
s
.
client
.
NewRequest
(
"GET"
,
u
,
nil
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// CreateCommitDiscussionOptions represents the available
// CreateCommitDiscussion() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#create-new-commit-discussion
type
CreateCommitDiscussionOptions
struct
{
Body
*
string
`url:"body,omitempty" json:"body,omitempty"`
CreatedAt
*
time
.
Time
`url:"created_at,omitempty" json:"created_at,omitempty"`
Position
*
NotePosition
`url:"position,omitempty" json:"position,omitempty"`
}
// CreateCommitDiscussion creates a new discussion to a single project commit.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#create-new-commit-discussion
func
(
s
*
DiscussionsService
)
CreateCommitDiscussion
(
pid
interface
{},
commit
string
,
opt
*
CreateCommitDiscussionOptions
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/repository/commits/%s/discussions"
,
url
.
QueryEscape
(
project
),
commit
)
req
,
err
:=
s
.
client
.
NewRequest
(
"POST"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// AddCommitDiscussionNoteOptions represents the available
// AddCommitDiscussionNote() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#add-note-to-existing-commit-discussion
type
AddCommitDiscussionNoteOptions
struct
{
Body
*
string
`url:"body,omitempty" json:"body,omitempty"`
CreatedAt
*
time
.
Time
`url:"created_at,omitempty" json:"created_at,omitempty"`
}
// AddCommitDiscussionNote creates a new discussion to a single project commit.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#add-note-to-existing-commit-discussion
func
(
s
*
DiscussionsService
)
AddCommitDiscussionNote
(
pid
interface
{},
commit
string
,
discussion
string
,
opt
*
AddCommitDiscussionNoteOptions
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/repository/commits/%s/discussions/%s/notes"
,
url
.
QueryEscape
(
project
),
commit
,
discussion
)
req
,
err
:=
s
.
client
.
NewRequest
(
"POST"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// UpdateCommitDiscussionNoteOptions represents the available
// UpdateCommitDiscussion() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#modify-existing-commit-discussion-note
type
UpdateCommitDiscussionNoteOptions
struct
{
Body
*
string
`url:"body,omitempty" json:"body,omitempty"`
CreatedAt
*
time
.
Time
`url:"created_at,omitempty" json:"created_at,omitempty"`
}
// UpdateCommitDiscussionNote modifies existing discussion of an commit.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#modify-existing-commit-discussion-note
func
(
s
*
DiscussionsService
)
UpdateCommitDiscussionNote
(
pid
interface
{},
commit
string
,
discussion
string
,
note
int
,
opt
*
UpdateCommitDiscussionNoteOptions
,
options
...
OptionFunc
)
(
*
Discussion
,
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/repository/commits/%s/discussions/%s/notes/%d"
,
url
.
QueryEscape
(
project
),
commit
,
discussion
,
note
)
req
,
err
:=
s
.
client
.
NewRequest
(
"PUT"
,
u
,
opt
,
options
)
if
err
!=
nil
{
return
nil
,
nil
,
err
}
d
:=
new
(
Discussion
)
resp
,
err
:=
s
.
client
.
Do
(
req
,
d
)
if
err
!=
nil
{
return
nil
,
resp
,
err
}
return
d
,
resp
,
err
}
// DeleteCommitDiscussionNote deletes an existing discussion of an commit.
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/discussions.html#delete-an-commit-discussion-note
func
(
s
*
DiscussionsService
)
DeleteCommitDiscussionNote
(
pid
interface
{},
commit
string
,
discussion
string
,
note
int
,
options
...
OptionFunc
)
(
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/repository/commits/%s/discussions/%s/notes/%d"
,
url
.
QueryEscape
(
project
),
commit
,
discussion
,
note
)
req
,
err
:=
s
.
client
.
NewRequest
(
"DELETE"
,
u
,
nil
,
options
)
if
err
!=
nil
{
return
nil
,
err
}
return
s
.
client
.
Do
(
req
,
nil
)
}
gitlab.go
View file @
b75a71e9
...
...
@@ -287,6 +287,7 @@ type Client struct {
CustomAttribute
*
CustomAttributesService
DeployKeys
*
DeployKeysService
Deployments
*
DeploymentsService
Discussions
*
DiscussionsService
Environments
*
EnvironmentsService
Events
*
EventsService
Features
*
FeaturesService
...
...
@@ -426,6 +427,7 @@ func newClient(httpClient *http.Client) *Client {
c
.
CustomAttribute
=
&
CustomAttributesService
{
client
:
c
}
c
.
DeployKeys
=
&
DeployKeysService
{
client
:
c
}
c
.
Deployments
=
&
DeploymentsService
{
client
:
c
}
c
.
Discussions
=
&
DiscussionsService
{
client
:
c
}
c
.
Environments
=
&
EnvironmentsService
{
client
:
c
}
c
.
Events
=
&
EventsService
{
client
:
c
}
c
.
Features
=
&
FeaturesService
{
client
:
c
}
...
...
notes.go
View file @
b75a71e9
...
...
@@ -45,7 +45,6 @@ type Note struct {
Email
string
`json:"email"`
Name
string
`json:"name"`
State
string
`json:"state"`
CreatedAt
*
time
.
Time
`json:"created_at"`
AvatarURL
string
`json:"avatar_url"`
WebURL
string
`json:"web_url"`
}
`json:"author"`
...
...
@@ -55,9 +54,37 @@ type Note struct {
CreatedAt
*
time
.
Time
`json:"created_at"`
NoteableID
int
`json:"noteable_id"`
NoteableType
string
`json:"noteable_type"`
Position
*
NotePosition
`json:"position"`
Resolvable
bool
`json:"resolvable"`
Resolved
bool
`json:"resolved"`
ResolvedBy
struct
{
ID
int
`json:"id"`
Username
string
`json:"username"`
Email
string
`json:"email"`
Name
string
`json:"name"`
State
string
`json:"state"`
AvatarURL
string
`json:"avatar_url"`
WebURL
string
`json:"web_url"`
}
`json:"resolved_by"`
NoteableIID
int
`json:"noteable_iid"`
}
// NotePosition represents the "position" attributes on a note
type
NotePosition
struct
{
BaseSHA
string
`json:"base_sha"`
StartSHA
string
`json:"start_sha"`
HeadSHA
string
`json:"head_sha"`
PositionType
string
`json:"position_type"`
NewPath
string
`json:"new_path,omitempty"`
NewLine
int
`json:"new_line,omitempty"`
OldPath
string
`json:"old_path,omitempty"`
OldLine
int
`json:"old_line,omitempty"`
Width
int
`json:"width,omitempty"`
Height
int
`json:"height,omitempty"`
X
int
`json:"x,omitempty"`
Y
int
`json:"y,omitempty"`
}
func
(
n
Note
)
String
()
string
{
return
Stringify
(
n
)
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment