summaryrefslogtreecommitdiff
path: root/doRestore.go
diff options
context:
space:
mode:
Diffstat (limited to 'doRestore.go')
-rw-r--r--doRestore.go62
1 files changed, 62 insertions, 0 deletions
diff --git a/doRestore.go b/doRestore.go
new file mode 100644
index 0000000..7469158
--- /dev/null
+++ b/doRestore.go
@@ -0,0 +1,62 @@
+package main
+
+import (
+ "errors"
+ "os"
+ "path/filepath"
+
+ "go.wit.com/lib/gui/shell"
+ "go.wit.com/lib/protobuf/gitpb"
+ "go.wit.com/log"
+)
+
+func restoreFromGoPkg(repo *gitpb.Repo) error {
+ homedir, err := os.UserHomeDir()
+ if err != nil {
+ badExit(nil, err)
+ }
+ repo.RunVerboseOnError([]string{"rm", "-f", "go.mod", "go.sum"})
+ rver := repo.GetLastTag()
+ if rver == "" {
+ return errors.New("could not get master version")
+ }
+ goget := repo.GetGoPath() + "@" + rver
+ moddir := filepath.Join(homedir, "go/pkg/mod", repo.GetGoPath()+"@"+rver)
+ if shell.IsDir(moddir) {
+ // things are ok
+ } else {
+ return errors.New("must run go get " + goget)
+ }
+
+ modfile := filepath.Join(homedir, "go/pkg/mod", repo.GetGoPath()+"@"+rver, "go.mod")
+ if shell.Exists(modfile) {
+ // go.mod exists
+ } else {
+ log.Info(repo.GetGoPath(), "does not have file:", modfile)
+ // nothing to do. this repo does not have a go.mod file
+ return nil
+ }
+ 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.GetGoPath()+"@"+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
+}