-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmain.go
More file actions
126 lines (117 loc) · 3.85 KB
/
main.go
File metadata and controls
126 lines (117 loc) · 3.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package main
import (
"flag"
"fmt"
"log"
"os"
"os/exec"
"regexp"
"strconv"
"strings"
)
var (
apiURL = "https://api.github.com/search/"
user, repo bool
paging int
searchString, language, login string
line = "==============================================================================="
linesmall = "-------------------------------------------------------------------------------"
linebig = "###############################################################################"
ospager, fork string
less, lessEXE = "/usr/bin/less", "less.exe"
)
func init() {
flag.BoolVar(&user, "user", false, "search for a user.")
flag.BoolVar(&user, "u", false, "shorthand for -user.")
flag.BoolVar(&repo, "repo", false, "indicate the pattern you are looking for (don't combine with -user|-u).")
flag.BoolVar(&repo, "r", false, "shorthand for -repo.")
flag.StringVar(&searchString, "pattern", "", "indicate the pattern you are looking for.")
flag.StringVar(&searchString, "p", "", "shorthand for -pattern.")
flag.StringVar(&language, "lang", "", "indicate a language for search.")
flag.StringVar(&language, "l", "", "shorthand for -lang.")
flag.StringVar(&login, "login", "", "indicate username for a repo search.")
flag.StringVar(&fork, "fork", "true", "indicate if search includes forks (valid: true, false and only).")
flag.IntVar(&paging, "paging", 100, "set per page limit.")
}
func checkUsage() {
fmt.Println("You must use an option like:")
fmt.Println("gitsearch -help")
fmt.Println("gitsearch -h")
fmt.Println("gitsearch -user -pattern pattern")
fmt.Println("gitsearch -repo -pattern pattern")
fmt.Println("gitsearch -u -p pattern")
fmt.Println("gitsearch -r -login username")
fmt.Println("gitsearch -r -p pattern")
fmt.Println("gitsearch -r -p pattern -l language -login username")
fmt.Println("gitsearch -r -p pattern -paging=10")
fmt.Println("gitsearch -r -p docker -fork only")
}
//Regexp function go get the url from Link in header
func Regexp(input string) (nextURL, previousURL string) {
re0 := regexp.MustCompile("next")
next := re0.FindString(input)
if next != "" {
re1 := regexp.MustCompile("<https://[^/]*/[^>]*>; rel=\"next\"")
nextURL = re1.FindString(input)
nextURL = strings.Replace(strings.Replace(strings.Split(nextURL, ";")[0], "<", "", -1), ">", "", -1)
}
re2 := regexp.MustCompile("prev")
previous := re2.FindString(input)
if previous != "" {
re3 := regexp.MustCompile("<https://[^/]*/[^>]*>; rel=\"prev\"")
previousURL = re3.FindString(input)
previousURL = strings.Replace(strings.Replace(strings.Split(previousURL, ";")[0], "<", "", -1), ">", "", -1)
}
return nextURL, previousURL
}
func pager(input string) {
if ospager == less || ospager == lessEXE || ospager == "less" {
cmd := exec.Command(ospager, "-X", "-F", "-R")
cmd.Stdin = strings.NewReader(input)
cmd.Stdout = os.Stdout
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
} else {
cmd := exec.Command(ospager)
cmd.Stdin = strings.NewReader(input)
cmd.Stdout = os.Stdout
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
}
}
func init() {
ospager = os.Getenv("PAGER")
if ospager == "" {
if _, err := os.Stat(less); os.IsNotExist(err) {
if os.Getenv("github_shell") == "true" {
ospager = lessEXE
} else {
ospager = "more"
}
} else {
ospager = less
}
}
}
func main() {
flag.Parse()
perpage := strconv.Itoa(paging)
if user && searchString != "" {
RunSearchUser(apiURL, searchString, perpage)
} else if repo {
switch {
case searchString == "" && login == "":
checkUsage()
case searchString == "" && login != "":
RunSearchRepo(apiURL, searchString, perpage)
case searchString != "":
RunSearchRepo(apiURL, searchString, perpage)
}
} else {
checkUsage()
}
}