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
faf7c98e
Commit
faf7c98e
authored
Mar 05, 2018
by
Maxime Roussin-Bélanger
Committed by
Sander van Harmelen
Mar 05, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add search API (#335)
* Add search API * Refactor the SearchService a bit…
parent
dfc0d4f7
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
330 additions
and
0 deletions
+330
-0
gitlab.go
gitlab.go
+2
-0
notes.go
notes.go
+2
-0
search.go
search.go
+326
-0
No files found.
gitlab.go
View file @
faf7c98e
...
...
@@ -296,6 +296,7 @@ type Client struct {
Repositories
*
RepositoriesService
RepositoryFiles
*
RepositoryFilesService
Runners
*
RunnersService
Search
*
SearchService
Services
*
ServicesService
Session
*
SessionService
Settings
*
SettingsService
...
...
@@ -384,6 +385,7 @@ func newClient(httpClient *http.Client, tokenType tokenType, token string) *Clie
c
.
RepositoryFiles
=
&
RepositoryFilesService
{
client
:
c
}
c
.
Runners
=
&
RunnersService
{
client
:
c
}
c
.
Services
=
&
ServicesService
{
client
:
c
}
c
.
Search
=
&
SearchService
{
client
:
c
}
c
.
Session
=
&
SessionService
{
client
:
c
}
c
.
Settings
=
&
SettingsService
{
client
:
c
}
c
.
Sidekiq
=
&
SidekiqService
{
client
:
c
}
...
...
notes.go
View file @
faf7c98e
...
...
@@ -46,6 +46,8 @@ type Note struct {
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"`
System
bool
`json:"system"`
ExpiresAt
*
time
.
Time
`json:"expires_at"`
...
...
search.go
0 → 100644
View file @
faf7c98e
//
// 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"
)
// SearchService handles communication with the search related methods of the
// GitLab API.
//
// GitLab API docs: https://docs.gitlab.com/ce/api/search.html
type
SearchService
struct
{
client
*
Client
}
// SearchOptions represents the available options for all search methods.
//
// GitLab API docs: https://docs.gitlab.com/ce/api/search.html
type
SearchOptions
ListOptions
type
searchOptions
struct
{
SearchOptions
Scope
string
`url:"scope" json:"scope"`
Search
string
`url:"search" json:"search"`
}
// Projects searches the expression within projects
//
// GitLab API docs: https://docs.gitlab.com/ce/api/search.html#scope-projects
func
(
s
*
SearchService
)
Projects
(
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Project
,
*
Response
,
error
)
{
var
ps
[]
*
Project
resp
,
err
:=
s
.
search
(
"projects"
,
query
,
&
ps
,
opt
,
options
...
)
return
ps
,
resp
,
err
}
// ProjectsByGroup searches the expression within projects for
// the specified group
//
// GitLab API docs: https://docs.gitlab.com/ce/api/search.html#group-search-api
func
(
s
*
SearchService
)
ProjectsByGroup
(
gid
interface
{},
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Project
,
*
Response
,
error
)
{
var
ps
[]
*
Project
resp
,
err
:=
s
.
searchByGroup
(
gid
,
"projects"
,
query
,
&
ps
,
opt
,
options
...
)
return
ps
,
resp
,
err
}
// Issues searches the expression within issues
//
// GitLab API docs: https://docs.gitlab.com/ce/api/search.html#scope-issues
func
(
s
*
SearchService
)
Issues
(
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Issue
,
*
Response
,
error
)
{
var
is
[]
*
Issue
resp
,
err
:=
s
.
search
(
"issues"
,
query
,
&
is
,
opt
,
options
...
)
return
is
,
resp
,
err
}
// IssuesByGroup searches the expression within issues for
// the specified group
//
// GitLab API docs: https://docs.gitlab.com/ce/api/search.html#scope-issues
func
(
s
*
SearchService
)
IssuesByGroup
(
gid
interface
{},
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Issue
,
*
Response
,
error
)
{
var
is
[]
*
Issue
resp
,
err
:=
s
.
searchByGroup
(
gid
,
"issues"
,
query
,
&
is
,
opt
,
options
...
)
return
is
,
resp
,
err
}
// IssuesByProject searches the expression within issues for
// the specified project
//
// GitLab API docs: https://docs.gitlab.com/ce/api/search.html#scope-issues
func
(
s
*
SearchService
)
IssuesByProject
(
pid
interface
{},
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Issue
,
*
Response
,
error
)
{
var
is
[]
*
Issue
resp
,
err
:=
s
.
searchByProject
(
pid
,
"issues"
,
query
,
&
is
,
opt
,
options
...
)
return
is
,
resp
,
err
}
// MergeRequests searches the expression within merge requests
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/search.html#scope-merge_requests
func
(
s
*
SearchService
)
MergeRequests
(
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
MergeRequest
,
*
Response
,
error
)
{
var
ms
[]
*
MergeRequest
resp
,
err
:=
s
.
search
(
"merge_requests"
,
query
,
&
ms
,
opt
,
options
...
)
return
ms
,
resp
,
err
}
// MergeRequestsByGroup searches the expression within merge requests for
// the specified group
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/search.html#scope-merge_requests
func
(
s
*
SearchService
)
MergeRequestsByGroup
(
gid
interface
{},
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
MergeRequest
,
*
Response
,
error
)
{
var
ms
[]
*
MergeRequest
resp
,
err
:=
s
.
searchByGroup
(
gid
,
"merge_requests"
,
query
,
&
ms
,
opt
,
options
...
)
return
ms
,
resp
,
err
}
// MergeRequestsByProject searches the expression within merge requests for
// the specified project
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/search.html#scope-merge_requests
func
(
s
*
SearchService
)
MergeRequestsByProject
(
pid
interface
{},
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
MergeRequest
,
*
Response
,
error
)
{
var
ms
[]
*
MergeRequest
resp
,
err
:=
s
.
searchByProject
(
pid
,
"merge_requests"
,
query
,
&
ms
,
opt
,
options
...
)
return
ms
,
resp
,
err
}
// Milestones searches the expression within milestones
//
// GitLab API docs: https://docs.gitlab.com/ce/api/search.html#scope-milestones
func
(
s
*
SearchService
)
Milestones
(
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Milestone
,
*
Response
,
error
)
{
var
ms
[]
*
Milestone
resp
,
err
:=
s
.
search
(
"milestones"
,
query
,
&
ms
,
opt
,
options
...
)
return
ms
,
resp
,
err
}
// MilestonesByGroup searches the expression within milestones for
// the specified group
//
// GitLab API docs: https://docs.gitlab.com/ce/api/search.html#scope-milestones
func
(
s
*
SearchService
)
MilestonesByGroup
(
gid
interface
{},
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Milestone
,
*
Response
,
error
)
{
var
ms
[]
*
Milestone
resp
,
err
:=
s
.
searchByGroup
(
gid
,
"milestones"
,
query
,
&
ms
,
opt
,
options
...
)
return
ms
,
resp
,
err
}
// MilestonesByProject searches the expression within milestones for
// the specified project
//
// GitLab API docs: https://docs.gitlab.com/ce/api/search.html#scope-milestones
func
(
s
*
SearchService
)
MilestonesByProject
(
pid
interface
{},
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Milestone
,
*
Response
,
error
)
{
var
ms
[]
*
Milestone
resp
,
err
:=
s
.
searchByProject
(
pid
,
"milestones"
,
query
,
&
ms
,
opt
,
options
...
)
return
ms
,
resp
,
err
}
// SnippetTitles searches the expression within snippet titles
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/search.html#scope-snippet_titles
func
(
s
*
SearchService
)
SnippetTitles
(
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Snippet
,
*
Response
,
error
)
{
var
ss
[]
*
Snippet
resp
,
err
:=
s
.
search
(
"snippet_titles"
,
query
,
&
ss
,
opt
,
options
...
)
return
ss
,
resp
,
err
}
// SnippetBlobs searches the expression within snippet blobs
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/search.html#scope-snippet_blobs
func
(
s
*
SearchService
)
SnippetBlobs
(
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Snippet
,
*
Response
,
error
)
{
var
ss
[]
*
Snippet
resp
,
err
:=
s
.
search
(
"snippet_blobs"
,
query
,
&
ss
,
opt
,
options
...
)
return
ss
,
resp
,
err
}
// NotesByProject searches the expression within notes for the specified
// project
//
// GitLab API docs: // https://docs.gitlab.com/ce/api/search.html#scope-notes
func
(
s
*
SearchService
)
NotesByProject
(
pid
interface
{},
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Note
,
*
Response
,
error
)
{
var
ns
[]
*
Note
resp
,
err
:=
s
.
searchByProject
(
pid
,
"notes"
,
query
,
&
ns
,
opt
,
options
...
)
return
ns
,
resp
,
err
}
// WikiBlobs searches the expression within all wiki blobs
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/search.html#scope-wiki_blobs
func
(
s
*
SearchService
)
WikiBlobs
(
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Wiki
,
*
Response
,
error
)
{
var
ws
[]
*
Wiki
resp
,
err
:=
s
.
search
(
"wiki_blobs"
,
query
,
&
ws
,
opt
,
options
...
)
return
ws
,
resp
,
err
}
// WikiBlobsByGroup searches the expression within wiki blobs for
// specified group
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/search.html#scope-wiki_blobs
func
(
s
*
SearchService
)
WikiBlobsByGroup
(
gid
interface
{},
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Wiki
,
*
Response
,
error
)
{
var
ws
[]
*
Wiki
resp
,
err
:=
s
.
searchByGroup
(
gid
,
"wiki_blobs"
,
query
,
&
ws
,
opt
,
options
...
)
return
ws
,
resp
,
err
}
// WikiBlobsByProject searches the expression within wiki blobs for
// the specified project
//
// GitLab API docs:
// https://docs.gitlab.com/ce/api/search.html#scope-wiki_blobs
func
(
s
*
SearchService
)
WikiBlobsByProject
(
pid
interface
{},
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Wiki
,
*
Response
,
error
)
{
var
ws
[]
*
Wiki
resp
,
err
:=
s
.
searchByProject
(
pid
,
"wiki_blobs"
,
query
,
&
ws
,
opt
,
options
...
)
return
ws
,
resp
,
err
}
// Commits searches the expression within all commits
//
// GitLab API docs: https://docs.gitlab.com/ce/api/search.html#scope-commits
func
(
s
*
SearchService
)
Commits
(
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Commit
,
*
Response
,
error
)
{
var
cs
[]
*
Commit
resp
,
err
:=
s
.
search
(
"commits"
,
query
,
&
cs
,
opt
,
options
...
)
return
cs
,
resp
,
err
}
// CommitsByGroup searches the expression within commits for the specified
// group
//
// GitLab API docs: https://docs.gitlab.com/ce/api/search.html#scope-commits
func
(
s
*
SearchService
)
CommitsByGroup
(
gid
interface
{},
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Commit
,
*
Response
,
error
)
{
var
cs
[]
*
Commit
resp
,
err
:=
s
.
searchByGroup
(
gid
,
"commits"
,
query
,
&
cs
,
opt
,
options
...
)
return
cs
,
resp
,
err
}
// CommitsByProject searches the expression within commits for the
// specified project
//
// GitLab API docs: https://docs.gitlab.com/ce/api/search.html#scope-commits
func
(
s
*
SearchService
)
CommitsByProject
(
pid
interface
{},
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Commit
,
*
Response
,
error
)
{
var
cs
[]
*
Commit
resp
,
err
:=
s
.
searchByProject
(
pid
,
"commits"
,
query
,
&
cs
,
opt
,
options
...
)
return
cs
,
resp
,
err
}
// Blob represents a single blob.
type
Blob
struct
{
Basename
string
`json:"basename"`
Data
string
`json:"data"`
Filename
string
`json:"filename"`
ID
int
`json:"id"`
Ref
string
`json:"ref"`
Startline
int
`json:"startline"`
ProjectID
int
`json:"project_id"`
}
// Blobs searches the expression within all blobs
//
// GitLab API docs: https://docs.gitlab.com/ce/api/search.html#scope-blobs
func
(
s
*
SearchService
)
Blobs
(
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Blob
,
*
Response
,
error
)
{
var
bs
[]
*
Blob
resp
,
err
:=
s
.
search
(
"blobs"
,
query
,
&
bs
,
opt
,
options
...
)
return
bs
,
resp
,
err
}
// BlobsByGroup searches the expression within blobs for the specified
// group
//
// GitLab API docs: https://docs.gitlab.com/ce/api/search.html#scope-blobs
func
(
s
*
SearchService
)
BlobsByGroup
(
gid
interface
{},
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Blob
,
*
Response
,
error
)
{
var
bs
[]
*
Blob
resp
,
err
:=
s
.
searchByGroup
(
gid
,
"blobs"
,
query
,
&
bs
,
opt
,
options
...
)
return
bs
,
resp
,
err
}
// BlobsByProject searches the expression within blobs for the specified
// project
//
// GitLab API docs: https://docs.gitlab.com/ce/api/search.html#scope-blobs
func
(
s
*
SearchService
)
BlobsByProject
(
pid
interface
{},
query
string
,
opt
*
SearchOptions
,
options
...
OptionFunc
)
([]
*
Blob
,
*
Response
,
error
)
{
var
bs
[]
*
Blob
resp
,
err
:=
s
.
searchByProject
(
pid
,
"blobs"
,
query
,
&
bs
,
opt
,
options
...
)
return
bs
,
resp
,
err
}
func
(
s
*
SearchService
)
search
(
scope
,
query
string
,
result
interface
{},
opt
*
SearchOptions
,
options
...
OptionFunc
)
(
*
Response
,
error
)
{
opts
:=
&
searchOptions
{
SearchOptions
:
*
opt
,
Scope
:
scope
,
Search
:
query
}
req
,
err
:=
s
.
client
.
NewRequest
(
"GET"
,
"search"
,
opts
,
options
)
if
err
!=
nil
{
return
nil
,
err
}
return
s
.
client
.
Do
(
req
,
result
)
}
func
(
s
*
SearchService
)
searchByGroup
(
gid
interface
{},
scope
,
query
string
,
result
interface
{},
opt
*
SearchOptions
,
options
...
OptionFunc
)
(
*
Response
,
error
)
{
group
,
err
:=
parseID
(
gid
)
if
err
!=
nil
{
return
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"groups/%s/-/search"
,
url
.
QueryEscape
(
group
))
opts
:=
&
searchOptions
{
SearchOptions
:
*
opt
,
Scope
:
scope
,
Search
:
query
}
req
,
err
:=
s
.
client
.
NewRequest
(
"GET"
,
u
,
opts
,
options
)
if
err
!=
nil
{
return
nil
,
err
}
return
s
.
client
.
Do
(
req
,
result
)
}
func
(
s
*
SearchService
)
searchByProject
(
pid
interface
{},
scope
,
query
string
,
result
interface
{},
opt
*
SearchOptions
,
options
...
OptionFunc
)
(
*
Response
,
error
)
{
project
,
err
:=
parseID
(
pid
)
if
err
!=
nil
{
return
nil
,
err
}
u
:=
fmt
.
Sprintf
(
"projects/%s/-/search"
,
url
.
QueryEscape
(
project
))
opts
:=
&
searchOptions
{
SearchOptions
:
*
opt
,
Scope
:
scope
,
Search
:
query
}
req
,
err
:=
s
.
client
.
NewRequest
(
"GET"
,
u
,
opts
,
options
)
if
err
!=
nil
{
return
nil
,
err
}
return
s
.
client
.
Do
(
req
,
result
)
}
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