mirror of
https://github.com/golang/go
synced 2024-11-17 20:54:48 -07:00
cmd/api: be more robust against OS deleting temp files
OS X in particular deletes tmp files (but not directories) pretty reliably. Ask hg whether the go.tools directory in tmp is good before using it. Fixes issue Rob and others were reporting, which I just hit myself now. R=golang-dev, r CC=golang-dev https://golang.org/cl/13084049
This commit is contained in:
parent
cb79c57dfa
commit
e7b125fc65
@ -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
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user