repolist/getPatches.go

133 lines
3.3 KiB
Go

package repolist
import (
"path/filepath"
"strings"
"go.wit.com/lib/gui/repostatus"
"go.wit.com/lib/gui/shell"
"go.wit.com/log"
)
type Patch struct {
Ref string
giturl string
comment string
RS *repostatus.RepoStatus
}
/* move all this to repolist and gowit repos
p, allp := s.GetPatches()
if s.allp == nil {
s.allp = make([]*patch, 0, 0)
s.allp = append(s.allp, allp...)
}
if dirty == 0 {
s.totalPatchesOL.SetText(strconv.Itoa(p) + " patches")
s.reason.Enable()
// force the user to submit a reason to enable the submit button
// s.submitB.Enable()
} else {
s.totalPatchesOL.SetText(strconv.Itoa(p) + " patches + ? dirty")
}
*/
// move all this to repolist and gowit repos
func (repo *RepoRow) GetPatches(oldname string, newname string) (int, []*Patch) {
var patchcount int
patches := make([]*Patch, 0, 0)
// git log --oneline devel..jcarr
// userv := repo.Status.GetUserVersion()
// develv := repo.Status.GetDevelVersion()
// usern := repo.Status.GetUserBranchName()
// develn := repo.Status.GetDevelBranchName()
if oldname == newname {
return 0, nil
}
// log.Info("repo userv, develv", userv, develv)
gitcmd := []string{"git", "log", "--oneline", oldname + ".." + newname}
log.Info("Run:", gitcmd)
err, output := repo.Status.RunCmd(gitcmd)
if err != nil {
log.Info("git failed ", repo.GoPath(), "err =", err)
return 0, nil
}
// patches = strings.Split(output, "\n")
log.Info("Run:", output)
for _, line := range strings.Split(output, "\n") {
line = strings.TrimSpace(line)
if line == "" {
continue
}
parts := strings.Split(line, " ")
newp := new(Patch)
newp.RS = repo.Status
newp.Ref = parts[0]
newp.comment = strings.Join(parts[1:], " ")
log.Info("Patch line:", line, newp.RS.String())
patchcount += 1
patches = append(patches, newp)
}
return patchcount, patches
}
func (repo *RepoRow) GetUserPatches() (int, []*Patch) {
usern := repo.Status.GetUserBranchName()
develn := repo.Status.GetDevelBranchName()
userv := repo.Status.GetUserVersion()
develv := repo.Status.GetDevelVersion()
if userv == develv {
return 0, nil
}
c, all := repo.GetPatches(develn, usern)
log.Info("GetPatches() guireleaser", develn, usern, "count =", c)
return c, all
}
func (repo *RepoRow) GetMasterPatches() (int, []*Patch) {
lasttag := repo.LastTag()
mastern := repo.Status.GetMasterBranchName()
masterv := repo.Status.GetMasterVersion()
if lasttag == masterv {
return 0, nil
}
c, all := repo.GetPatches(lasttag, mastern)
log.Info("GetPatches() guireleaser", lasttag, mastern, "count =", c)
return c, all
}
func (r *RepoList) MakePatchset(setdir string) bool {
for _, repo := range r.allrepos {
userv := repo.Status.GetUserVersion()
develv := repo.Status.GetDevelVersion()
usern := repo.Status.GetUserBranchName()
develn := repo.Status.GetDevelBranchName()
if userv == develv {
// this repo is unchanged
continue
}
repodir := filepath.Join(setdir, repo.GoPath())
shell.Mkdir(repodir)
// git format-patch branch1..branch2
gitcmd := []string{"git", "format-patch", "-o", repodir, develn + ".." + usern}
log.Info("Run:", gitcmd)
err, output := repo.Status.RunCmd(gitcmd)
log.Info("output =", output)
if err == nil {
log.Info("patches made okay for:", repo.GoPath())
continue
}
log.Info("patches failed for:", repo.GoPath())
return false
}
return true
}