gitpb/reloadRepoState.go

93 lines
2.3 KiB
Go

package gitpb
// does processing on the go.mod and go.sum files
import (
"go.wit.com/log"
)
// count all objects only in branch1
func (repo *Repo) countDiffObjects(branch1, branch2 string) int {
cmd := repo.ConstructGitDiffLog(branch1, branch2)
r, err := repo.RunVerboseOnError(cmd)
if err != nil {
return -1
}
// log.Info("countDiffObjects()", cmd, len(r.Stdout), strings.Join(r.Stdout, " "))
return len(r.Stdout)
}
func (repo *Repo) setRepoState() {
if repo == nil {
return
}
if repo.IsDirty() {
repo.State = "dirty"
return
}
if repo.GetUserVersion() == "uerr" {
// user has not made user branches
} else {
if repo.GetUserVersion() != repo.GetDevelVersion() {
repo.State = "merge to devel"
return
}
}
if repo.GetDevelVersion() != repo.GetMasterVersion() {
b1 := repo.countDiffObjects(repo.GetMasterBranchName(), repo.GetDevelBranchName())
if b1 == 0 {
repo.State = "merge to main"
// log.Info("master vs devel count is normal b1 == 0", b1)
} else {
repo.State = "DEVEL < MASTER"
// log.Info("master vs devel count b1 != 0", b1)
log.Info("SERIOUS ERROR. DEVEL BRANCH NEEDS MERGE FROM MASTER b1 ==", b1, repo.GetGoPath())
}
return
}
// if IsGoTagVersionGreater(oldtag string, newtag string) bool {
if !IsGoTagVersionGreater(repo.GetLastTag(), repo.GetMasterVersion()) {
repo.State = "last tag greater error"
return
}
if repo.GetLastTag() != repo.GetMasterVersion() {
repo.State = "ready to release"
return
}
if repo.CheckBranches() {
repo.State = "PERFECT"
return
}
log.Info("Branches are not Perfect", repo.GetFullPath())
log.Info("Branches are not Perfect", repo.GetFullPath())
log.Info("Branches are not Perfect", repo.GetFullPath())
repo.State = "unknown branches"
}
// returns true if old="v0.2.4" and new="v0.3.3"
// returns true if equal
// todo: make all of this smarter someday
func IsGoTagVersionGreater(oldtag string, newtag string) bool {
olda, oldb, oldc := splitInts(oldtag)
newa, newb, newc := splitInts(newtag)
if newa < olda {
return false
}
if newb < oldb {
return false
}
if newc < oldc {
return false
}
return true
}
// returns true for "v0.2.4" and false for "v0.2.43-asdfj"
// actually returns false for anything not perfectly versioned
func IsGoTagPublished(oldtag string, newtag string) bool {
// todo
return true
}