diff --git a/doCheckout.go b/doCheckout.go index 50feaf7..2200db8 100644 --- a/doCheckout.go +++ b/doCheckout.go @@ -10,7 +10,6 @@ import ( "time" "go.wit.com/lib/gui/shell" - "go.wit.com/lib/protobuf/forgepb" "go.wit.com/lib/protobuf/gitpb" "go.wit.com/log" ) @@ -120,6 +119,14 @@ func rillCheckoutUser(repo *gitpb.Repo) error { // trys to figure out if there is still something to update func doAllCheckoutUser() error { now := time.Now() + + if argv.Force { + log.Info("going to force create user branches") + if err := makeUserBranches(); err != nil { + return err + } + } + me.forge.RillFuncError(rillCheckoutUser) count := me.forge.RillReload() if count != 0 { @@ -161,6 +168,10 @@ func rillCheckoutDevel(repo *gitpb.Repo) error { // is every repo on the devel branch? func doAllCheckoutDevel() error { now := time.Now() + if argv.Force { + log.Info("going to force create devel branches") + makeDevelBranches() + } log.Info("going to rill:") me.forge.RillFuncError(rillCheckoutDevel) count := me.forge.RillReload() @@ -254,66 +265,28 @@ func doAllCheckoutMaster() error { return nil } -// shared this with the GUI and the command line? -func doCheckoutShared() error { - if me.argvCheckoutUser { - // log.Info("Starting git checkout user") - if argv.Force { - log.Info("going to force create user branches") - if err := makeUserBranches(); err != nil { - return err - } - } - // this uses rill and is super fast - doAllCheckoutUser() - return nil - } - - if me.argvCheckoutDevel { - // log.Info("Starting git checkout devel") - if argv.Force { - log.Info("going to force create devel branches") - makeDevelBranches() - } - // this uses rill and is super fast - doAllCheckoutDevel() - return nil - } - - if me.argvCheckoutMaster { - log.Info("Starting git checkout master") - doAllCheckoutMaster() - return nil - } - log.Info("Forge didn't know what branches to checkout") - return nil -} - // trys to figure out if there is still something to update // todo: redo this logic as it is terrible func doCheckout() error { if argv.Checkout.User != nil { - me.argvCheckoutUser = true - me.forge.Config.Mode = forgepb.ForgeMode_USER - me.forge.Config.ConfigSave() + if err := doAllCheckoutUser(); err != nil { + badExit(err) + } } if argv.Checkout.Devel != nil { - me.argvCheckoutDevel = true - me.forge.Config.Mode = forgepb.ForgeMode_DEVEL - me.forge.Config.ConfigSave() + if err := doAllCheckoutDevel(); err != nil { + badExit(err) + } } if argv.Checkout.Master != nil { - me.argvCheckoutMaster = true - me.forge.Config.Mode = forgepb.ForgeMode_MASTER - me.forge.Config.ConfigSave() + if err := doAllCheckoutMaster(); err != nil { + badExit(err) + } } - if err := doCheckoutShared(); err != nil { - badExit(err) - } - okExit("") + badExit(fmt.Errorf("did not specify what branch to checkout")) return nil } diff --git a/doGui.go b/doGui.go index d380f6c..fc92115 100644 --- a/doGui.go +++ b/doGui.go @@ -209,109 +209,6 @@ func drawWindow(win *gadgets.GenericWindow) { gridM.NextRow() gridM.NewLabel("") - - group1 := win.Stack.NewGroup("Forge Mode (deprecated)") - grid = group1.RawGrid() - me.forgeMode = grid.NewLabel("") - me.forgeMode.SetText(me.forge.GetMode()) - - me.newBranch = grid.NewDropdown() - me.newBranch.AddText("master") - me.newBranch.AddText("devel") - me.newBranch.AddText(me.forge.Config.GetUsername()) - me.newBranch.Custom = func() { - me.setBranchB.Disable() - // toggle global values shared by the command line and the gui for doCheckout() - switch me.newBranch.String() { - case "master": - if me.forge.Config.Mode != forgepb.ForgeMode_MASTER { - me.setBranchB.Enable() - } - case "devel": - if me.forge.Config.Mode != forgepb.ForgeMode_DEVEL { - me.setBranchB.Enable() - } - default: - if me.forge.Config.Mode != forgepb.ForgeMode_USER { - me.setBranchB.Enable() - } - } - } - - // select the branch you want to test, build and develop against - // this lets you select your user branch, but, when you are happy - // you can merge everything into the devel branch and make sure it actually - // works. Then, when that is good, merge and version everything in master - me.setBranchB = grid.NewButton("Switch mode", func() { - win.Disable() - defer win.Enable() - - switch me.newBranch.String() { - case "master": - forgeSwitchMode(forgepb.ForgeMode_MASTER) - case "devel": - forgeSwitchMode(forgepb.ForgeMode_DEVEL) - default: - forgeSwitchMode(forgepb.ForgeMode_USER) - } - - me.setBranchB.Disable() - }) - me.setBranchB.Disable() - - // set the initial button state based on the last - // forge mode the user saved in the config file - switch me.forge.Config.Mode { - case forgepb.ForgeMode_MASTER: - me.newBranch.SetText("master") - case forgepb.ForgeMode_DEVEL: - me.newBranch.SetText("devel") - case forgepb.ForgeMode_USER: - me.newBranch.SetText(me.forge.Config.GetUsername()) - default: - me.newBranch.SetText(me.forge.Config.GetUsername()) - } - - forgeSwitchMode(me.forge.Config.Mode) -} - -// verify the GUI button disable/enable settings -func forgeVerifyGuiState() { - me.forgeMode.SetText(me.forge.GetMode()) - - me.argvCheckoutUser = false - me.argvCheckoutDevel = false - me.argvCheckoutMaster = false - - switch me.forge.Config.Mode { - case forgepb.ForgeMode_MASTER: - me.argvCheckoutMaster = true - me.newBranch.SetText("master") - case forgepb.ForgeMode_DEVEL: - me.argvCheckoutDevel = true - me.newBranch.SetText("devel") - case forgepb.ForgeMode_USER: - me.newBranch.SetText(me.forge.Config.GetUsername()) - me.argvCheckoutUser = true - default: - me.newBranch.SetText(me.forge.Config.GetUsername()) - me.argvCheckoutUser = true - } -} - -// sets the text in the labels in the window -// and hides and shows the buttons -func forgeSwitchMode(newMode forgepb.ForgeMode) { - if newMode == me.forge.Config.Mode { - log.Info("you are already on", newMode.String()) - forgeVerifyGuiState() // doing this here initializes the button state - return - } - - me.forge.Config.Mode = newMode - forgeVerifyGuiState() // update the button states - - me.forge.Config.ConfigSave() } // this is the magic that generates a window directly from the protocol buffer @@ -359,7 +256,6 @@ func findMergeToDevel() *gitpb.Repos { found := gitpb.NewRepos() for repo := range me.forge.Repos.IterByFullPath() { - // this sees if user has patches for devel. If it does, add it to found if repo.CountDiffObjects(repo.GetUserBranchName(), repo.GetDevelBranchName()) > 0 { found.AppendByGoPath(repo) diff --git a/doPull.go b/doPull.go index b4aff68..9bfbc34 100644 --- a/doPull.go +++ b/doPull.go @@ -131,3 +131,40 @@ func doGitFetch() { me.forge.ConfigSave() } } + +func doMergeDevel() (*gitpb.Repos, error) { + var err error + done := gitpb.NewRepos() + found := findMergeToDevel() + for repo := range found.IterAll() { + if repo.CheckDirty() { + log.Info("repo is dirty", repo.GetGoPath()) + continue + } + log.Info("Starting merge on", repo.GetGoPath()) + if repo.CheckoutDevel() { + log.Info("checkout devel failed", repo.GetGoPath()) + err = fmt.Errorf("checkout devel failed") + break + } + if _, err := repo.MergeToDevel(); err != nil { + log.Info("merge from user failed", repo.GetGoPath(), err) + err = fmt.Errorf("merge from user failed") + // log.Info(strings.Join(r.Stdout, "\n")) + // log.Info(strings.Join(r.Stderr, "\n")) + break + } + done.Append(repo) + /* + if repo.CheckoutMaster() { + log.Info("checkout master failed", repo.GetGoPath()) + return + } + if _, err := repo.MergeToMaster(); err != nil { + log.Info("merge from devel failed", repo.GetGoPath(), err) + return + } + */ + } + return done, err +} diff --git a/doSync.go b/doSync.go index 07e00a5..f6a9683 100644 --- a/doSync.go +++ b/doSync.go @@ -9,7 +9,6 @@ import ( "time" "go.wit.com/lib/gui/shell" - "go.wit.com/lib/protobuf/forgepb" "go.wit.com/lib/protobuf/gitpb" "go.wit.com/log" ) @@ -28,11 +27,7 @@ func doSync() error { } func doSyncClean() error { - me.argvCheckoutMaster = true - me.forge.Config.Mode = forgepb.ForgeMode_MASTER - me.forge.Config.ConfigSave() - - if err := doCheckoutShared(); err != nil { + if err := doAllCheckoutMaster(); err != nil { return err } @@ -73,12 +68,8 @@ func doSyncUser() error { log.Info("Rill syncDevelBranch() ok count =", count) } - me.argvCheckoutUser = true - me.forge.Config.Mode = forgepb.ForgeMode_USER - me.forge.Config.ConfigSave() - argv.Force = true - if err := doCheckoutShared(); err != nil { + if err := doAllCheckoutUser(); err != nil { return err } diff --git a/structs.go b/structs.go index a6f4cc7..012ab28 100644 --- a/structs.go +++ b/structs.go @@ -37,17 +37,9 @@ type mainType struct { gitAuthor *gadgets.OneLiner // ENV GIT_AUTHOR NAME and EMAIL // these hold the branches that the user can switch all the repositories to them - newBranch *gui.Node // deprecate? - setBranchB *gui.Node // deprecate? reposWinB *gui.Node // button that opens the repos window repoAllB *gui.Node // "all" repos button repoDirtyB *gui.Node // "dirty" repos button repoDevelMergeB *gui.Node // "merge to devel" repos button repoWritableB *gui.Node // "what repos are writable" repos button - - // deprecate these - forgeMode *gui.Node // is the user in 'master', 'devel' or 'user' branches - argvCheckoutUser bool // shared between the GUI and the command line tools - argvCheckoutDevel bool // shared between the GUI and the command line tools - argvCheckoutMaster bool // shared between the GUI and the command line tools } diff --git a/windowReposFix.go b/windowReposFix.go index ef525c3..e5452b5 100644 --- a/windowReposFix.go +++ b/windowReposFix.go @@ -236,10 +236,7 @@ func makeHackModeWindow(stdwin *stdReposTableWin) { stdwin.win.Disable() defer stdwin.win.Enable() - me.argvCheckoutUser = false - me.argvCheckoutDevel = true - me.argvCheckoutMaster = false - if err := doCheckoutShared(); err != nil { + if err := doAllCheckoutDevel(); err != nil { log.Info("checkout error:", err) } else { log.Info("checkout was ok") @@ -247,10 +244,7 @@ func makeHackModeWindow(stdwin *stdReposTableWin) { mergeUserToDevel(true) - me.argvCheckoutUser = false - me.argvCheckoutDevel = false - me.argvCheckoutMaster = true - if err := doCheckoutShared(); err != nil { + if err := doAllCheckoutMaster(); err != nil { log.Info("checkout error:", err) } else { log.Info("checkout was ok")