diff options
| author | Jeff Carr <[email protected]> | 2025-09-04 09:15:32 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-09-04 09:15:32 -0500 |
| commit | 5fec66f97cce98793c657e4183b7ade280f5c7f8 (patch) | |
| tree | 70ea0530c41885bae1b867c8352c9007554b5197 /doCheckout.go | |
| parent | 680069d4ca65c75ce1d7d462d98ce7e9e4c8bfdc (diff) | |
lots more code cleanups
Diffstat (limited to 'doCheckout.go')
| -rw-r--r-- | doCheckout.go | 292 |
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 -} |
