summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go74
1 files changed, 60 insertions, 14 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
+ eraseGoMod(repo)
+
+ if !argv.Strict {
+ if err := restoreFromGoPkg(repo); err == nil {
+ configSave = true
+ return nil
+ }
}
- if err := repo.ValidGoSum(); err == 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")
- configSave = true
- return nil
+ if !argv.Strict {
+ configSave = true
+ return nil
+ }
}
- // double check here. use --force to remake them
+ // 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() {