github.com/sona-tar/ghs@v0.0.0-20170415134710-bed1b2953748/ghs.go (about) 1 package main 2 3 import ( 4 "errors" 5 "fmt" 6 "log" 7 "os" 8 9 "github.com/motemen/go-gitconfig" 10 "context" 11 ) 12 13 // Version is ghs version number 14 const Version string = "0.0.10" 15 16 const ( 17 // ExitCodeOK is 0 18 ExitCodeOK = iota 19 // ExitCodeError is 1 20 ExitCodeError 21 ) 22 23 func main() { 24 num, err := ghs(os.Args[1:]) 25 if err != nil { 26 fmt.Printf("Error: %v\n", err) 27 os.Exit(ExitCodeError) 28 } 29 Debug("Print %d\n", num) 30 os.Exit(ExitCodeOK) 31 } 32 33 func ghs(args []string) (int, error) { 34 flags, err := NewFlags(args) 35 // --help or error 36 if err != nil { 37 Debug("Error : help or parse error\n") 38 CheckVersion(Version) 39 flags.PrintHelp() 40 return 0, errors.New("help or parse error") 41 } 42 43 version, exitCode, sOpt := flags.ParseOption() 44 // --version 45 if version { 46 Printf("ghs %s\n", Version) 47 CheckVersion(Version) 48 return 0, nil 49 50 } 51 // error options 52 if exitCode == ExitCodeError { 53 Debug("Error : Parse option error flags.ParseOption()\n") 54 flags.PrintHelp() 55 CheckVersion(Version) 56 return 0, errors.New("Parse option error.") 57 } 58 getToken := func(optsToken string) string { 59 // -t or --token option 60 if optsToken != "" { 61 Debug("Github token get from option value\n") 62 return optsToken 63 } 64 65 // GITHUB_TOKEN environment 66 if token := os.Getenv("GITHUB_TOKEN"); token != "" { 67 Debug("Github token get from environment value\n") 68 return token 69 } 70 71 // github.token in gitconfig 72 if token, err := gitconfig.GetString("github.token"); err == nil { 73 Debug("Github token get from gitconfig value\n") 74 return token 75 } 76 77 Debug("Github token not found\n") 78 return "" 79 } 80 sOpt.token = getToken(sOpt.token) 81 82 c := context.Background() 83 repo := NewRepo(NewSearch(c,sOpt)) 84 reposChan, errChan := repo.Search(c) 85 86 Debug("main thread select start...\n") 87 reposNum := 0 88 89 for { 90 select { 91 case oneReqRepos := <-reposChan: 92 Debug("main thread chan reposChan\n") 93 Debug("main thread oneReqRepos length %d\n", len(oneReqRepos)) 94 var end bool 95 end, reposNum = repo.Print(oneReqRepos) 96 Debug("reposNum : %d\n", reposNum) 97 if end { 98 Debug("over max\n") 99 return reposNum, nil 100 101 } 102 case err := <-errChan: 103 Debug("main thread chan err\n") 104 return 0, err 105 } 106 } 107 } 108 109 func Printf(format string, args ...interface{}) { 110 if os.Getenv("GHS_PRINT") != "no" { 111 fmt.Printf(format, args...) 112 } 113 } 114 115 // Debug display values when DEBUG mode 116 // This is used only for developer 117 func Debug(format string, args ...interface{}) { 118 if os.Getenv("GHS_DEBUG") != "" { 119 log.Printf(format, args...) 120 } 121 }