87 lines
2.1 KiB
Go
87 lines
2.1 KiB
Go
// Copyright 1994-2025 WIT.COM Inc Licensed GPL 3.0
|
|
|
|
package forgepb
|
|
|
|
import (
|
|
"go.wit.com/log"
|
|
)
|
|
|
|
// retrieves current patches from forge
|
|
func (f *Forge) GetPatches() error {
|
|
url := f.forgeURL + "GetPatchsets"
|
|
log.Info("GetPatchsets() url", url)
|
|
body, err := f.HttpPost(url, nil)
|
|
if err != nil {
|
|
log.Info("httpPost() failed:", err)
|
|
return err
|
|
}
|
|
log.Info("GetPatchets() len(body)", len(body))
|
|
var psets *Patchsets
|
|
psets = new(Patchsets)
|
|
err = psets.Unmarshal(body)
|
|
if err != nil {
|
|
log.Info("Unmarshal failed", err)
|
|
return err
|
|
}
|
|
psets.PrintTable()
|
|
f.loadUpstreamPatchsets(psets)
|
|
return nil
|
|
}
|
|
|
|
func (f *Forge) expireAllPatchsets() {
|
|
all := f.Patchsets.All()
|
|
for all.Scan() {
|
|
pset := all.Next()
|
|
pset.State = "DONE"
|
|
}
|
|
}
|
|
|
|
func (f *Forge) loadUpstreamPatchsets(psets *Patchsets) {
|
|
var foundnew bool
|
|
|
|
all := psets.All()
|
|
for all.Scan() {
|
|
pset := all.Next()
|
|
found := f.Patchsets.FindByUuid(pset.Uuid)
|
|
if found == nil {
|
|
f.expireAllPatchsets()
|
|
log.Info("new patchset", pset.Name, pset.Uuid)
|
|
pset.State = "new"
|
|
foundnew = true
|
|
if pset == nil {
|
|
log.Warn("OH NO! pset == nil")
|
|
continue
|
|
}
|
|
if f.Patchsets == nil {
|
|
log.Warn("OH NO! f.Patchsets == nil")
|
|
continue
|
|
}
|
|
log.Warn("appending pset", pset.Uuid, pset.State, pset.Name)
|
|
f.Patchsets.Append(pset)
|
|
continue
|
|
}
|
|
author := log.Sprintf("Author: %s <%s>", found.GitAuthorName, found.GitAuthorEmail)
|
|
log.Info("EXAMINE PSET", pset.Name, pset.Uuid, pset.Patches.Len())
|
|
for _, patch := range pset.Patches.Patches {
|
|
// log.Info("\tnew patch:", i, patch.CommitHash, patch.Namespace)
|
|
if f.findPatch(patch) {
|
|
// log.Info("\talready found!!!!!!!", pset.Uuid, patch.Namespace)
|
|
continue
|
|
}
|
|
if err := f.addRandomPatch(patch); err == nil {
|
|
log.Info("\tnew patch added:", patch.CommitHash, found.Name, found.Comment, author)
|
|
foundnew = true
|
|
} else {
|
|
log.Info("\tnew patch failed:", patch.CommitHash, found.Name, found.Comment, author, err)
|
|
}
|
|
}
|
|
pset.State = found.State
|
|
if pset.State == "" {
|
|
pset.State = "new"
|
|
}
|
|
}
|
|
if foundnew {
|
|
f.SavePatchsets()
|
|
}
|
|
}
|