diff --git a/newRepo.go b/newRepo.go new file mode 100644 index 0000000..a79d542 --- /dev/null +++ b/newRepo.go @@ -0,0 +1,150 @@ +package repolist + +import ( + "strings" + + "go.wit.com/lib/gui/repostatus" + "go.wit.com/log" +) + +func (r *RepoList) NewRepo(path string) (*Repo, error) { + status, err := repostatus.New(path) + if err != nil { + return nil, err + } + newRepo := new(Repo) + newRepo.Status = status + + newRepo.pLabel = r.reposgrid.NewLabel(path).SetProgName("path") + newRepo.hidden = false + + r.allrepos[path] = newRepo + newRepo.NewScan() + + switch r.viewName { + case "autotypist": + r.makeAutotypistView(newRepo) + case "guireleaser": + r.makeGuireleaserView(newRepo) + default: + r.makeAutotypistView(newRepo) + } + r.reposgrid.NextRow() + return newRepo, nil +} + +func (r *RepoList) makeAutotypistView(newRepo *Repo) { + grid := r.reposgrid + + newRepo.lastTag = newRepo.Status.MirrorLastTag() + grid.Append(newRepo.lastTag) + + newRepo.masterVersion = newRepo.Status.MirrorMasterVersion() + grid.Append(newRepo.masterVersion) + + newRepo.develVersion = newRepo.Status.MirrorDevelVersion() + grid.Append(newRepo.develVersion) + + newRepo.userVersion = newRepo.Status.MirrorUserVersion() + grid.Append(newRepo.userVersion) + + newRepo.gitState = newRepo.Status.MirrorGitState() + grid.Append(newRepo.gitState) + + newRepo.currentName = newRepo.Status.MirrorCurrentName() + grid.Append(newRepo.currentName) + newRepo.currentVersion = newRepo.Status.MirrorCurrentVersion() + grid.Append(newRepo.currentVersion) + + newRepo.endBox = grid.NewHorizontalBox("HBOX") + newRepo.endBox.NewButton("Configure", func() { + newRepo.Status.Toggle() + }) + + newRepo.endBox.NewButton("show diff", func() { + r.reposbox.Disable() + log.Log(REPOWARN, "show diff currentName =", newRepo.currentName.String()) + log.Log(REPOWARN, "show diff masterVersion =", newRepo.masterVersion.String()) + // newRepo.Status.XtermNohup([]string{"git diff"}) + newRepo.Status.Xterm("git diff; bash") + r.reposbox.Enable() + }) + + newRepo.endBox.NewButton("commit all", func() { + r.reposbox.Disable() + // restore anything staged so everything can be reviewed + newRepo.Status.RunCmd([]string{"git", "restore", "--staged", "."}) + newRepo.Status.XtermWait("git diff") + newRepo.Status.XtermWait("git add --all") + newRepo.Status.XtermWait("git commit -a") + newRepo.Status.XtermWait("git push") + if newRepo.Status.CheckDirty() { + // commit was not done, restore diff + newRepo.Status.RunCmd([]string{"git", "restore", "--staged", "."}) + } else { + newRepo.NewScan() + } + r.reposbox.Enable() + }) + + if strings.HasPrefix(newRepo.GoPath(), "go.wit.com/apps") { + var showBuildB bool = false + switch newRepo.Status.RepoType() { + case "binary": + log.Info("showing compile here button") + showBuildB = true + case "library": + // log.Info("library here. Hide()") + default: + // log.Info("unknown RepoType", newRepo.Status.RepoType()) + } + if showBuildB { + newRepo.endBox.NewButton("build", func() { + newRepo.Status.Build() + }) + } + } +} + +func (r *RepoList) makeGuireleaserView(newRepo *Repo) { + grid := r.reposgrid + + newRepo.targetV = newRepo.Status.MirrorTargetVersion() + grid.Append(newRepo.targetV) + + newRepo.lastTag = newRepo.Status.MirrorLastTag() + grid.Append(newRepo.lastTag) + + newRepo.currentName = newRepo.Status.MirrorCurrentName() + grid.Append(newRepo.currentName) + newRepo.currentVersion = newRepo.Status.MirrorCurrentVersion() + grid.Append(newRepo.currentVersion) + + newRepo.gitState = newRepo.Status.MirrorGitState() + grid.Append(newRepo.gitState) + + newRepo.goState = grid.NewLabel("goState") + + newRepo.endBox = grid.NewHorizontalBox("HBOX") + newRepo.endBox.NewButton("Configure", func() { + if newRepo.Status == nil { + // this should never happen, but it does happen because I'm not that smart and forget I can nil Status + // for some reason that makes sense in my head. again, I'm not that smart + log.Warn("status window wasn't created") + return + } + newRepo.Status.Toggle() + }) + newRepo.endBox.NewButton("CheckValidGoSum()", func() { + ok, err := r.CheckValidGoSum(newRepo) + if err != nil { + log.Info("go mod tidy did not work err =", err) + return + } + if ok { + log.Info("repo has go.sum requirements that are clean") + newRepo.goState.SetText("GOOD") + return + } + }) +}