Skip to content

Commit 6f59cba

Browse files
committed
fix flags
1 parent 37b2496 commit 6f59cba

File tree

3 files changed

+46
-39
lines changed

3 files changed

+46
-39
lines changed

README.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,20 @@ gh extension install meiji163/gh-search
1212
## Usage
1313
```
1414
Usage:
15-
gh search <repository> [flags]
15+
gh search <query> [flags]
1616
1717
Examples:
1818
# cli repos with hacktoberfest topic
1919
$ gh search cli --topic=hacktoberfest
2020
21-
# 10 most starred cli repos
22-
$ gh search cli --sort stars --limit 10
21+
# custom search with GitHub syntax
22+
$ gh search -q="org:cli created:>2019-01-01"
2323
2424
Flags:
25-
-h, --help help for search
26-
-i, --in string Search in "name", "description", or "readme" (default "name")
27-
-L, --limit int Max number of search results (default 30)
28-
-s, --sort string Sort by "stars", "forks", or "issues"
25+
-h, --help help for gh
26+
-i, --in string Search in "name", "description", or "readme"
27+
-l, --lang string Search by programming language
28+
-L, --limit int Max number of search results (default 50)
29+
-q, --query string Query in GitHub syntax
2930
-t, --topic string Specify a topic
3031
```
31-

api.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,23 @@ type Repository struct {
1313
PrimaryLanguage struct{ Name string }
1414
}
1515

16-
func searchRepos(opts *SearchOptions) ([]Repository, int, error) {
17-
searchQuery := opts.Query
18-
16+
func prepareQuery(opts *SearchOptions) string {
17+
query := opts.Query
1918
if opts.Topic != "" {
20-
searchQuery += fmt.Sprintf(" topic:%s", opts.Topic)
19+
query += fmt.Sprintf(" topic:%s", opts.Topic)
2120
}
2221
if opts.SearchIn != "" {
23-
searchQuery += fmt.Sprintf(" in:%s", opts.SearchIn)
22+
query += fmt.Sprintf(" in:%s", opts.SearchIn)
2423
}
24+
if opts.Language != "" {
25+
query += fmt.Sprintf(" language:%s", opts.Language)
26+
}
27+
return query
28+
}
29+
30+
func searchRepos(opts *SearchOptions) ([]Repository, int, error) {
31+
searchQuery := opts.Query
32+
2533
gqlQuery := `query GetRepos($limit: Int, $query: String!){
2634
search(query: $query, first: $limit, type: REPOSITORY) {
2735
repositoryCount
@@ -40,7 +48,6 @@ func searchRepos(opts *SearchOptions) ([]Repository, int, error) {
4048
"limit": opts.Limit,
4149
"query": searchQuery,
4250
}
43-
fmt.Println(searchQuery)
4451

4552
type responseData struct {
4653
Search struct {

main.go

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,55 +15,55 @@ import (
1515
type SearchOptions struct {
1616
Query string
1717
Interactive bool
18-
SortBy string
1918
SearchIn string
2019
Limit int
2120
Topic string
21+
Language string
2222
}
2323

2424
func rootCmd() *cobra.Command {
2525
opts := &SearchOptions{}
2626
cmd := &cobra.Command{
27-
Use: "gh search <repository>",
27+
Use: "gh search <query>",
2828
Short: "search repositories",
2929
Long: `Search for GitHub repositories.
3030
31-
Search through names, descriptions, or readme's,
32-
sort by repository stats, and filter by topic.`,
31+
Filter with the --topic or --lang flag,
32+
or write a custom query with the -q flag.`,
3333
Example: `# cli repos with hacktoberfest topic
3434
$ gh search cli --topic=hacktoberfest
3535
36-
# 10 most starred cli repos
37-
$ gh search cli --sort=stars --limit=10`,
38-
Args: cobra.ExactArgs(1),
36+
# custom search with GitHub syntax
37+
$ gh search -q="org:cli created:>2019-01-01"`,
38+
Args: cobra.MaximumNArgs(1),
3939
SilenceErrors: true,
4040
RunE: func(cmd *cobra.Command, args []string) error {
41-
opts.Query = args[0]
42-
43-
searchIn := strings.ToLower(opts.SearchIn)
44-
if searchIn != "name" && searchIn != "description" && searchIn != "readme" {
45-
return errors.New(`--in argument must be "name", "description", or "readme"`)
46-
}
47-
48-
if cmd.Flags().Changed("sort") || cmd.Flags().Changed("s") {
49-
sortBy := strings.ToLower(opts.SortBy)
50-
if sortBy != "stars" && sortBy != "forks" && sortBy != "issues" {
51-
return errors.New(`--sort argument must be "bestmatch", "stars", "forks", or "issues"`)
41+
if opts.Query == "" {
42+
if len(args) < 1 {
43+
return errors.New("Error: empty query")
5244
}
53-
}
54-
55-
if opts.Limit <= 0 {
56-
return errors.New("invalid limit")
45+
opts.Query = args[0]
46+
if opts.SearchIn != "" {
47+
searchIn := strings.ToLower(opts.SearchIn)
48+
if searchIn != "name" && searchIn != "description" && searchIn != "readme" {
49+
return errors.New(`--in argument must be "name", "description", or "readme"`)
50+
}
51+
}
52+
if opts.Limit <= 0 {
53+
return errors.New("invalid limit")
54+
}
55+
opts.Query = prepareQuery(opts)
5756
}
5857

5958
return runSearch(opts)
6059
},
6160
}
6261

6362
cmd.Flags().StringVarP(&opts.Topic, "topic", "t", "", `Specify a topic`)
64-
cmd.Flags().StringVarP(&opts.SearchIn, "in", "i", "name", `Search in "name", "description", or "readme"`)
65-
cmd.Flags().StringVarP(&opts.SortBy, "sort", "s", "", `Sort by "stars", "forks", or "issues"`)
66-
cmd.Flags().IntVarP(&opts.Limit, "limit", "L", 30, "Max number of search results")
63+
cmd.Flags().StringVarP(&opts.SearchIn, "in", "i", "", `Search in "name", "description", or "readme"`)
64+
cmd.Flags().StringVarP(&opts.Language, "lang", "l", "", "Search by programming language")
65+
cmd.Flags().IntVarP(&opts.Limit, "limit", "L", 50, "Max number of search results")
66+
cmd.Flags().StringVarP(&opts.Query, "query", "q", "", "Query in GitHub syntax")
6767
return cmd
6868
}
6969

0 commit comments

Comments
 (0)