diff options
Diffstat (limited to 'doPatch.go')
| -rw-r--r-- | doPatch.go | 93 |
1 files changed, 93 insertions, 0 deletions
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 +} |
