package main // An app to submit patches for the 30 GO GUI repos import ( "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 // 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) 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) if argv.User != nil { me.forge.CheckoutUser() me.forge = forgepb.Init() me.found = new(gitpb.Repos) argv.User.findRepos() doCobol() okExit("") } if argv.Devel != nil { me.forge.CheckoutDevel() me.forge = forgepb.Init() me.found = new(gitpb.Repos) argv.Devel.findRepos() doCobol() okExit("") } if argv.Master != nil { me.forge.CheckoutMaster() me.forge = forgepb.Init() me.found = new(gitpb.Repos) argv.Master.findRepos() doCobol() okExit("") } if argv.Register != "" { if err := doRegister(argv.Register); err == nil { okExit("attempting to register " + argv.Register) } else { badExit(err) } } if argv.Apply != "" { pset, err := readPatchFile(argv.Apply) if err != nil { badExit(err) } if err = applyPatchset(pset); err == nil { okExit("applied patch ok") } badExit(err) } if argv.Delete != "" { me.forge.DeleteByGoPath(argv.Delete) me.forge.SetConfigSave(true) okExit("") } if argv.Fix { okExit("") } // first find the repos or gopaths to operate on if argv.Config != nil { findConfig(argv.Config) me.forge.ConfigPrintTable() okExit("") } log.Info("found", me.found.Len(), "repos. found", len(me.foundPaths), "paths from .config/forge") // now, do something to all of them (or just print out a table of them) var done bool = false if argv.Dirty != nil { findAll() // select all the repos doCheckDirtyAndConfigSave() me.found = new(gitpb.Repos) findDirty() doCobol() okExit("") done = true } if argv.Scan { me.forge.ScanGoSrc() done = true } if argv.GitPull != nil { argv.GitPull.findRepos() doGitPull() done = true } if argv.GitReset { findAll() // select all the repos doGitReset() done = true } if argv.List != nil { argv.List.findRepos() // print out the repos doCobol() done = true } if argv.PatchSet != "" { sendDevelDiff(argv.PatchSet) // sendMasterDiff() okExit("patches") } if argv.ListPatchSet { listPatches() okExit("patches") } 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() { if !done { // if nothing was selected, print out a table of them on STDOUT doCobol() okExit("") } } // open the gui unless the user performed some other // things from the command line // basically, if you run just 'forge' it'll open the GUI if !done { doGui() } okExit("") }