From c63fae80db3cf982c46cc4b716db79c3575bf7f7 Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 19 Oct 2020 12:37:21 -0400 Subject: [PATCH] add debug mode using zerolog closes #54, closes #55 (#58) --- .github/FUNDING.yml | 2 +- .goreleaser.yml | 3 +- cmd/git.go | 74 ++++++++++++++++++++++++--------------------- cmd/rootShell.go | 15 ++++++--- cmd/util.go | 35 ++++++++------------- go.mod | 1 + go.sum | 14 +++++++++ main.go | 26 +++++++++++----- 8 files changed, 99 insertions(+), 71 deletions(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 954f48b..3c5eaf2 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,3 +1,3 @@ # These are supported funding model platforms -github: [chriswalz] +github: [ chriswalz ] diff --git a/.goreleaser.yml b/.goreleaser.yml index 19c066f..5b8d3b2 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -32,8 +32,7 @@ changelog: - '^test:' # .goreleaser.yml brews: - - - # Name template of the recipe + - # Name template of the recipe # Default to project name #name: myproject diff --git a/cmd/git.go b/cmd/git.go index b7b4ebb..efd20b7 100644 --- a/cmd/git.go +++ b/cmd/git.go @@ -2,15 +2,16 @@ package cmd import ( "fmt" + "github.com/rs/zerolog/log" "github.com/spf13/cobra" "os/exec" "strings" ) func CloudBranchExists() bool { - msg, err := exec.Command("git", "pull").CombinedOutput() + msg, err := execCommand("git", "pull").CombinedOutput() if err != nil { - fmt.Println(err) + log.Debug().Err(err) } //log.Println("msg:", string(msg)) //log.Println("err:", err) @@ -18,23 +19,23 @@ func CloudBranchExists() bool { } func CurrentBranch() string { - msg, err := exec.Command("git", "branch", "--show-current").CombinedOutput() + msg, err := execCommand("git", "branch", "--show-current").CombinedOutput() if err != nil { - fmt.Println(err) + log.Debug().Err(err) } return strings.TrimSpace(string(msg)) } func IsAheadOfCurrent() bool { - msg, err := exec.Command("git", "status", "-sb").CombinedOutput() + msg, err := execCommand("git", "status", "-sb").CombinedOutput() if err != nil { - //fmt.Println(err) + log.Debug().Msg(err.Error()) } return strings.Contains(string(msg), "ahead") } func IsGitRepo() bool { - _, err := exec.Command("git", "status").CombinedOutput() + _, err := execCommand("git", "status").CombinedOutput() if err != nil { return false } @@ -42,83 +43,83 @@ func IsGitRepo() bool { } func IsBehindCurrent() bool { - msg, err := exec.Command("git", "status", "-sb").CombinedOutput() + msg, err := execCommand("git", "status", "-sb").CombinedOutput() if err != nil { - //fmt.Println(err) + log.Debug().Err(err) } return strings.Contains(string(msg), "behind") } func NothingToCommit() bool { - msg, err := exec.Command("git", "status").CombinedOutput() + msg, err := execCommand("git", "status").CombinedOutput() if err != nil { - //fmt.Println(err) + log.Debug().Err(err) } return strings.Contains(string(msg), "nothing to commit") } func IsDiverged() bool { - msg, err := exec.Command("git", "status").CombinedOutput() + msg, err := execCommand("git", "status").CombinedOutput() if err != nil { - //fmt.Println(err) + log.Debug().Err(err) } return strings.Contains(string(msg), "have diverged") } func StashableChanges() bool { - msg, err := exec.Command("git", "status").CombinedOutput() + msg, err := execCommand("git", "status").CombinedOutput() if err != nil { - //fmt.Println(err) + log.Debug().Err(err) } return strings.Contains(string(msg), "Changes to be committed:") || strings.Contains(string(msg), "Changes not staged for commit:") } func MostRecentCommonAncestorCommit(branchA, branchB string) string { - msg, err := exec.Command("git", "merge-base", branchA, branchB).CombinedOutput() + msg, err := execCommand("git", "merge-base", branchA, branchB).CombinedOutput() if err != nil { - //fmt.Println(err) + log.Debug().Err(err) } return string(msg) } func StashList() []string { - msg, err := exec.Command("git", "stash", "list").CombinedOutput() + msg, err := execCommand("git", "stash", "list").CombinedOutput() if err != nil { - //fmt.Println(err) + log.Debug().Err(err) } return strings.Split(string(msg), "\n") } func refreshBranch() error { - msg, err := exec.Command("git", "pull", "--ff-only").CombinedOutput() + msg, err := execCommand("git", "pull", "--ff-only").CombinedOutput() if err != nil { return err } if strings.TrimSpace(string(msg)) == "Already up to date." { return nil } - fmt.Println("Branch was fast-forwarded") + log.Debug().Msg("Branch was fast-forwarded") return nil } func refreshOnBranch(branchName string) error { - _, err := exec.Command("git", "pull", "--ff-only", branchName).CombinedOutput() + _, err := execCommand("git", "pull", "--ff-only", branchName).CombinedOutput() if err != nil { return err } - fmt.Println("Branch was fast-forwarded") + log.Debug().Msg("Branch was fast-forwarded") return nil } func branchListRaw() (string, error) { - msg, err := exec.Command("git", "for-each-ref", "--sort=-committerdate", "refs/heads/", "refs/remotes", "--format='%(authordate); %(authorname); %(color:red)%(objectname:short); %(color:yellow)%(refname:short)%(color:reset); (%(color:green)%(committerdate:relative)%(color:reset))'").CombinedOutput() + msg, err := execCommand("git", "for-each-ref", "--sort=-committerdate", "refs/heads/", "refs/remotes", "--format='%(authordate); %(authorname); %(color:red)%(objectname:short); %(color:yellow)%(refname:short)%(color:reset); (%(color:green)%(committerdate:relative)%(color:reset))'").CombinedOutput() return string(msg), err } func FileChangesList() []FileChange { - msg, err := exec.Command("git", "status", "--porcelain=v2").CombinedOutput() + msg, err := execCommand("git", "status", "--porcelain=v2").CombinedOutput() if err != nil { - //fmt.Println(err) + log.Debug().Err(err) } var changes []FileChange // if user has an older version of git porcelain=v2 is not supported. don't show CL suggestions for now 2.7 @@ -148,9 +149,9 @@ func FileChangesList() []FileChange { } func AllGitAliases() (cc []*cobra.Command) { - msg, err := exec.Command("git", "config", "--get-regexp", "^alias").CombinedOutput() + msg, err := execCommand("git", "config", "--get-regexp", "^alias").CombinedOutput() if err != nil { - //fmt.Println(err) + log.Debug().Err(err) return cc } aliases := strings.Split(strings.TrimSpace(string(msg)), "\n") @@ -174,25 +175,30 @@ func AllGitAliases() (cc []*cobra.Command) { } func PrintGitVersion() { - msg, err := exec.Command("git", "--version").CombinedOutput() + msg, err := execCommand("git", "--version").CombinedOutput() if err != nil { - //fmt.Println(err) + log.Debug().Err(err) } - fmt.Println(string(msg)) + log.Debug().Msg(string(msg)) } func checkoutBranch(branch string) bool { - msg, err := exec.Command("git", "checkout", branch).CombinedOutput() + msg, err := execCommand("git", "checkout", branch).CombinedOutput() if err != nil { - //fmt.Println(err) + log.Debug().Err(err) } return !strings.Contains(string(msg), "did not match any file") } func tagCurrentBranch(version string) error { - msg, err := exec.Command("git", "tag", version).CombinedOutput() + msg, err := execCommand("git", "tag", version).CombinedOutput() if err != nil { return fmt.Errorf("%v: %w", string(msg), err) } return err } + +func execCommand(name string, arg ...string) *exec.Cmd { + log.Debug().Msg(name + " " + strings.Join(arg, " ")) + return exec.Command(name, arg...) +} \ No newline at end of file diff --git a/cmd/rootShell.go b/cmd/rootShell.go index 446c551..d85b13d 100644 --- a/cmd/rootShell.go +++ b/cmd/rootShell.go @@ -2,6 +2,7 @@ package cmd import ( "fmt" + "github.com/rs/zerolog/log" "os" "strings" @@ -13,7 +14,7 @@ import ( var ShellCmd = &cobra.Command{ Use: "bit", Short: "Bit is a Git CLI that predicts what you want to do", - Long: `v0.6.6`, + Long: `v0.6.11`, Run: func(cmd *cobra.Command, args []string) { completerSuggestionMap, bitCmdMap := CreateSuggestionMap(cmd) @@ -27,7 +28,7 @@ var ShellCmd = &cobra.Command{ } parsedArgs, err := parseCommandLine(resp) if err != nil { - fmt.Println(err) + log.Debug().Err(err) return } if bitCmdMap[subCommand] == nil { @@ -44,6 +45,10 @@ var ShellCmd = &cobra.Command{ }, } +func init() { + ShellCmd.PersistentFlags().Bool("debug", false, "Print debugging information") +} + func CreateSuggestionMap(cmd *cobra.Command) (map[string][]prompt.Suggest, map[string]*cobra.Command) { _, bitCmdMap := AllBitSubCommands(cmd) allBitCmds := AllBitAndGitSubCommands(cmd) @@ -74,7 +79,7 @@ func CreateSuggestionMap(cmd *cobra.Command) (map[string][]prompt.Suggest, map[s // This is called by main.main(). It only needs to happen once to the ShellCmd. func Execute() { if err := ShellCmd.Execute(); err != nil { - fmt.Println(err) + log.Info().Err(err) os.Exit(1) } } @@ -123,7 +128,7 @@ func RunGitCommandWithArgs(args []string) { var err error err = RunInTerminalWithColor("git", args) if err != nil { - //fixme fmt.Println("Command may not exist", err) use debug level logging + log.Debug().Msg("Command may not exist: " + err.Error()) } return } @@ -136,7 +141,7 @@ func GitCommandsPromptUsed(args []string, suggestionMap map[string][]prompt.Sugg // expected usage format // bit (checkout|switch|co) [-b] branch-name if args[len(args)-1] == "--version" { - fmt.Println("bit version v0.6.6") + log.Debug().Msg("bit version v0.6.11") } if isBranchCompletionCommand(sub) { branchName := "" diff --git a/cmd/util.go b/cmd/util.go index a75ef8d..d4dd704 100644 --- a/cmd/util.go +++ b/cmd/util.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/AlecAivazis/survey/v2" "github.com/c-bata/go-prompt" + "github.com/rs/zerolog/log" "github.com/spf13/cobra" "os" "os/exec" @@ -22,6 +23,8 @@ func RunInTerminalWithColor(cmdName string, args []string) error { } func RunInTerminalWithColorInDir(cmdName string, dir string, args []string) error { + log.Debug().Msg(cmdName + " " + strings.Join(args, " ")) + _, w, err := os.Pipe() if err != nil { panic(err) @@ -37,6 +40,7 @@ func RunInTerminalWithColorInDir(cmdName string, dir string, args []string) erro } err = cmd.Run() + log.Debug().Err(err) return err } @@ -60,7 +64,7 @@ func AskMultiLine(q string) string { func BranchList() []Branch { rawBranchData, err := branchListRaw() if err != nil { - //log.Println(err) // fixme use debug log + log.Debug().Err(err) } return toStructuredBranchList(rawBranchData) } @@ -94,7 +98,7 @@ func toStructuredBranchList(rawBranchData string) []Branch { func GenBumpedSemVersion() string { msg, err := exec.Command("/bin/sh", "-c", `git describe --tags --abbrev=0 | awk -F. '{$NF+=1; OFS="."; print $0}'`).CombinedOutput() if err != nil { - fmt.Println(err) + log.Debug().Err(err) } out := string(msg) return strings.TrimSpace(out) @@ -104,9 +108,9 @@ func AddCommandToShellHistory(cmd string, args []string) { // not possible?? msg, err := exec.Command("/bin/bash", "-c", "history").CombinedOutput() if err != nil { - fmt.Println(err) + log.Debug().Err(err) } - fmt.Println(msg) + log.Debug().Msg(string(msg)) } func BranchListSuggestions() []prompt.Suggest { @@ -226,7 +230,7 @@ func HandleExit() { fmt.Println(v) fmt.Println(string(debug.Stack())) fmt.Println("OS:", runtime.GOOS, runtime.GOARCH) - fmt.Println("bit version v0.6.6") + fmt.Println("bit version v0.6.11") PrintGitVersion() } @@ -265,19 +269,6 @@ func concatCopyPreAllocate(slices [][]*cobra.Command) []*cobra.Command { func FlagSuggestionsForCommand(gitSubCmd string, flagtype string) []prompt.Suggest { str := "" - // git help pull | col -b > man.txt - //if gitSubCmd != "commit" && gitSubCmd != "push" && gitSubCmd != "status" { - // msg, err := exec.Command("/bin/sh", "-c", "git help " + gitSubCmd + " | col -bx").CombinedOutput() - // if err != nil { - // //fmt.Println(err) - // } - // out := string(msg) - // //out = stripCtlAndExtFromUTF8(out) - // split := strings.Split(out, "OPTIONS") - // fmt.Println(out, split) - // out=split[1] - // //return []prompt.Suggest{} - //} flagMap := map[string]string{ "add": addFlagsStr, "diff": diffFlagsStr, @@ -325,8 +316,6 @@ func FlagSuggestionsForCommand(gitSubCmd string, flagtype string) []prompt.Sugge }) } } - - //log.Println(list[i]) } return suggestions } @@ -384,14 +373,14 @@ func RunScriptWithString(path string, script string, args ...string) { var err error err = RunInTerminalWithColor("bin/sh", args) if err != nil { - fmt.Println(err) + log.Debug().Err(err) } } func parseManPage(subCmd string) string { msg, err := exec.Command("/bin/bash", "-c", "git help "+subCmd+" | col -b").CombinedOutput() if err != nil { - fmt.Println(err) + log.Debug().Err(err) } splitA := strings.Split(string(msg), "\n\nOPTIONS") splitB := regexp.MustCompile(`\.\n\n[A-Z]+`).Split(splitA[1], 2) @@ -414,3 +403,5 @@ func isBranchCompletionCommand(command string) bool { return command == "checkout" || command == "switch" || command == "co" || command == "merge" } + + diff --git a/go.mod b/go.mod index d2a9aea..1199ae1 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/AlecAivazis/survey/v2 v2.1.1 github.com/c-bata/go-prompt v0.2.5 github.com/posener/complete/v2 v2.0.1-alpha.12 + github.com/rs/zerolog v1.20.0 github.com/spf13/cobra v1.0.0 github.com/stretchr/testify v1.6.1 github.com/thoas/go-funk v0.7.0 diff --git a/go.sum b/go.sum index 6e30de9..4822948 100644 --- a/go.sum +++ b/go.sum @@ -6,7 +6,9 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8 h1:xzYJEypr/85nBpB11F9br+3HUrpgb+fcm5iADzXXYEw= github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -111,11 +113,15 @@ github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDf github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.0 h1:7etb9YClo3a6HjLzfl6rIQaU+FDfi0VSX39io3aQ+DM= github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/zerolog v1.20.0 h1:38k9hgtUBdxFwE34yS8rTHmHBa4eN16E4DJlv177LNs= +github.com/rs/zerolog v1.20.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -148,8 +154,11 @@ github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGr github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -163,10 +172,12 @@ golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -189,10 +200,13 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= diff --git a/main.go b/main.go index 7eddbc7..ea70082 100644 --- a/main.go +++ b/main.go @@ -18,33 +18,45 @@ package main import ( "fmt" bitcmd "github.com/chriswalz/bit/cmd" + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" "os" ) -func find(slice []string, val string) bool { - for _, item := range slice { +func find(slice []string, val string) int { + for i, item := range slice { if item == val { - return true + return i } } - return false + return -1 } func main() { // defer needed to handle funkyness with CTRL + C & go-prompt defer bitcmd.HandleExit() + log.Logger = log.With().Caller().Logger().Output(zerolog.ConsoleWriter{Out: os.Stderr}) + argsWithoutProg := os.Args[1:] + + zerolog.SetGlobalLevel(zerolog.InfoLevel) + debugIndex := find(argsWithoutProg, "--debug") + if debugIndex != -1 { + zerolog.SetGlobalLevel(zerolog.DebugLevel) + argsWithoutProg = append(argsWithoutProg[:debugIndex], argsWithoutProg[debugIndex+1:]...) + } + if !bitcmd.IsGitRepo() { if len(os.Args) == 2 && os.Args[1] == "--version" { - fmt.Println("bit version v0.6.6") + fmt.Println("bit version v0.6.11") bitcmd.PrintGitVersion() return } fmt.Println("fatal: not a git repository (or any of the parent directories): .git") return } - argsWithoutProg := os.Args[1:] + bitcliCmds := []string{"save", "sync", "version", "help", "info", "release"} - if len(argsWithoutProg) == 0 || find(bitcliCmds, argsWithoutProg[0]) { + if len(argsWithoutProg) == 0 || find(bitcliCmds, argsWithoutProg[0]) != -1 { bitcli() } else { completerSuggestionMap, _ := bitcmd.CreateSuggestionMap(bitcmd.ShellCmd)