summaryrefslogtreecommitdiff
path: root/doClean.go
diff options
context:
space:
mode:
Diffstat (limited to 'doClean.go')
-rw-r--r--doClean.go74
1 files changed, 73 insertions, 1 deletions
diff --git a/doClean.go b/doClean.go
index ca04c9e..cfe5b19 100644
--- a/doClean.go
+++ b/doClean.go
@@ -2,6 +2,9 @@ package main
import (
"fmt"
+ "os"
+ "path/filepath"
+ "slices"
"go.wit.com/lib/protobuf/gitpb"
"go.wit.com/log"
@@ -87,6 +90,75 @@ 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)
+ /*
+ if bran == repo.GetUserBranchName() {
+ log.Info("The user branch also has a remote branch", repo.CurrentTag.Refname)
+ log.Info("TODO: verify the remote branch is out of date", repo.CurrentTag.Refname)
+ log.Info("TODO: delete the remote branch", repo.CurrentTag.Refname)
+ return nil
+ }
+ */
+
+ if !repo.Exists(filepath.Join(".git/refs/heads", branch.Name)) {
+ err := fmt.Errorf("BAD FORGE LOGIC. DELETE REPO %s", repo.GetGoPath())
+ log.Warn(err)
+ me.forge.Repos.Repos = slices.DeleteFunc(me.forge.Repos.Repos, func(r *gitpb.Repo) bool {
+ if repo.GetGoPath() == r.GetGoPath() {
+ return true
+ }
+ return false
+ })
+
+ // me.forge.Repos.Delete(repo)
+ me.forge.ConfigSave()
+ os.Exit(0)
+ return err
+ }
+
+ if repo.Exists(filepath.Join(".git/refs/remotes/origin", branch.Name)) {
+ log.Info("why is this non-localonly branch a problem?", branch.Name)
+ repo.RunVerbose([]string{"ls", "-l", ".git/refs/remotes/origin"})
+ repo.RunVerbose([]string{"cat", filepath.Join(".git/refs/remotes/origin", branch.Name)})
+ repo.RunVerbose([]string{"cat", filepath.Join(".git/refs/heads", branch.Name)})
+ } else {
+ log.Info("why is this local only branch a problem?", branch.Name)
+ repo.RunVerbose([]string{"ls", "-l", ".git/refs/remotes/origin"})
+ r, err := repo.RunVerbose([]string{"cat", filepath.Join(".git/refs/heads", branch.Name)})
+ if err == nil {
+ cmd := []string{"git", "show", "-s", "--format=\"%H %ae %as %s\"", r.Stdout[0]}
+ repo.RunVerbose(cmd)
+ log.Info(cmd)
+ }
+ if err := userToDevelRequiresGitPush(repo, branch.Name); err != nil {
+ return err
+ }
+ log.Info("THIS USER BRANCH IS CLEAN TO DELETE", branch.Name)
+ if argv.Clean.Force != nil {
+ cmd := []string{"git", "branch", "-D", branch.Name}
+ _, err := repo.RunVerbose(cmd)
+ return err
+ }
+ }
+ // return fmt.Errorf("%s repo.CurrentTag is not local: %s. Don't proceed yet", repo.GetGoPath(), repo.CurrentTag.Refname)
+ log.Printf("Do something %s on branch name:%s merge:%s remote:%s\n", repo.GetGoPath(), branch.Name, branch.Merge, branch.Remote)
return nil
}
+
+func userToDevelRequiresGitPush(repo *gitpb.Repo, branchName string) error {
+ devel := repo.GetDevelBranchName()
+ b1 := countDiffObjects(repo, branchName, "origin/"+devel)
+ b2 := countDiffObjects(repo, "origin/"+devel, branchName)
+ log.Info("user vs devel count", b1, b2)
+ if b1 == 0 && b2 == 0 {
+ return nil
+ }
+ if b1 != 0 {
+ log.Info("user vs devel count b1 != 0, b2 ==", b1, b2)
+ log.Info("THIS MEANS THE LOCAL BRANCH NEEDS GIT PUSH TO ORIGIN BRANCH ==", b1)
+ // if argv.Examine.Fix != nil {
+ // return gitPushStrict(repo, branchName)
+ // }
+ return fmt.Errorf("user branch not clean to delete %d %d", b1, b2)
+ }
+ return fmt.Errorf("user branch not clean to delete. maybe it is? devel might be ahead of user branch. %d %d", b1, b2)
+}