From a29e10e9116f4d5ab80210b3eb8e25b674d3338f Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Thu, 29 May 2025 19:17:50 -0500 Subject: [PATCH] fixes due to 'go mod' behavior changes --- Makefile | 3 +++ argv.go | 21 ++++++++++++--------- argvAutoshell.go | 2 +- cleanGoSum.go | 6 ++++-- doSmart.go | 2 +- exit.go | 2 +- main.go | 16 +++++++++------- redoGoMod.go | 6 ++++++ 8 files changed, 37 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index 986396d..77bb4bd 100644 --- a/Makefile +++ b/Makefile @@ -37,3 +37,6 @@ clean: all: install go-mod-clean --all --auto + +autocomplete: + go-mod-clean --bash > ~/.local/share/bash-completion/completions/go-mod-clean diff --git a/argv.go b/argv.go index d86b6cd..17c036e 100644 --- a/argv.go +++ b/argv.go @@ -7,15 +7,18 @@ package main var argv args type args struct { - Trim bool `arg:"--trim" default:"true" help:"trim entries from go.sum"` - Verbose bool `arg:"--verbose" help:"show more"` - Restore bool `arg:"--restore" help:"only restore from go/pkg/mod/"` - Force bool `arg:"--force" help:"remove things and redo them no matter what"` - Strict bool `arg:"--strict" help:"never make go.* files unless everything is perfect"` - Purge bool `arg:"--purge" help:"purge all the git notes. this might be bad for you."` - Smart bool `arg:"--smart" help:"whatever seems best at the time. never os.Exit(-1)"` - Bash bool `arg:"--bash" help:"generate bash completion"` - BashAuto []string `arg:"--auto-complete" help:"todo: move this to go-arg"` + Trim bool `arg:"--trim" default:"true" help:"trim entries from go.sum"` + Verbose bool `arg:"--verbose" help:"show more"` + Restore bool `arg:"--restore" help:"only restore from go/pkg/mod/"` + Force bool `arg:"--force" help:"remove things and redo them no matter what"` + Purge *EmptyCmd `arg:"subcommand:purge" help:"purge all git notes. (this is where the autogenerated files are stored)"` + Smart *EmptyCmd `arg:"subcommand:lax" help:"try something but never do os.Exit(-1)"` + Strict *EmptyCmd `arg:"subcommand:strict" help:"never make go.* files unless everything is perfect"` + Bash bool `arg:"--bash" help:"generate bash completion"` + BashAuto []string `arg:"--auto-complete" help:"todo: move this to go-arg"` +} + +type EmptyCmd struct { } func (args) Version() string { diff --git a/argvAutoshell.go b/argvAutoshell.go index 4943203..3370828 100644 --- a/argvAutoshell.go +++ b/argvAutoshell.go @@ -28,7 +28,7 @@ func (args) doBashAuto() { default: if argv.BashAuto[0] == ARGNAME { // list the subcommands here - fmt.Println("--smart strict") + fmt.Println("strict restore purge lax") } } os.Exit(0) diff --git a/cleanGoSum.go b/cleanGoSum.go index 8d416e2..00e8046 100644 --- a/cleanGoSum.go +++ b/cleanGoSum.go @@ -15,13 +15,15 @@ import ( ) // This will recreate your go.sum and go.mod files - // checks to see if every 'master' git branch version // matches the go.sum file + +// THIS IS IN lib/forgepb AND THIS SHOULD BE SWITCHED TO THERE +// but I can't do it because forge as an app and forge packages aren't yet strong enough to use here (2025 may) func cleanGoDepsCheckOk(check *gitpb.Repo) error { // var err error = nil // var fixes [][]string - log.Printf("current repo %s go dependancy count: %d", check.GetGoPath(), check.GoDepsLen()) + log.Printf("%s repo go dependancy count: %d\n", check.GetGoPath(), check.GoDepsLen()) if check.GoDeps == nil { return errors.New("check.GoDeps == nil") } diff --git a/doSmart.go b/doSmart.go index 599704e..c29a9d9 100644 --- a/doSmart.go +++ b/doSmart.go @@ -37,7 +37,7 @@ func doSmart(repo *gitpb.Repo) error { if err := redoGoMod(repo); err != nil { return err } - log.Info(repo.GetGoPath(), "the files were restored with redoGoMod()") + log.Info(repo.GetGoPath(), "the files should have been restored with redoGoMod()") /* if repo.Exists("go.mod") { return nil diff --git a/exit.go b/exit.go index 81224c3..ed70f58 100644 --- a/exit.go +++ b/exit.go @@ -18,7 +18,7 @@ func badExit(check *gitpb.Repo, err error) { log.DaemonMode(true) log.Info("go-mod-clean failed: ", err, forge.GetGoSrc()) if check != nil { - if argv.Strict { + if argv.Strict != nil { // if in strict mode, remove the go.mod and go.sum eraseGoMod(check) } diff --git a/main.go b/main.go index f05ef97..2818d1f 100644 --- a/main.go +++ b/main.go @@ -25,7 +25,6 @@ var configSave bool func main() { var check *gitpb.Repo - log.Info("go-mod-clean version", VERSION, "built on", BUILDTIME) pp = arg.MustParse(&argv) if argv.Bash { @@ -36,6 +35,8 @@ func main() { argv.doBashAuto() os.Exit(0) } + + log.Info("go-mod-clean version", VERSION, "built on", BUILDTIME) // load the ~/.config/forge/ config // this lets you configure repos you have read/write access too forge = forgepb.InitPB() // todo: make this scan only if pb file not found @@ -48,8 +49,9 @@ func main() { } // deletes all the git notes - if argv.Purge { - purgeNotes(check) + if argv.Purge != nil { + purgeNotes(check) // purges all the 'git notes' + eraseGoMod(check) // erase the go.mod and go.sum files okExit(check, "notes gone") } @@ -61,14 +63,14 @@ func main() { okExit(check, "go.mod and go.sum restored from ~/go/pkg/mod/") } - if argv.Strict { + if argv.Strict != nil { log.Info("Starting --strict mode") if err := doStrict(check); err != nil { badExit(check, err) } okExit(check, "go.mod seems clean") } - if argv.Smart { + if argv.Smart != nil { // best effort if err := doSmart(check); err != nil { // badExit(check, err) @@ -93,13 +95,13 @@ func findPwdRepo() *gitpb.Repo { if strings.HasPrefix(pwd, forge.GetGoSrc()) { gopath := strings.TrimPrefix(pwd, forge.GetGoSrc()) gopath = strings.Trim(gopath, "/") - log.Info("findRepo() trying gopath", gopath) check = forge.FindByGoPath(gopath) if check != nil { - log.Info("findRepo() worked", check.GetGoPath()) + log.Info(check.GetGoPath(), "was found ok in forge") return check } } + log.Info("findRepo() forge could not find GO path:", pwd) return nil } diff --git a/redoGoMod.go b/redoGoMod.go index 1cf50dc..7bc38ae 100644 --- a/redoGoMod.go +++ b/redoGoMod.go @@ -45,11 +45,17 @@ func redoGoMod(repo *gitpb.Repo) error { log.Warn("rm go.mod go.sum failed", err) return err } + if _, err := repo.RunQuiet([]string{"go", "mod", "init", repo.GetGoPath()}); err != nil { log.Warn("go mod init failed", err) return err } + if _, err := repo.RunQuiet([]string{"go", "mod", "tidy"}); err != nil { + log.Warn("go mod init failed", err) + return err + } + // parse the go.mod and go.sum files if repo.ParseGoSum() { return nil