diff options
| -rw-r--r-- | argv.go | 3 | ||||
| -rw-r--r-- | doDev.go | 60 | ||||
| -rw-r--r-- | doNormal.go | 12 | ||||
| -rw-r--r-- | main.go | 8 |
4 files changed, 81 insertions, 2 deletions
@@ -87,6 +87,7 @@ type DevCmd struct { Install string `arg:"--install" help:"install a repo"` BuildForge bool `arg:"--forge-rebuild" help:"download and rebuild forge"` URL string `arg:"--connect" help:"forge url"` + DeleteUser bool `arg:"--delete-user" help:"delete all user branches (checks for safety)"` } type CleanCmd struct { @@ -199,7 +200,7 @@ func (args) Appname() string { func (a args) DoAutoComplete(pb *prep.Auto) { if pb.Cmd == "" { - pb.Autocomplete3([]string{"checkout", "reset", "commit", "config", "gui", "merge", "mode", "patch", "pull", "show", "add", "--version", "--force"}) + pb.Autocomplete3([]string{"checkout", "reset", "commit", "config", "gui", "merge", "mode", "patch", "pull", "show", "add", "--version", "--force", "dev"}) } else { pb.SubCommand(pb.Goargs...) } diff --git a/doDev.go b/doDev.go new file mode 100644 index 0000000..b526b10 --- /dev/null +++ b/doDev.go @@ -0,0 +1,60 @@ +// Copyright 2017-2025 WIT.COM Inc. All rights reserved. +// Use of this source code is governed by the GPL 3.0 + +package main + +import ( + "go.wit.com/lib/protobuf/forgepb" + "go.wit.com/log" +) + +// FORGE USES THESE TO RECOVER FROM WHEN TOOLKITS FAIL TO LOAD +// so don't delete them +func doDev() (string, error) { + if argv.Dev.DeleteUser { + setForgeMode(forgepb.ForgeMode_MASTER) + for repo := range me.forge.Repos.IterByNamespace() { + if !repo.IsBranchRemote(repo.GetUserBranchName()) { + continue + } + // log.Info("delete remote user", repo.FullPath) + localtag := repo.IsBranchLocal(repo.GetUserBranchName()) + if localtag == nil { + log.Info("no local user", repo.FullPath) + continue + } + // log.Info("local user", repo.FullPath) + hashes, err := repo.DeleteLocalBranch(repo.GetUserBranchName()) + if err != nil { + // log.Info("LOCAL BRANCH NOT SAFE. COMPARE WITH DEVEL", err, repo.FullPath) + } else if hashes == nil { + log.Info("LOCAL SAFE TO DELETE", repo.FullPath) + continue + } + uref := repo.GetLocalUserRef() + dref := repo.GetLocalDevelRef() + // try compare against devel + uver := repo.NewCompareRef(uref) + dver := repo.NewCompareRef(dref) + hashok, hashbad, err := dver.DeleteBranch(uver) + if err == nil { + for _, line := range hashok { + log.Info("SAFE hashok", line) + } + for _, line := range hashbad { + log.Info("NOT SAFE hashbad", line) + } + log.Info("SAFE TO DELETE uver from dver", uref.Refname, dref.Refname, repo.FullPath) + continue + } + for _, line := range hashok { + log.Info("SAFE hashok", line) + } + for _, line := range hashbad { + log.Info("NOT SAFE hashbad", line) + } + log.Info("NOT SAFE TO DELETE uver from dver", uref.Refname, dref.Refname, repo.FullPath, err) + } + } + return "", nil +} diff --git a/doNormal.go b/doNormal.go index 731fe3d..78de104 100644 --- a/doNormal.go +++ b/doNormal.go @@ -157,22 +157,32 @@ func checkNormalRepoState(repo *gitpb.Repo) error { } } + if repo.IsBranchRemote(repo.GetUserBranchName()) { + log.Info(repo.FullPath) + panic("nuts") + } + // check to see if the user branch is behind the devel branch if repo.GetUserVersion() != repo.GetDevelVersion() { uver := repo.NewCompareTag(repo.GetUserBranchName()) dver := repo.NewCompareTag(repo.GetDevelBranchName()) if uver == nil { + log.Info(repo.FullPath, "uver == nil") // make user here (should have already happened) return ErrorNoUserBranch } if dver == nil { + log.Info(repo.FullPath, "dver == nil") // make dev here (should have already happened) return ErrorNoDevelBranch } - if uver.LessThan(dver) { + if len(dver.GreaterThan(uver)) == 0 { + log.Info(repo.FullPath, "usr < dev") repo.State = "usr < dev" // check if nothing new exists in user, then delete return ErrorLocalBehindDevel + } else { + repo.State = "normal" } // everything is fine } @@ -62,6 +62,14 @@ func main() { okExit("") } + if argv.Dev != nil { + s, err := doDev() + if err != nil { + me.sh.BadExit(s, err) + } + me.sh.GoodExit(s) + } + if argv.Commit != nil { doCommit() okExit("") |
