112 lines
2.7 KiB
Go
112 lines
2.7 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
|
|
|
|
func (repo *RepoRow) GetPatches(oldname string, newname string) (int, []*Patch) {
|
|
var patchcount int
|
|
patches := make([]*Patch, 0, 0)
|
|
|
|
if oldname == newname {
|
|
return 0, nil
|
|
}
|
|
// log.Info("repo userv, develv", userv, develv)
|
|
gitcmd := []string{"git", "log", "--oneline", oldname + ".." + newname}
|
|
log.Info("Run:", gitcmd)
|
|
r := repo.Status.Run(gitcmd)
|
|
if r.Error != nil {
|
|
log.Info("git failed ", repo.GoPath(), "err =", r.Error)
|
|
return 0, nil
|
|
}
|
|
|
|
// patches = strings.Split(output, "\n")
|
|
log.Info("Run:", r.Stdout)
|
|
for _, line := range r.Stdout {
|
|
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)
|
|
r := repo.Status.Run(gitcmd)
|
|
log.Info("output =", r.Stdout)
|
|
if r.Error == nil {
|
|
log.Info("patches made okay for:", repo.GoPath())
|
|
continue
|
|
}
|
|
log.Info("patches failed for:", repo.GoPath())
|
|
return false
|
|
}
|
|
return true
|
|
}
|