diff options
| -rw-r--r-- | Makefile | 3 | ||||
| -rw-r--r-- | applyPatch.go | 46 | ||||
| -rw-r--r-- | doPatch.go | 93 | ||||
| -rw-r--r-- | main.go | 29 | ||||
| -rw-r--r-- | windowViewPatchset.go | 4 |
5 files changed, 99 insertions, 76 deletions
@@ -7,7 +7,8 @@ BUILDTIME = $(shell date +%Y.%m.%d_%H%M) # make andlabs # try the andlabs gui plugin (uses GTK) default: install - forge dirty --verbose + # forge dirty --verbose + forge patch list vet: @GO111MODULE=off go vet diff --git a/applyPatch.go b/applyPatch.go index a7c891e..bd55cc3 100644 --- a/applyPatch.go +++ b/applyPatch.go @@ -42,52 +42,6 @@ func savePatchset(pset *forgepb.Patchset) error { return nil } -// returns bad if patches can not be applied -func dumpPatchset(pset *forgepb.Patchset) bool { - log.Info("applyPatches() NAME", pset.Name) - log.Info("applyPatches() COMMENT", pset.Comment) - log.Info("applyPatches() GIT_AUTHOR_NAME", pset.GetGitAuthorName()) - log.Info("applyPatches() GIT_AUTHOR_EMAIL", pset.GetGitAuthorEmail()) - log.Info("applyPatches() Branch Name", pset.GetStartBranchName()) - log.Info("applyPatches() Start Hash", pset.GetStartBranchHash()) - - var count int - var bad int - all := pset.Patches.SortByFilename() - for all.Scan() { - p := all.Next() - if IsValidPatch(p) { - // ok - } else { - bad += 1 - } - count += 1 - } - log.Info("pset has", count, "total patches, ", bad, "bad patches") - if bad == 0 { - return true - } - return false -} - -func IsValidPatch(p *forgepb.Patch) bool { - basepath, filename := filepath.Split(p.Filename) - repo := me.forge.FindByGoPath(basepath) - if repo == nil { - log.Info("can not apply patch! repo not found", basepath, filename) - return false - } - if repo.DevelHash() != p.StartHash { - log.Info("can not apply patch! devel hash mismatch", basepath, filename) - return false - } - log.Info("start:", p.StartHash, "end:", p.CommitHash, "file:", basepath, filename, "devel version", repo.GetDevelVersion()) - for _, line := range p.Files { - log.Info("\t", line) - } - return true -} - // re-run git CheckDirty() on everything func IsAnythingDirty() bool { me.found = new(gitpb.Repos) diff --git a/doPatch.go b/doPatch.go new file mode 100644 index 0000000..735ab53 --- /dev/null +++ b/doPatch.go @@ -0,0 +1,93 @@ +package main + +import ( + "path/filepath" + + "go.wit.com/lib/protobuf/forgepb" + "go.wit.com/log" +) + +func doPatch() error { + if argv.Patch.Submit != "" { + _, err := me.forge.SubmitDevelPatchSet(argv.Patch.Submit) + if err != nil { + return err + } + return nil + } + + if argv.Patch.List != nil { + return doPatchList() + } + findReposWithPatches() + if me.found.Len() == 0 { + log.Info("you have no patches in your user branches") + okExit("patch list empty") + } + me.forge.PrintHumanTable(me.found) + + return nil +} + +func doPatchList() error { + psets, err := me.forge.GetPatchesets() + if err != nil { + log.Info("Get Patchsets failed", err) + return err + } + log.Info("got psets len", len(psets.Patchsets)) + all := psets.SortByName() + for all.Scan() { + pset := all.Next() + log.Info("pset name =", pset.Name) + dumpPatchset(pset) + } + + return nil +} + +// returns bad if patches can not be applied +func dumpPatchset(pset *forgepb.Patchset) bool { + log.Info("applyPatches() NAME", pset.Name) + log.Info("applyPatches() COMMENT", pset.Comment) + log.Info("applyPatches() GIT_AUTHOR_NAME", pset.GetGitAuthorName()) + log.Info("applyPatches() GIT_AUTHOR_EMAIL", pset.GetGitAuthorEmail()) + log.Info("applyPatches() Branch Name", pset.GetStartBranchName()) + log.Info("applyPatches() Start Hash", pset.GetStartBranchHash()) + + var count int + var bad int + all := pset.Patches.SortByFilename() + for all.Scan() { + p := all.Next() + if IsValidPatch(p) { + // ok + } else { + bad += 1 + } + count += 1 + } + log.Info("pset has", count, "total patches, ", bad, "bad patches") + if bad == 0 { + return true + } + return false +} + +func IsValidPatch(p *forgepb.Patch) bool { + basepath, filename := filepath.Split(p.Filename) + repo := me.forge.FindByGoPath(basepath) + if repo == nil { + log.Info("can not apply patch! repo not found", basepath, filename) + return false + } + if repo.DevelHash() != p.StartHash { + log.Info("can not apply patch! devel hash mismatch", basepath, filename) + return false + } + log.Info("start:", p.StartHash, "end:", p.CommitHash, "file:", basepath, filename, "devel version", repo.GetDevelVersion()) + for _, line := range p.Files { + log.Info("\t", line) + } + return true +} @@ -155,34 +155,9 @@ func main() { } if argv.Patch != nil { - if argv.Patch.Submit != "" { - _, err := me.forge.SubmitDevelPatchSet(argv.Patch.Submit) - if err != nil { - badExit(err) - } - okExit("") - } - - if argv.Patch.List != nil { - if psets, err := me.forge.GetPatchesets(); err != nil { - log.Info("Get Patchsets failed", err) - return - } else { - log.Info("got psets len", len(psets.Patchsets)) - all := psets.SortByName() - for all.Scan() { - pset := all.Next() - log.Info("pset name =", pset.Name) - } - } - } - findReposWithPatches() - if me.found.Len() == 0 { - log.Info("you have no patches in your user branches") - okExit("patch list empty") + if err := doPatch(); err != nil { + badExit(err) } - me.forge.PrintHumanTable(me.found) - okExit("patch list") } diff --git a/windowViewPatchset.go b/windowViewPatchset.go index 52758de..a9ff69d 100644 --- a/windowViewPatchset.go +++ b/windowViewPatchset.go @@ -101,8 +101,8 @@ func makePatchWindow(pset *forgepb.Patchset) *patchWindow { } }) grid.NewButton("Apply with git am", func() { - if _, _, _, err := IsEverythingOnDevel(); err != nil { - log.Info("You can only apply patches to the devel branch") + if _, _, _, err := IsEverythingOnUser(); err != nil { + log.Info("You can only apply patches to the user branch") return } if IsAnythingDirty() { |
