package repostatus import ( "errors" "fmt" "time" "go.wit.com/log" ) func (rs *RepoStatus) Update() { if !rs.Ready() { log.Log(WARN, "can't update yet. ready is false") log.Error(errors.New("Update() is not ready yet")) return } log.Log(INFO, "Update() START") duration := timeFunction(func() { // do things that are safe even if the git tree is dirty // rs.path.SetValue(rs.repopath) rs.getCurrentBranchName() // rs.window.SetTitle(rs.repopath + " GO repo Details") rs.getCurrentBranchVersion() rs.getLastTagVersion() rs.populateTags() rs.CheckDirty() if rs.dirtyLabel.String() != "no" { log.Warn("dirty label != no. actual value:", rs.dirtyLabel.String()) rs.DisableEverything() rs.CheckBranches() return } master := rs.mainWorkingName.String() devel := rs.develWorkingName.String() user := rs.userWorkingName.String() // rs.CheckDirty() this runs log.Log(INFO, "checkoutBranch", master) rs.checkoutBranch("master", master) log.Log(INFO, "checkoutBranch", devel) rs.checkoutBranch("devel", devel) log.Log(INFO, "checkoutBranch", user) rs.checkoutBranch("user", user) rs.recommend() rs.CheckBranches() label := "merge " + rs.userWorkingName.String() + " to " + rs.develWorkingName.String() rs.develMergeB.SetLabel(label) label = "merge " + rs.develWorkingName.String() + " to " + rs.mainWorkingName.String() rs.mainMergeB.SetLabel(label) }) rs.setSpeed(duration) log.Log(INFO, "Update() END") } func (rs *RepoStatus) setSpeed(duration time.Duration) { s := fmt.Sprint(duration) if rs.speedActual == nil { log.Log(WARN, "rs.speedActual == nil") return } rs.speedActual.SetValue(s) if duration > 500*time.Millisecond { rs.speed.SetValue("SLOW") } else if duration > 100*time.Millisecond { rs.speed.SetValue("OK") } else { rs.speed.SetValue("FAST") } } // disable all things besides Update() button func (rs *RepoStatus) DisableEverything() { log.Log(INFO, "DisableEverything()") // choosing a major, minor or revision rs.major.Disable() rs.minor.Disable() rs.revision.Disable() // disable adding a tag message rs.versionMessage.Disable() // disable the merge devel to master button rs.develMergeB.Disable() // disable the tag a new version button rs.releaseVersion.Disable() } // this means devel needs to be merged to master func (rs *RepoStatus) EnableMergeDevel() { rs.DisableEverything() rs.develMergeB.Enable() } func (rs *RepoStatus) Disable() { rs.window.Disable() } func (rs *RepoStatus) Enable() { rs.window.Enable() } // this means you need to release a new version of the master repository func (rs *RepoStatus) EnableSelectTag() { rs.DisableEverything() // choosing a major, minor or revision rs.major.Enable() rs.minor.Enable() rs.revision.Enable() // disable adding a tag message rs.versionMessage.Enable() rs.develMergeB.SetLabel("ready to release") if len(rs.versionMessage.String()) == 0 { // force there to be a commit message rs.releaseVersion.Disable() } else { rs.generateCmd() rs.releaseVersion.Enable() } } func (rs *RepoStatus) UpdateCurrent() { if !rs.Ready() { log.Log(WARN, "can't update yet. ready is false") log.Error(errors.New("Update() is not ready yet")) return } log.Log(INFO, "Update() START") rs.getCurrentBranchName() rs.getCurrentBranchVersion() rs.getLastTagVersion() rs.populateTags() rs.CheckDirty() // read in the .git/config each update rs.readGitConfig() // this looks into .git somewhat rs.CheckBranches() if rs.dirtyLabel.String() != "no" { // the repo is dirty log.Warn("dirty label != no. actual value:", rs.dirtyLabel.String()) rs.DisableEverything() return } }