package main import ( "fmt" "strconv" "go.wit.com/gui" "go.wit.com/lib/gadgets" "go.wit.com/lib/gui/repolist" "go.wit.com/log" ) type patchSummary struct { grid *gui.Node updateB *gui.Node docsB *gui.Node gitPushB *gui.Node gitPullB *gui.Node checkB *gui.Node totalOL *gadgets.OneLiner dirtyOL *gadgets.OneLiner readonlyOL *gadgets.OneLiner rw *gadgets.OneLiner totalPatchesOL *gadgets.OneLiner totalUserRepos *gui.Node totalDevelRepos *gui.Node totalMasterRepos *gui.Node totalUserPatches *gui.Node totalDevelPatches *gui.Node totalMasterPatches *gui.Node fileCount *gui.Node unknownOL *gadgets.BasicEntry unknownSubmitB *gui.Node reason *gadgets.BasicEntry submitB *gui.Node allp []*repolist.Patch } func submitPatchesBox(box *gui.Node) *patchSummary { s := new(patchSummary) group1 := box.NewGroup("Patch Summary") s.grid = group1.RawGrid() s.totalOL = gadgets.NewOneLiner(s.grid, "Total") _ = s.grid.NewLabel("total changes") _ = s.grid.NewLabel("user to devel") s.grid.NextRow() s.dirtyOL = gadgets.NewOneLiner(s.grid, "dirty") _ = s.grid.NewLabel("") // skip a column s.totalUserRepos = s.grid.NewLabel("x go repos") s.grid.NextRow() s.readonlyOL = gadgets.NewOneLiner(s.grid, "read-only") _ = s.grid.NewLabel("") // skip a column s.totalUserPatches = s.grid.NewLabel("x patches") s.grid.NextRow() s.rw = gadgets.NewOneLiner(s.grid, "r/w") _ = s.grid.NewLabel("") // skip a column s.fileCount = s.grid.NewLabel("x files") s.grid.NextRow() group1 = box.NewGroup("Submit Patch Set") s.grid = group1.RawGrid() s.reason = gadgets.NewBasicEntry(s.grid, "set name:") s.reason.Custom = func() { if s.reason.String() != "" { s.submitB.Enable() } else { s.submitB.Disable() } } s.submitB = s.grid.NewButton("Submit", func() { if err := sendDevelDiff(s.reason.String()); err != nil { log.Info("sending patches failed", err) } else { log.Info("sent patch set ok") } }) s.grid.NewButton("List Patchsets", func() { listPatches() }) s.grid.NewButton("Show Latest Patchset", func() { lastp := lastPatch() pset, err := getPatch(lastp) if err != nil { return } if !dumpPatchset(pset) { log.Info("some patches are bad") return } if IsAnythingDirty() { log.Info("You can't apply patches when repos are dirty") doCobol() return } }) s.grid.NewButton("Apply Latest Patchset", func() { lastp := lastPatch() pset, err := getPatch(lastp) if err != nil { return } if !IsEverythingOnDevel() { log.Info("You can only apply patches to the devel branch") return } if IsAnythingDirty() { log.Info("You can't apply patches when repos are dirty") doCobol() return } applyPatchset(pset) }) s.grid.NewButton("Show Repos", func() { s.Update() if me.repos.Hidden() { me.repos.Show() } else { me.repos.Hide() } }) // disable these until there are not dirty repos // s.reason.Disable() s.submitB.Disable() s.grid.NextRow() return s } // does not run any commands func (s *patchSummary) Update() { var total, dirty, readonly, rw int var userT int // , develT, masterT int // var userP, develP, masterP int // broken after move to forge protobuf all := me.forge.Repos.SortByFullPath() for all.Scan() { repo := all.Next() total += 1 if repo.IsDirty() { dirty += 1 } if me.forge.Config.IsReadOnly(repo.GetGoPath()) { readonly += 1 } else { rw += 1 } } s.totalOL.SetText(strconv.Itoa(total) + " repos") s.dirtyOL.SetText(strconv.Itoa(dirty) + " repos") s.readonlyOL.SetText(strconv.Itoa(readonly) + " repos") s.rw.SetText(fmt.Sprintf("%d repos", rw)) s.totalUserRepos.SetText(strconv.Itoa(userT) + " repos") }