package main // An app to submit patches for the 30 GO GUI repos import ( "os" "strings" "go.wit.com/dev/alexflint/arg" "go.wit.com/gui" "go.wit.com/lib/protobuf/forgepb" "go.wit.com/lib/protobuf/gitpb" "go.wit.com/log" ) // sent via -ldflags var VERSION string var BUILDTIME string // used for shell auto completion var ARGNAME string = "forge" // using this for now. triggers config save var configSave bool func getVersion(repo *gitpb.Repo, name string) string { cmd := []string{"git", "describe", "--tags", "--always", name} result := repo.RunQuiet(cmd) output := strings.Join(result.Stdout, "\n") log.Info("cmd =", cmd, output) return strings.TrimSpace(output) } func main() { me = new(mainType) me.pp = arg.MustParse(&argv) if argv.Bash { argv.doBash() os.Exit(0) } if len(argv.BashAuto) != 0 { argv.doBashAuto() os.Exit(0) } me.urlbase = argv.URL if me.urlbase == "" { me.urlbase = "https://go.wit.com/" } me.urlbase = strings.Trim(me.urlbase, "/") // track down why trailing '/' makes http POST not work // load the ~/.config/forge/ config me.forge = forgepb.Init() me.found = new(gitpb.Repos) // first find the repos or gopaths to operate on if argv.Config != nil { doConfig() okExit("") } if argv.Checkout != nil { if argv.Checkout.User != nil { if argv.Force { me.forge.CheckoutUserForce() } else { me.forge.CheckoutUser() } me.forge = forgepb.Init() me.found = new(gitpb.Repos) argv.Checkout.User.findRepos() me.forge.PrintHumanTable(me.found) okExit("") } if argv.Checkout.Devel != nil { me.forge.CheckoutDevel() me.forge = forgepb.Init() me.found = new(gitpb.Repos) argv.Checkout.Devel.findRepos() me.forge.PrintHumanTable(me.found) okExit("") } if argv.Checkout.Master != nil { me.forge.CheckoutMaster() me.forge = forgepb.Init() me.found = new(gitpb.Repos) argv.Checkout.Master.findRepos() me.forge.PrintHumanTable(me.found) } log.Info("make 'user' the default here?") okExit("") } log.Info("found", me.found.Len(), "repos. found", len(me.foundPaths), "paths from .config/forge") if argv.Dirty != nil { findAll() // select all the repos doCheckDirtyAndConfigSave() me.found = new(gitpb.Repos) findDirty() me.forge.PrintHumanTable(me.found) okExit("") } if argv.Rescan != nil { me.forge.ScanGoSrc() okExit("") } if argv.Show != "" { repo := me.forge.FindByGoPath(argv.Show) me.forge.HumanPrintRepo(repo) okExit("") } if argv.GitPull != nil { argv.GitPull.findRepos() doGitPull() okExit("") } if argv.GitReset != nil { findAll() // select all the repos doGitReset() okExit("patches") } if argv.List != nil { argv.List.findRepos() // print out the repos me.forge.PrintHumanTable(me.found) okExit("patches") } if argv.Patch != nil { if argv.Patch.Show != nil { sendDevelDiff("fixme") // sendMasterDiff() okExit("patches") } if argv.Patch.List != nil { listPatches() okExit("patches") } } // todo: redo this logic using forgepb if configSave { me.forge.ConfigSave() configSave = false } // if the user doesn't want to open the GUI and // nothing else was specified to be done, // then just list the table to stdout if gui.NoGui() { me.forge.PrintHumanTable(me.found) okExit("") } // open the gui unless the user performed some other // basically, if you run just 'forge' it should open the GUI doGui() okExit("") }