summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--argv.go3
-rw-r--r--doDev.go60
-rw-r--r--doNormal.go12
-rw-r--r--main.go8
4 files changed, 81 insertions, 2 deletions
diff --git a/argv.go b/argv.go
index 923e9ee..8354d0a 100644
--- a/argv.go
+++ b/argv.go
@@ -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
}
diff --git a/main.go b/main.go
index 3c70d78..a9f60e0 100644
--- a/main.go
+++ b/main.go
@@ -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("")