diff options
Diffstat (limited to 'src/cmd/api')
| -rw-r--r-- | src/cmd/api/run.go | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/cmd/api/run.go b/src/cmd/api/run.go index a13d9a5496..067be4eb05 100644 --- a/src/cmd/api/run.go +++ b/src/cmd/api/run.go @@ -110,12 +110,13 @@ func prepGoPath() string { tmpDir := filepath.Join(cloneDir, tempBase) // finalDir is where the checkout will live once it's complete. - // If this exists already, we're done. finalDir := filepath.Join(cloneDir, "go.tools") - if fi, err := os.Stat(finalDir); err == nil && fi.IsDir() { + if goToolsCheckoutGood(finalDir) { return gopath } + os.RemoveAll(finalDir) // in case it's there but corrupt + os.RemoveAll(tmpDir) // in case of aborted hg clone before if err := os.MkdirAll(cloneDir, 0700); err != nil { log.Fatal(err) @@ -138,3 +139,29 @@ func prepGoPath() string { } return gopath } + +func goToolsCheckoutGood(dir string) bool { + if _, err := os.Stat(dir); err != nil { + return false + } + + cmd := exec.Command("hg", "id", "--id") + cmd.Dir = dir + out, err := cmd.Output() + if err != nil { + return false + } + id := strings.TrimSpace(string(out)) + if id != goToolsVersion { + return false + } + + cmd = exec.Command("hg", "status") + cmd.Dir = dir + out, err = cmd.Output() + if err != nil || len(out) > 0 { + return false + } + + return true +} |
