package main import ( "errors" "fmt" "os" "path/filepath" "go.wit.com/lib/gui/shell" "go.wit.com/log" ) func purgeGoCaches() { homedir, err := os.UserHomeDir() if err != nil { badExit(nil, err) } pkgdir := filepath.Join(homedir, "go/pkg") var cmd []string cmd = []string{"chmod", "700", "-R", pkgdir} runStrict("", cmd) cmd = []string{"rm", "-rf", pkgdir} runStrict("", cmd) builddir := filepath.Join(homedir, ".cache/go-build") cmd = []string{"rm", "-rf", builddir} runStrict("", cmd) // this can't have really happened // echo this still failed in: // echo "Linux hpdev2.grid.wit.com 6.9.8-rt-amd64 #1 SMP PREEMPT_RT Debian 6.9.8-1 (2024-07-07) x86_64 GNU/Linux" // echo and I had to drop the caches after building go install binaries quickly and running them // echo "as an os.Exec() between binaries" // echo sysctl -w vm.drop_caches=3 } func runStrict(wd string, cmd []string) { var err error if wd != "" { if err = os.Chdir(wd); err != nil { log.Info("cd", "wd", "failed", err) badExit(nil, err) } } log.Info(wd, "running:", wd, cmd) // result := shell.Run(cmd) result := shell.RunRealtime(cmd) if result.Error != nil { log.Info("cmd failed", wd, cmd, err) for i, line := range result.Stdout { log.Info("STDOUT:", i, line) } for i, line := range result.Stderr { log.Info("STDERR:", i, line) } badExit(nil, err) } if result.Exit != 0 { log.Info("cmd failed", wd, cmd, err) for i, line := range result.Stdout { log.Info("STDOUT:", i, line) } for i, line := range result.Stderr { log.Info("STDERR:", i, line) } badExit(nil, errors.New(fmt.Sprintf("cmd failed with %d", result.Exit))) } for i, line := range result.Stdout { log.Info(i, line) } }