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 }