summaryrefslogtreecommitdiff
path: root/doSmart.go
diff options
context:
space:
mode:
Diffstat (limited to 'doSmart.go')
-rw-r--r--doSmart.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/doSmart.go b/doSmart.go
new file mode 100644
index 0000000..46c3d1d
--- /dev/null
+++ b/doSmart.go
@@ -0,0 +1,63 @@
+package main
+
+import (
+ "errors"
+
+ "go.wit.com/lib/protobuf/gitpb"
+ "go.wit.com/log"
+)
+
+// this will make go.mod and go.sum files, but you have to
+// have the files in .gitignore for now
+func doSmart(repo *gitpb.Repo) error {
+ if !repo.IsValid() {
+ log.Info(repo.GoPath, "is invalid. fix your repos.pb file with 'forge' first")
+ log.Info("")
+ log.Info("go install go.wit.com/apps/forge@latest")
+ log.Info("")
+ return errors.New(repo.GoPath + " is invalid. fix your repository list with 'forge' first")
+ }
+ log.Info(repo.GoPath, "is valid according to forge")
+
+ // if the repo has go.mod in the repo...
+ if err := repo.RepoIgnoresGoMod(); err != nil {
+ log.Info("never modify go.mod or go.sum for this repo", repo.GoPath)
+ log.Info("We recommend you add 'go.*' to your .gitignore file and store those files as git tag metadata")
+ repo.ParseGoSum()
+ return nil
+ }
+
+ // erase the go.mod and go.sum files
+ eraseGoMod(repo)
+
+ // try to restore from the git metadata
+ cname := repo.GetCurrentBranchName()
+ if err := repo.AutogenRestore(cname); err == nil {
+ log.Info(repo.GoPath, "files were restored ok from git metadata (notes)")
+ configSave = true
+ return nil
+ }
+
+ // attempt to restore from ~/go/pkg/mod/
+ if err := restoreFromGoPkg(repo); err == nil {
+ configSave = true
+ return nil
+ }
+
+ // actually will re-create go.sum and go.mod now
+ if err := redoGoMod(repo); err != nil {
+ return err
+ }
+
+ // the first time, it'll attempt to fix some stuff
+ cleanGoDepsCheckOk(repo)
+ // try to trim junk
+ if err := trimGoSum(repo); err != nil {
+ return err
+ }
+ repo.ParseGoSum()
+
+ // everything worked more or less
+ configSave = true
+ return nil
+}