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  }