aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/google/go-github/github/search.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/google/go-github/github/search.go')
-rw-r--r--vendor/github.com/google/go-github/github/search.go61
1 files changed, 53 insertions, 8 deletions
diff --git a/vendor/github.com/google/go-github/github/search.go b/vendor/github.com/google/go-github/github/search.go
index a597352..6e0000d 100644
--- a/vendor/github.com/google/go-github/github/search.go
+++ b/vendor/github.com/google/go-github/github/search.go
@@ -8,6 +8,7 @@ package github
import (
"context"
"fmt"
+ "strconv"
qs "github.com/google/go-querystring/query"
)
@@ -48,6 +49,12 @@ type SearchOptions struct {
ListOptions
}
+// Common search parameters.
+type searchParameters struct {
+ Query string
+ RepositoryID *int64 // Sent if non-nil.
+}
+
// RepositoriesSearchResult represents the result of a repositories search.
type RepositoriesSearchResult struct {
Total *int `json:"total_count,omitempty"`
@@ -60,7 +67,7 @@ type RepositoriesSearchResult struct {
// GitHub API docs: https://developer.github.com/v3/search/#search-repositories
func (s *SearchService) Repositories(ctx context.Context, query string, opt *SearchOptions) (*RepositoriesSearchResult, *Response, error) {
result := new(RepositoriesSearchResult)
- resp, err := s.search(ctx, "repositories", query, opt, result)
+ resp, err := s.search(ctx, "repositories", &searchParameters{Query: query}, opt, result)
return result, resp, err
}
@@ -91,7 +98,7 @@ type CommitResult struct {
// GitHub API docs: https://developer.github.com/v3/search/#search-commits
func (s *SearchService) Commits(ctx context.Context, query string, opt *SearchOptions) (*CommitsSearchResult, *Response, error) {
result := new(CommitsSearchResult)
- resp, err := s.search(ctx, "commits", query, opt, result)
+ resp, err := s.search(ctx, "commits", &searchParameters{Query: query}, opt, result)
return result, resp, err
}
@@ -107,7 +114,7 @@ type IssuesSearchResult struct {
// GitHub API docs: https://developer.github.com/v3/search/#search-issues
func (s *SearchService) Issues(ctx context.Context, query string, opt *SearchOptions) (*IssuesSearchResult, *Response, error) {
result := new(IssuesSearchResult)
- resp, err := s.search(ctx, "issues", query, opt, result)
+ resp, err := s.search(ctx, "issues", &searchParameters{Query: query}, opt, result)
return result, resp, err
}
@@ -123,7 +130,7 @@ type UsersSearchResult struct {
// GitHub API docs: https://developer.github.com/v3/search/#search-users
func (s *SearchService) Users(ctx context.Context, query string, opt *SearchOptions) (*UsersSearchResult, *Response, error) {
result := new(UsersSearchResult)
- resp, err := s.search(ctx, "users", query, opt, result)
+ resp, err := s.search(ctx, "users", &searchParameters{Query: query}, opt, result)
return result, resp, err
}
@@ -172,18 +179,52 @@ func (c CodeResult) String() string {
// GitHub API docs: https://developer.github.com/v3/search/#search-code
func (s *SearchService) Code(ctx context.Context, query string, opt *SearchOptions) (*CodeSearchResult, *Response, error) {
result := new(CodeSearchResult)
- resp, err := s.search(ctx, "code", query, opt, result)
+ resp, err := s.search(ctx, "code", &searchParameters{Query: query}, opt, result)
+ return result, resp, err
+}
+
+// LabelsSearchResult represents the result of a code search.
+type LabelsSearchResult struct {
+ Total *int `json:"total_count,omitempty"`
+ IncompleteResults *bool `json:"incomplete_results,omitempty"`
+ Labels []*LabelResult `json:"items,omitempty"`
+}
+
+// LabelResult represents a single search result.
+type LabelResult struct {
+ ID *int64 `json:"id,omitempty"`
+ URL *string `json:"url,omitempty"`
+ Name *string `json:"name,omitempty"`
+ Color *string `json:"color,omitempty"`
+ Default *bool `json:"default,omitempty"`
+ Description *string `json:"description,omitempty"`
+ Score *float64 `json:"score,omitempty"`
+}
+
+func (l LabelResult) String() string {
+ return Stringify(l)
+}
+
+// Labels searches labels in the repository with ID repoID via various criteria.
+//
+// GitHub API docs: https://developer.github.com/v3/search/#search-labels
+func (s *SearchService) Labels(ctx context.Context, repoID int64, query string, opt *SearchOptions) (*LabelsSearchResult, *Response, error) {
+ result := new(LabelsSearchResult)
+ resp, err := s.search(ctx, "labels", &searchParameters{RepositoryID: &repoID, Query: query}, opt, result)
return result, resp, err
}
// Helper function that executes search queries against different
-// GitHub search types (repositories, commits, code, issues, users)
-func (s *SearchService) search(ctx context.Context, searchType string, query string, opt *SearchOptions, result interface{}) (*Response, error) {
+// GitHub search types (repositories, commits, code, issues, users, labels)
+func (s *SearchService) search(ctx context.Context, searchType string, parameters *searchParameters, opt *SearchOptions, result interface{}) (*Response, error) {
params, err := qs.Values(opt)
if err != nil {
return nil, err
}
- params.Set("q", query)
+ params.Set("q", parameters.Query)
+ if parameters.RepositoryID != nil {
+ params.Set("repository_id", strconv.FormatInt(*parameters.RepositoryID, 10))
+ }
u := fmt.Sprintf("search/%s?%s", searchType, params.Encode())
req, err := s.client.NewRequest("GET", u, nil)
@@ -200,6 +241,10 @@ func (s *SearchService) search(ctx context.Context, searchType string, query str
// Accept header for search repositories based on topics preview endpoint
// TODO: remove custom Accept header when this API fully launches.
req.Header.Set("Accept", mediaTypeTopicsPreview)
+ case searchType == "labels":
+ // Accept header for search labels based on label description preview endpoint.
+ // TODO: remove custom Accept header when this API fully launches.
+ req.Header.Set("Accept", mediaTypeLabelDescriptionSearchPreview)
case opt != nil && opt.TextMatch:
// Accept header defaults to "application/vnd.github.v3+json"
// We change it here to fetch back text-match metadata