forge/doCheckout.go

241 lines
5.6 KiB
Go
Raw Permalink Normal View History

package main
import (
2025-01-18 23:25:55 -06:00
"fmt"
"go.wit.com/lib/protobuf/forgepb"
"go.wit.com/lib/protobuf/gitpb"
"go.wit.com/log"
)
2025-01-18 23:25:55 -06:00
var ErrorNotAllReposOnMaster error = fmt.Errorf("not all repos on are on the master branch")
var ErrorNotAllReposOnDevel error = fmt.Errorf("not all repos on are on the devel branch")
var ErrorNotAllReposOnUser error = fmt.Errorf("not all repos on are on the user branch")
func IsEverythingOnMaster() error {
var total int
var count int
// first make sure every repo is on the master branch
all := me.forge.Repos.All()
for all.Scan() {
repo := all.Next()
total += 1
if repo.GetMasterBranchName() == repo.GetCurrentBranchName() {
count += 1
}
}
log.Printf("Master branch check. %d total repos. %d repos on the master branch\n", total, count)
if total != count {
// log.Info(ErrorNotAllReposOnMaster)
return ErrorNotAllReposOnMaster
}
return nil
}
func IsEverythingOnDevel() error {
var total int
var count int
// first make sure every repo is on the master branch
all := me.forge.Repos.All()
for all.Scan() {
repo := all.Next()
2025-01-18 23:25:55 -06:00
total += 1
if repo.GetDevelBranchName() == repo.GetCurrentBranchName() {
count += 1
}
}
2025-01-18 23:25:55 -06:00
log.Printf("Devel branch check. %d total repos. %d repos on the devel branch\n", total, count)
if total != count {
return ErrorNotAllReposOnDevel
}
2025-01-18 23:25:55 -06:00
return nil
}
2025-01-18 23:25:55 -06:00
func IsEverythingOnUser() error {
var total int
var count int
// first make sure every repo is on the master branch
all := me.forge.Repos.All()
for all.Scan() {
repo := all.Next()
2025-01-18 23:25:55 -06:00
total += 1
2025-01-19 04:31:38 -06:00
if repo.GetCurrentBranchName() == repo.GetUserBranchName() {
2025-01-18 23:25:55 -06:00
count += 1
}
}
2025-01-18 23:25:55 -06:00
log.Printf("User branch check. %d total repos. %d repos on the user branch\n", total, count)
if total != count {
return ErrorNotAllReposOnUser
}
2025-01-18 23:25:55 -06:00
return nil
}
2024-12-13 17:13:07 -06:00
func doGitReset() {
2024-12-17 06:36:00 -06:00
all := me.found.SortByFullPath()
2024-12-13 17:13:07 -06:00
for all.Scan() {
repo := all.Next()
2024-12-17 06:36:00 -06:00
if me.forge.Config.IsReadOnly(repo.GetGoPath()) {
// log.Info("is readonly", repo.GetGoPath())
2024-12-13 17:13:07 -06:00
if repo.CheckDirty() {
2024-12-17 06:36:00 -06:00
log.Info("is readonly and dirty", repo.GetGoPath())
2024-12-13 17:13:07 -06:00
cmd := []string{"git", "reset", "--hard"}
repo.RunRealtime(cmd)
}
} else {
2024-12-17 06:36:00 -06:00
// log.Info("is not readonly", repo.GetGoPath())
2024-12-13 17:13:07 -06:00
}
}
}
2025-01-18 23:25:55 -06:00
/*
2024-12-13 16:17:36 -06:00
func checkoutBranches(repo *gitpb.Repo) error {
dname := repo.GetDevelBranchName()
if dname == "" {
if err := me.forge.MakeDevelBranch(repo); err != nil {
2024-12-17 06:36:00 -06:00
log.Info("verify() no devel branch name", repo.GetGoPath())
2024-12-13 16:17:36 -06:00
return err
}
configSave = true
}
if repo.GetUserBranchName() == "" {
if err := me.forge.MakeUserBranch(repo); err != nil {
2024-12-17 06:36:00 -06:00
log.Info("verify() no devel branch name", repo.GetGoPath())
2024-12-13 16:17:36 -06:00
return err
}
configSave = true
}
return nil
}
2025-01-18 23:25:55 -06:00
*/
2025-01-19 04:31:38 -06:00
func rillCheckoutUser(repo *gitpb.Repo) error {
if repo.IsDirty() {
// never do dirty repos
return nil
}
if repo.GetCurrentBranchName() == repo.GetUserBranchName() {
// repo is already on user branch
return nil
}
repo.CheckoutUser()
return nil
}
2025-01-18 23:25:55 -06:00
func doAllCheckoutUser() error {
2025-01-19 04:31:38 -06:00
me.forge.RillFuncError(rillCheckoutUser)
2025-01-18 23:25:55 -06:00
count := me.forge.RillReload()
if count != 0 {
me.forge.ConfigSave()
}
if err := IsEverythingOnUser(); err != nil {
2025-01-19 04:31:38 -06:00
// display all repos not on user
me.found = new(gitpb.Repos)
all := me.forge.Repos.SortByFullPath()
for all.Scan() {
repo := all.Next()
if repo.GetCurrentBranchName() != repo.GetUserBranchName() {
me.found.AppendByGoPath(repo)
}
}
me.forge.PrintHumanTable(me.found)
log.Printf("There are %d repos that are NOT on the user branch\n", me.found.Len())
2025-01-18 23:25:55 -06:00
return err
}
return nil
}
2025-01-18 23:25:55 -06:00
func doAllCheckoutDevel() error {
me.forge.CheckoutDevel()
2025-01-18 23:25:55 -06:00
// me.forge = forgepb.Init()
count := me.forge.RillReload()
log.Info("CHECKOUT DEVEL COUNT", count)
if count != 0 {
me.forge.ConfigSave()
}
if err := IsEverythingOnDevel(); err != nil {
return err
}
return nil
}
func rillCheckoutMaster(repo *gitpb.Repo) error {
2025-01-19 03:45:10 -06:00
if repo.IsDirty() {
// never do dirty repos
return nil
}
if repo.GetCurrentBranchName() == repo.GetMasterBranchName() {
// repo is already on master
return nil
}
2025-01-18 23:25:55 -06:00
if repo.GetUserVersion() != repo.GetDevelVersion() {
2025-01-19 03:45:10 -06:00
// don't switch branches if the user branch has uncommitted patches
2025-01-18 23:25:55 -06:00
return nil
}
2025-01-19 03:45:10 -06:00
if me.forge.Config.IsReadOnly(repo.GetGoPath()) {
// skip other checks for readonly repos
repo.CheckoutMaster()
2025-01-19 03:39:35 -06:00
return nil
}
2025-01-19 03:45:10 -06:00
if repo.GetDevelVersion() != repo.GetMasterVersion() {
// don't switch braches if the devel branch does not match master (needs merge)
2025-01-18 23:25:55 -06:00
return nil
}
repo.CheckoutMaster()
return nil
}
2025-01-18 23:25:55 -06:00
// trys to figure out if there is still something to update
// todo: redo this logic as it is terrible
func doAllCheckoutMaster() error {
me.forge.RillFuncError(rillCheckoutMaster)
count := me.forge.RillReload()
if count != 0 {
me.forge.ConfigSave()
}
if err := IsEverythingOnMaster(); err != nil {
// display all repos not on master
me.found = new(gitpb.Repos)
all := me.forge.Repos.SortByFullPath()
for all.Scan() {
repo := all.Next()
if repo.GetCurrentBranchName() != repo.GetMasterBranchName() {
me.found.AppendByGoPath(repo)
}
}
me.forge.PrintHumanTable(me.found)
2025-01-18 23:25:55 -06:00
log.Printf("There are %d repos that are NOT on the master branch\n", me.found.Len())
return err
}
2025-01-18 23:25:55 -06:00
return nil
}
2025-01-18 07:47:34 -06:00
2025-01-18 23:25:55 -06:00
// trys to figure out if there is still something to update
// todo: redo this logic as it is terrible
func doCheckout() error {
if argv.Checkout.User != nil {
2025-01-19 04:31:38 -06:00
doAllCheckoutUser()
2025-01-18 23:25:55 -06:00
okExit("")
}
if argv.Checkout.Devel != nil {
me.forge.CheckoutDevel()
me.forge = forgepb.Init()
me.found = new(gitpb.Repos)
argv.Checkout.Devel.findRepos()
me.forge.PrintHumanTable(me.found)
okExit("")
}
if argv.Checkout.Master != nil {
doAllCheckoutMaster()
2025-01-19 04:31:38 -06:00
okExit("")
2025-01-18 23:25:55 -06:00
}
return nil
2025-01-18 07:47:34 -06:00
}