diff options
Diffstat (limited to 'doRestore.go')
| -rw-r--r-- | doRestore.go | 62 |
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 +} |
