package main import ( "fmt" "go.wit.com/lib/protobuf/gitpb" "go.wit.com/log" ) var ErrorReposHasLocalBranches error = fmt.Errorf("repo still has local branches") func doClean() error { if err := IsEverythingOnMaster(); err != nil { log.Info("Not all repos are on the master branch") // return err } all := me.forge.Repos.SortByFullPath() for all.Scan() { repo := all.Next() if repo.GetCurrentBranchName() != repo.GetMasterBranchName() { // skip this while in devel // continue } if err := doCleanRepo(repo); err != nil { badRepoExit(repo, err) } } log.Info("All repos on the master branch are clean") return nil } // removes all local branches func doCleanRepo(repo *gitpb.Repo) error { var hasLocal bool if argv.Verbose { log.Info("Cleaning:", repo.GetGoPath()) } if repo.GitConfig == nil { return fmt.Errorf("GitConfig == nil") } for _, l := range repo.GitConfig.Local { log.Info("\tlocal branch name:", l.Name) } for name, b := range repo.GitConfig.Branches { if b.Name == "" { b.Name = name } if name == repo.GetMasterBranchName() { // never delete the master branch // todo: make sure the master branch is in sync with remote master continue } hasLocal = true if name == repo.GetUserBranchName() { if err := doCleanUserBranch(repo, b); err != nil { return err } continue } if name == repo.GetDevelBranchName() { if err := doCleanDevelBranch(repo, b); err != nil { return err } continue } log.Info("\tlocal branch name unknown:", name, b.Merge, b.Remote) } if hasLocal { return ErrorReposHasLocalBranches } return nil } func verifyLocalBranchIsMerged(repo *gitpb.Repo, branch *gitpb.GitBranch) error { return nil } func doCleanDevelBranch(repo *gitpb.Repo, branch *gitpb.GitBranch) error { log.Printf("\tDo something %s on branch name:%s merge:%s remote:%s\n", repo.GetGoPath(), branch.Name, branch.Merge, branch.Remote) return nil } func doCleanUserBranch(repo *gitpb.Repo, branch *gitpb.GitBranch) error { if branch.Name != repo.GetUserBranchName() { return fmt.Errorf("repo %s was not user branch %s", repo.GetGoPath(), branch.Name) } log.Printf("\tDo something %s on branch name:%s merge:%s remote:%s\n", repo.GetGoPath(), branch.Name, branch.Merge, branch.Remote) return nil }