From 84cf8265a036b72304eebeb01e48b1a6ed5630a8 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Sun, 15 Dec 2024 00:11:08 -0600 Subject: [PATCH] also attempt to restore from ~/go/pkg/mod/ --- main.go | 82 ++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 64 insertions(+), 18 deletions(-) diff --git a/main.go b/main.go index 8d0846b..26616f5 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,7 @@ package main import ( "errors" "os" + "path/filepath" "strings" "go.wit.com/dev/alexflint/arg" @@ -45,7 +46,7 @@ func main() { check = findPwdRepo() if check == nil { log.Info("this directory isn't in a golang project (not in ~/go/src nor a go.work file)") - os.Exit(-1) + badExit(nil, nil) } if err := doMain(check); err != nil { @@ -54,7 +55,7 @@ func main() { } if configSave { - forge.ConfigSave() + // forge.ConfigSave() } log.Info("forge.FinalGoDepsCheck() worked :", check.GoPath) @@ -93,6 +94,41 @@ func saveAsMetadata(repo *gitpb.Repo) error { return nil } +func restoreFromGoPkg(repo *gitpb.Repo) error { + homedir, err := os.UserHomeDir() + if err != nil { + badExit(nil, err) + } + rver := repo.GetMasterVersion() + if rver == "" { + return errors.New("could not get master version") + } + modfile := filepath.Join(homedir, "go/pkg/mod", repo.GoPath+"@"+rver, "go.mod") + log.Info("mod path should be", modfile) + data, err := os.ReadFile(modfile) + if err != nil { + return err + } + modf, err := os.OpenFile("go.mod", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) + if err != nil { + return err + } + defer modf.Close() + modf.Write(data) + + modfile = filepath.Join(homedir, "go/pkg/mod", repo.GoPath+"@"+rver, "go.sum") + log.Info("mod path should be", modfile) + data, err = os.ReadFile(modfile) + if err == nil { + sumf, _ := os.OpenFile("go.sum", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) + defer sumf.Close() + sumf.Write(data) + } + + // try go.sum, but no error checking since it might not be there + return nil +} + func doMain(repo *gitpb.Repo) error { var perfect bool = true if !repo.IsValid() { @@ -104,27 +140,37 @@ func doMain(repo *gitpb.Repo) error { } log.Info(repo.GoPath, "is valid according to forge") - // skip restore if --force + // purge the git meta-data if --force if argv.Force { repo.Run([]string{"git", "notes", "remove"}) - eraseGoMod(repo) - } - // erase the go.mod and go.sum files - cname := repo.GetCurrentBranchName() - // try to restore from the git metadata - if err := repo.AutogenRestore(cname); err != nil { - // ignore errors here - } - if err := repo.ValidGoSum(); err == nil { - log.Info(repo.GoPath, "go.mod and go.sum were restored ok") - configSave = true - return nil } - // double check here. use --force to remake them + // erase the go.mod and go.sum files + eraseGoMod(repo) + + if !argv.Strict { + if err := restoreFromGoPkg(repo); err == nil { + configSave = true + return nil + } + } + + // try to restore from the git metadata + cname := repo.GetCurrentBranchName() + if err := repo.AutogenRestore(cname); err == nil { + log.Info(repo.GoPath, "go.mod and go.sum were restored ok") + if !argv.Strict { + configSave = true + return nil + } + } + + // if they were auto restored, one should exit here if err := repo.ValidGoSum(); err == nil { - log.Info(repo.GoPath, "go.mod and go.sum are already valid") - return nil + if !argv.Strict { + log.Info(repo.GoPath, "go.mod and go.sum were restored ok") + return nil + } } if repo.GetMasterBranchName() != repo.GetCurrentBranchName() {