diff --git a/doGui.go b/doGui.go index 18daed6..cb54cb8 100644 --- a/doGui.go +++ b/doGui.go @@ -234,52 +234,133 @@ func drawWindow(win *gadgets.BasicWindow) { win.Disable() defer win.Enable() - me.found = new(gitpb.Repos) - findReposWithPatches() - if me.found.Len() == 0 { - log.Info("you currently have no patches in your user branches") - return - } - me.forge.PrintHumanTable(me.found) + mergeUserToDevel(me.autoCreateBranches.Checked()) + }) - now := time.Now() - // check for devel branches - total, count, nope, _ := IsEverythingOnDevel() - log.Printf("Devel branch check. %d total repos. (%d ok) (%d not on devel branch) (%s)\n", total, count, nope, shell.FormatDuration(time.Since(now))) - if nope != 0 { - return - } else { - } + grid.NewButton("merge to master", func() { + win.Disable() + defer win.Enable() - all := me.found.SortByFullPath() - for all.Scan() { - repo := all.Next() - log.Info("repo:", repo.GetGoPath()) - if result, err := repo.MergeToDevel(); err == nil { - log.Warn("THINGS SEEM OK", repo.GetFullPath()) - for _, line := range result.Stdout { - log.Warn("stdout:", line) - } - for _, line := range result.Stderr { - log.Warn("stderr:", line) - } - } else { - log.Warn("THINGS FAILED ", repo.GetFullPath()) - log.Warn("err", err) - if result == nil { - break - } - for _, line := range result.Stdout { - log.Warn("stdout:", line) - } - for _, line := range result.Stderr { - log.Warn("stderr:", line) - } - break - } - me.forge.SetConfigSave(true) - // view.Update() - } - me.forge.ConfigSave() + mergeDevelToMaster(me.autoCreateBranches.Checked()) }) } + +func findMergeToMaster() { + me.found = new(gitpb.Repos) + + all := me.forge.Repos.SortByFullPath() + for all.Scan() { + repo := all.Next() + if repo.IsDirty() { + continue + } + if me.forge.Config.IsReadOnly(repo.GetGoPath()) { + continue + } + if repo.GetMasterVersion() != repo.GetDevelVersion() { + me.found.AppendByGoPath(repo) + continue + } + } + now := time.Now() + if me.found.Len() == 0 { + log.Info("nothing to merge with master") + return + } + me.forge.PrintHumanTable(me.found) + + // check for merges from devel + total, count, nope, _ := IsEverythingOnMaster() + log.Printf("Master branch check. %d total repos. (%d ok) (%d not on master branch) (%s)\n", total, count, nope, shell.FormatDuration(time.Since(now))) + +} + +func mergeDevelToMaster(doit bool) { + findMergeToMaster() + + if !doit { + return + } + + all := me.found.SortByFullPath() + for all.Scan() { + repo := all.Next() + log.Info("repo:", repo.GetGoPath()) + if result, err := repo.MergeToMaster(); err == nil { + log.Warn("THINGS SEEM OK", repo.GetFullPath()) + for _, line := range result.Stdout { + log.Warn("stdout:", line) + } + for _, line := range result.Stderr { + log.Warn("stderr:", line) + } + } else { + log.Warn("THINGS FAILED ", repo.GetFullPath()) + log.Warn("err", err) + if result == nil { + break + } + for _, line := range result.Stdout { + log.Warn("stdout:", line) + } + for _, line := range result.Stderr { + log.Warn("stderr:", line) + } + log.Warn("THINGS FAILED ", repo.GetFullPath()) + break + } + me.forge.SetConfigSave(true) + // view.Update() + } + me.forge.ConfigSave() +} + +func mergeUserToDevel(doit bool) { + me.found = new(gitpb.Repos) + findReposWithPatches() + if me.found.Len() == 0 { + log.Info("you currently have no patches in your user branches") + return + } + me.forge.PrintHumanTable(me.found) + + now := time.Now() + // check for devel branches + total, count, nope, _ := IsEverythingOnDevel() + log.Printf("Devel branch check. %d total repos. (%d ok) (%d not on devel branch) (%s)\n", total, count, nope, shell.FormatDuration(time.Since(now))) + + if !doit { + return + } + + all := me.found.SortByFullPath() + for all.Scan() { + repo := all.Next() + log.Info("repo:", repo.GetGoPath()) + if result, err := repo.MergeToDevel(); err == nil { + log.Warn("THINGS SEEM OK", repo.GetFullPath()) + for _, line := range result.Stdout { + log.Warn("stdout:", line) + } + for _, line := range result.Stderr { + log.Warn("stderr:", line) + } + } else { + log.Warn("THINGS FAILED ", repo.GetFullPath()) + log.Warn("err", err) + if result == nil { + break + } + for _, line := range result.Stdout { + log.Warn("stdout:", line) + } + for _, line := range result.Stderr { + log.Warn("stderr:", line) + } + break + } + me.forge.SetConfigSave(true) + // view.Update() + } + me.forge.ConfigSave() +}