diff options
author | Robert Griesemer <gri@golang.org> | 2016-11-09 17:02:33 -0800 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2016-11-10 01:34:03 +0000 |
commit | 73497c7656fa55ac33bac960ecee806b9b07ae5e (patch) | |
tree | d1997a16c312cb780663145f91b6a546d3bcd2ba | |
parent | b188b4cc110261a004674df5a4e209cc4894d314 (diff) | |
download | go-73497c7656fa55ac33bac960ecee806b9b07ae5e.tar.gz go-73497c7656fa55ac33bac960ecee806b9b07ae5e.zip |
cmd/gofmt: don't leave tmp file if -w failed
Follow-up on https://golang.org/cl/33018.
For #8984.
Change-Id: I6655a5537a60d4ea3ee13029a56a75b150f8c8f8
Reviewed-on: https://go-review.googlesource.com/33020
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-rw-r--r-- | src/cmd/gofmt/gofmt.go | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/cmd/gofmt/gofmt.go b/src/cmd/gofmt/gofmt.go index 4cf91336a3..467af87459 100644 --- a/src/cmd/gofmt/gofmt.go +++ b/src/cmd/gofmt/gofmt.go @@ -243,15 +243,17 @@ func diff(b1, b2 []byte) (data []byte, err error) { // implemented. func writeFile(filename string, data []byte, perm os.FileMode) error { // open temp file - f, err := ioutil.TempFile(filepath.Dir(filename), "tmp") + f, err := ioutil.TempFile(filepath.Dir(filename), "gofmt-") if err != nil { return err } + tmpname := f.Name() err = f.Chmod(perm) if err != nil { + f.Close() + os.Remove(tmpname) return err } - tmpname := f.Name() // write data to temp file n, err := f.Write(data) @@ -261,9 +263,12 @@ func writeFile(filename string, data []byte, perm os.FileMode) error { if err1 := f.Close(); err == nil { err = err1 } + if err == nil { + err = os.Rename(tmpname, filename) + } if err != nil { - return err + os.Remove(tmpname) } - return os.Rename(tmpname, filename) + return err } |