// This is a simple example package main import ( "io/ioutil" "os/user" "strings" "go.wit.com/gui" "go.wit.com/lib/gadgets" "go.wit.com/lib/gui/repostatus" "go.wit.com/log" ) func (r *repo) String() string { return r.status.String() } func (r *repo) getPath() string { return r.path } func RemoveFirstElement(slice []string) (string, []string) { if len(slice) == 0 { return "", slice // Return the original slice if it's empty } return slice[0], slice[1:] // Return the slice without the first element } // returns path, master branch name, devel branch name, user branch name func splitLine(line string) (string, string, string, string) { var path, master, devel, user string parts := strings.Split(line, " ") path, parts = RemoveFirstElement(parts) master, parts = RemoveFirstElement(parts) devel, parts = RemoveFirstElement(parts) user, parts = RemoveFirstElement(parts) // path, master, devel, user := strings.Split(line, " ") return path, master, devel, user } func myrepolist() []string { content, _ := ioutil.ReadFile("/home/jcarr/.config/myrepolist") out := string(content) out = strings.TrimSpace(out) lines := strings.Split(out, "\n") return lines } func (r *repo) Hide() { r.pLabel.Hide() r.lastTag.Hide() r.vLabel.Hide() r.targetVersion.Hide() r.dirtyLabel.Hide() r.goSumStatus.Hide() r.statusButton.Hide() r.hidden = true } func (r *repo) Show() { r.pLabel.Show() r.lastTag.Show() r.vLabel.Show() r.targetVersion.Show() r.dirtyLabel.Show() r.goSumStatus.Show() r.statusButton.Show() r.hidden = false } // This creates a window func repoworld() { reposwin = gadgets.NewBasicWindow(me.myGui, "All git repositories in ~/go/src/") reposwin.Make() reposwin.Custom = func() { log.Warn("GOT HERE: main() gadgets.NewBasicWindow() close") log.Warn("Should I do something special here?") } reposbox = reposwin.Box().NewBox("bw vbox", false) reposgroup = reposbox.NewGroup("go repositories (read from ~/.config/myrepolist)") reposgrid = reposgroup.NewGrid("test", 7, 1) reposgrid.NewLabel("") // path goes here reposgrid.NewLabel("last tag") reposgrid.NewLabel("Current Ver") reposgrid.NewLabel("Target Ver") reposgrid.NewLabel("Status") reposgrid.NewLabel("go.sum") reposgrid.NewLabel("Show()") repos := myrepolist() for _, line := range repos { log.Verbose("repo =", line) path, mbranch, dbranch, ubranch := splitLine(line) if mbranch == "" { mbranch = "master" } if dbranch == "" { dbranch = "devel" } usr, _ := user.Current() if ubranch == "" { ubranch = usr.Username } addRepo(reposgrid, path, mbranch, dbranch, ubranch) } for i, path := range repostatus.ListGitDirectories() { // log.Info("addRepo()", i, path) tmp := strings.TrimPrefix(path, "/home/jcarr/go/src/") log.Info("addRepo()", i, tmp) addRepo(reposgrid, tmp, "master", "master", "master") } } func addRepo(grid *gui.Node, path string, master string, devel string, user string) { _, ok := me.allrepos[path] if ok { log.Info("addRepo() already had path", path) return } newRepo := new(repo) path = strings.Trim(path, "/") // trim any extranous '/' chars put in the config file by the user if path == "" { log.Warn("addRepo() got empty path", path, master, devel, user) return } if repostatus.VerifyLocalGoRepo(path) { log.Verbose("newRepo actually exists", newRepo.getPath()) } else { log.Warn("repostatus.VerifyLocalGoRepo() failed for for", path, master, devel, user) return } newRepo.path = path newRepo.pLabel = grid.NewLabel(path) newRepo.lastTag = grid.NewLabel("") newRepo.vLabel = grid.NewLabel("") newRepo.targetVersion = grid.NewLabel("") newRepo.dirtyLabel = grid.NewLabel("") newRepo.goSumStatus = grid.NewLabel("?") newRepo.statusButton = grid.NewButton("Configure", func() { if newRepo.status == nil { log.Warn("status window doesn't exist") return } log.Warn("status window exists. trying TestDraw() here") newRepo.status.Toggle() setCurrentRepo(newRepo, "manually chosen", "notsure") }) newRepo.status = repostatus.NewRepoStatusWindow(newRepo.path) newRepo.hidden = false newRepo.status.SetMainWorkingName(master) newRepo.status.SetDevelWorkingName(devel) newRepo.status.SetUserWorkingName(user) me.allrepos[path] = newRepo }