11package main
22
33import (
4- "flag "
4+ "fmt "
55 "log"
66 "os"
77 "strconv"
88 "strings"
9+ "time"
10+
11+ "github.com/gookit/color"
12+ "github.com/spf13/pflag"
913
1014 "github.com/kevincobain2000/gobrew"
1115 "github.com/kevincobain2000/gobrew/utils"
1216)
1317
14- var args []string
1518var actionArg = ""
1619var versionArg = ""
1720var version = "dev"
1821
19- var allowedArgs = []string {
20- "h" ,
21- "help" ,
22- "ls" ,
23- "list" ,
24- "ls-remote" ,
25- "install" ,
26- "use" ,
27- "uninstall" ,
28- "interactive" ,
29- "noninteractive" ,
30- "prune" ,
31- "version" ,
32- "self-update" ,
33- }
22+ var help bool
23+ var clearCache bool
24+ var ttl time.Duration
25+ var disableCache bool
3426
3527func init () {
3628 log .SetFlags (0 )
3729
38- if ! isArgAllowed () {
39- log .Println ("[Info] Invalid usage" )
40- log .Print (usage ())
41- return
30+ flag := pflag .NewFlagSet ("gobrew" , pflag .ContinueOnError )
31+ flag .BoolVarP (& disableCache , "disable-cache" , "d" , false , "disable local cache" )
32+ flag .BoolVarP (& clearCache , "clear-cache" , "c" , false , "clear local cache" )
33+ flag .DurationVarP (& ttl , "ttl" , "t" , 20 * time .Minute , "set cache duration in minutes" )
34+
35+ flag .BoolVarP (& help , "help" , "h" , false , "show usage message" )
36+
37+ if err := flag .Parse (os .Args [1 :]); err != nil {
38+ color .Errorln ("[Error] Invalid usage" )
39+ Usage ()
40+ os .Exit (2 )
4241 }
4342
44- flag .Parse ()
45- args = flag .Args ()
43+ args := flag .Args ()
4644 if len (args ) == 0 {
4745 actionArg = "interactive"
4846 } else {
@@ -74,6 +72,11 @@ func init() {
7472}
7573
7674func main () {
75+ if help {
76+ Usage ()
77+ return
78+ }
79+
7780 rootDir := os .Getenv ("GOBREW_ROOT" )
7881 if rootDir == "" {
7982 var err error
@@ -92,6 +95,9 @@ func main() {
9295 GobrewDownloadURL : gobrew .DownloadURL ,
9396 GobrewTags : gobrew .TagsAPI ,
9497 GobrewVersionsURL : gobrew .VersionsURL ,
98+ TTL : ttl ,
99+ DisableCache : disableCache ,
100+ ClearCache : clearCache ,
95101 }
96102
97103 gb := gobrew .NewGoBrew (config )
@@ -101,7 +107,7 @@ func main() {
101107 case "noninteractive" :
102108 gb .Interactive (false )
103109 case "h" , "help" :
104- log . Print ( usage () )
110+ Usage ( )
105111 case "ls" , "list" :
106112 gb .ListVersions ()
107113 case "ls-remote" :
@@ -121,46 +127,14 @@ func main() {
121127 gb .Version (version )
122128 case "self-update" :
123129 gb .Upgrade (version )
130+ default :
131+ color .Errorln ("[Error] Invalid usage" )
132+ Usage ()
133+ os .Exit (2 )
124134 }
125135}
126136
127- func isArgAllowed () bool {
128- ok := true
129- if len (os .Args ) > 1 {
130- _ , ok = Find (allowedArgs , os .Args [1 ])
131- if ! ok {
132- return false
133- }
134- }
135-
136- if len (os .Args ) > 2 {
137- _ , ok = Find (allowedArgs , os .Args [1 ])
138- if ! ok {
139- return false
140- }
141- }
142-
143- return ok
144- }
145-
146- // Find takes a slice and looks for an element in it. If found it will
147- // return it's key, otherwise it will return -1 and a bool of false.
148- func Find (slice []string , val string ) (int , bool ) {
149- for i , item := range slice {
150- if item == val {
151- return i , true
152- }
153- }
154- return - 1 , false
155- }
156-
157- func usage () string {
158- usageMsg :=
159- `
160- # Add gobrew to your ~/.bashrc or ~/.zshrc
161- export PATH="$HOME/.gobrew/current/bin:$HOME/.gobrew/bin:$PATH"
162- export GOROOT="$HOME/.gobrew/current/go"
163- `
137+ var Usage = func () {
164138 msg := `
165139gobrew ` + version + `
166140
@@ -178,6 +152,11 @@ Usage:
178152 gobrew version Show gobrew version
179153 gobrew help Show this message
180154
155+ Options:
156+ gobrew [--clear-cache | -c] clear gobrew cache
157+ gobrew [--disable-cache | -d] disable gobrew cache
158+ gobrew [--ttl=20m | -t 20m] set gobrew cache ttl, default 20m
159+
181160Examples:
182161 gobrew use 1.16 # use go version 1.16
183162 gobrew use 1.16.1 # use go version 1.16.1
@@ -195,5 +174,5 @@ Examples:
195174Installation Path:
196175` + usageMsg
197176
198- return msg
177+ fmt . Fprintf ( os . Stderr , "%s \n " , msg )
199178}
0 commit comments