summaryrefslogtreecommitdiff
path: root/doCheckout.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-09-04 09:15:32 -0500
committerJeff Carr <[email protected]>2025-09-04 09:15:32 -0500
commit5fec66f97cce98793c657e4183b7ade280f5c7f8 (patch)
tree70ea0530c41885bae1b867c8352c9007554b5197 /doCheckout.go
parent680069d4ca65c75ce1d7d462d98ce7e9e4c8bfdc (diff)
lots more code cleanups
Diffstat (limited to 'doCheckout.go')
-rw-r--r--doCheckout.go292
1 files changed, 3 insertions, 289 deletions
diff --git a/doCheckout.go b/doCheckout.go
index d0f75cb..f24e3fc 100644
--- a/doCheckout.go
+++ b/doCheckout.go
@@ -5,271 +5,27 @@ package main
import (
"fmt"
- "os"
- "path/filepath"
- "time"
-
- "go.wit.com/lib/gui/shell"
- "go.wit.com/lib/protobuf/gitpb"
- "go.wit.com/log"
)
-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() (int, int, int, error) {
- var total int
- var count int
- var nope int
-
- // first make sure every repo is on the master branch
- for repo := range me.forge.Repos.IterAll() {
- total += 1
- if repo.GetMasterBranchName() == repo.GetCurrentBranchName() {
- count += 1
- } else {
- nope += 1
- }
- }
- if total != count {
- // log.Info(ErrorNotAllReposOnMaster)
- return total, count, nope, ErrorNotAllReposOnMaster
- }
- return total, count, nope, nil
-}
-
-func IsEverythingOnDevel() (int, int, int, error) {
- var total int
- var count int
- var nope int
-
- // first make sure every repo is on the master branch
- for repo := range me.forge.Repos.IterAll() {
- total += 1
- if repo.GetDevelBranchName() == repo.GetCurrentBranchName() {
- count += 1
- } else {
- nope += 1
- }
- }
- if total != count {
- return total, count, nope, ErrorNotAllReposOnDevel
- }
- return total, count, nope, nil
-}
-
-func IsEverythingOnUser() (int, int, int, error) {
- var total int
- var count int
- var nope int
-
- // first make sure every repo is on the master branch
- for repo := range me.forge.Repos.IterAll() {
- total += 1
- if repo.GetCurrentBranchName() == repo.GetUserBranchName() {
- count += 1
- } else {
- nope += 1
- }
- }
- if total != count {
- return total, count, nope, ErrorNotAllReposOnUser
- }
- return total, count, nope, nil
-}
-
-func doGitReset() {
- all := me.forge.Repos.SortByFullPath()
- for all.Scan() {
- repo := all.Next()
- if me.forge.Config.IsReadOnly(repo.GetGoPath()) {
- // log.Info("is readonly", repo.GetGoPath())
- if repo.CheckDirty() {
- log.Info("is readonly and dirty", repo.GetGoPath())
- cmd := []string{"git", "reset", "--hard"}
- repo.RunRealtime(cmd)
- }
- } else {
- // log.Info("is not readonly", repo.GetGoPath())
- }
- }
-}
-
-func rillCheckoutUser(repo *gitpb.Repo) error {
- if repo.IsDirty() {
- // never do dirty repos
- return nil
- }
- if repo.GetCurrentBranchName() == repo.GetMasterBranchName() {
- // repo is already on devel branch. have to move them there first for now
- // return repo.CheckoutDevel()
- }
- if repo.GetCurrentBranchName() == repo.GetUserBranchName() {
- // repo is already on user branch
- return nil
- }
- if err := repo.CheckoutUser(); err != nil {
- log.Info(repo.GetFullPath(), err)
- return err
- }
- return nil
-}
-
-// trys to figure out if there is still something to update
-func doAllCheckoutUser() error {
- now := time.Now()
-
- if argv.Force {
- log.Info("going to force create user branches")
- if err := makeUserBranches(); err != nil {
- return err
- }
- }
-
- me.forge.RillFuncError(rillCheckoutUser)
- count := me.forge.RillReload()
- if count != 0 {
- me.forge.ConfigSave()
- }
-
- total, count, nope, err := IsEverythingOnUser()
- log.Printf("User branch check. %d total repos. (%d ok) (%d not on user branch) (%s)\n", total, count, nope, shell.FormatDuration(time.Since(now)))
- if err != nil {
- // display all repos not on user
- found := new(gitpb.Repos)
- all := me.forge.Repos.SortByFullPath()
- for all.Scan() {
- repo := all.Next()
- if repo.GetCurrentBranchName() != repo.GetUserBranchName() {
- found.Append(repo)
- }
- }
- me.forge.PrintHumanTable(found)
- log.Printf("There are %d repos that are NOT on the user branch\n", found.Len())
- return err
- }
- return nil
-}
-
-func rillCheckoutDevel(repo *gitpb.Repo) error {
- if repo.IsDirty() {
- // never do dirty repos
- return nil
- }
- if repo.GetCurrentBranchName() == repo.GetDevelBranchName() {
- // repo is already on devel branch
- return nil
- }
- repo.CheckoutDevel()
- return nil
-}
-
-// is every repo on the devel branch?
-func doAllCheckoutDevel() error {
- now := time.Now()
- if argv.Force {
- log.Info("going to force create devel branches")
- makeDevelBranches()
- }
- log.Info("going to rill:")
- me.forge.RillFuncError(rillCheckoutDevel)
- count := me.forge.RillReload()
- if count != 0 {
- me.forge.ConfigSave()
- }
-
- total, count, nope, err := IsEverythingOnDevel()
- log.Printf("Devel branch check. %d total repos. (%d ok) (%d not on devel branch) (%s)\n", total, count, nope, shell.FormatDuration(time.Since(now)))
- if err != nil {
- // display all repos not on user
- found := new(gitpb.Repos)
- all := me.forge.Repos.SortByFullPath()
- for all.Scan() {
- repo := all.Next()
- if repo.GetCurrentBranchName() != repo.GetDevelBranchName() {
- found.Append(repo)
- }
- }
- me.forge.PrintHumanTable(found)
- log.Printf("There are %d repos that are NOT on the devel branch\n", found.Len())
- return err
- }
- return nil
-}
-
-func rillCheckoutMaster(repo *gitpb.Repo) error {
- if repo.IsDirty() {
- // never do dirty repos
- return nil
- }
- // 'giterr' means something is very wrong with this repo
- if repo.GetMasterVersion() == "giterr" {
- repo.CheckoutMaster()
- log.Info("master == giterr. BAD REPO", repo.GetFullPath())
- log.Info("master == giterr. BAD REPO", repo.GetFullPath())
- log.Info("master == giterr. BAD REPO", repo.GetFullPath())
- cmd := []string{"git", "checkout", "main"} // todo: figure out main
- repo.RunVerbose(cmd)
- os.Exit(-1)
- return nil
- }
- if repo.GetCurrentBranchName() == repo.GetMasterBranchName() {
- // repo is already on master
- return nil
- }
- repo.CheckoutMaster()
- return nil
-}
-
// trys to figure out if there is still something to update
-func doAllCheckoutMaster() error {
- now := time.Now()
- me.forge.RillFuncError(rillCheckoutMaster)
- count := me.forge.RillReload()
- if count != 0 {
- me.forge.ConfigSave()
- }
-
- total, count, nope, err := IsEverythingOnMaster()
- log.Printf("Master branch check. %d total repos. (%d ok) (%d not on master branch) (%s)\n", total, count, nope, shell.FormatDuration(time.Since(now)))
- if err != nil {
- // display all repos not on master
- found := new(gitpb.Repos)
- all := me.forge.Repos.SortByFullPath()
- for all.Scan() {
- repo := all.Next()
- if repo.GetCurrentBranchName() != repo.GetMasterBranchName() {
- found.Append(repo)
- }
- }
- me.forge.PrintHumanTable(found)
- log.Printf("There are %d repos that are NOT on the master branch\n", found.Len())
- return err
- }
- return nil
-}
-
-// 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 {
- if err := doAllCheckoutUser(); err != nil {
+ if err := me.forge.DoAllCheckoutUser(argv.Force); err != nil {
badExit(err)
}
okExit("")
}
if argv.Checkout.Devel != nil {
- if err := doAllCheckoutDevel(); err != nil {
+ if err := me.forge.DoAllCheckoutDevel(argv.Force); err != nil {
badExit(err)
}
okExit("")
}
if argv.Checkout.Master != nil {
- if err := doAllCheckoutMaster(); err != nil {
+ if err := me.forge.DoAllCheckoutMaster(); err != nil {
badExit(err)
}
okExit("")
@@ -277,45 +33,3 @@ func doCheckout() error {
badExit(fmt.Errorf("did not specify what branch to checkout"))
return nil
}
-
-func makeDevelBranches() error {
- all := me.forge.Repos.SortByFullPath()
- for all.Scan() {
- repo := all.Next()
- branch := repo.GetDevelBranchName()
- if repo.Exists(filepath.Join(".git/refs/heads", branch)) {
- continue
- }
- if repo.Exists(filepath.Join(".git/refs/remotes/origin", branch)) {
- cmd := []string{"git", "checkout", branch}
- repo.RunVerbose(cmd)
- continue
- }
- cmd := []string{"git", "branch", branch}
- repo.RunVerbose(cmd)
- cmd = []string{"git", "checkout", branch}
- repo.RunVerbose(cmd)
- }
- return nil
-}
-
-func makeUserBranches() error {
- all := me.forge.Repos.SortByFullPath()
- for all.Scan() {
- repo := all.Next()
- branch := repo.GetUserBranchName()
- if repo.Exists(filepath.Join(".git/refs/heads", branch)) {
- continue
- }
- if repo.Exists(filepath.Join(".git/refs/remotes/origin", branch)) {
- cmd := []string{"git", "checkout", branch}
- repo.RunVerbose(cmd)
- continue
- }
- cmd := []string{"git", "branch", branch}
- repo.RunVerbose(cmd)
- cmd = []string{"git", "checkout", branch}
- repo.RunVerbose(cmd)
- }
- return nil
-}