From d83db204cec938a53072124e16d79022316b3dc5 Mon Sep 17 00:00:00 2001 From: haya14busa Date: Fri, 31 Mar 2017 11:52:04 +0900 Subject: [PATCH] cmd/goimports: flush to disk before diffing Port of gofmt change at golang.org/cl/36750 Change-Id: Ie0ef6770be6361264ed45a9a9ece950aba24e852 Reviewed-on: https://go-review.googlesource.com/39073 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- cmd/goimports/goimports.go | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/cmd/goimports/goimports.go b/cmd/goimports/goimports.go index 3322bc05..b722c6a2 100644 --- a/cmd/goimports/goimports.go +++ b/cmd/goimports/goimports.go @@ -277,36 +277,45 @@ func gofmtMain() { } } +func writeTempFile(dir, prefix string, data []byte) (string, error) { + file, err := ioutil.TempFile(dir, prefix) + if err != nil { + return "", err + } + _, err = file.Write(data) + if err1 := file.Close(); err == nil { + err = err1 + } + if err != nil { + os.Remove(file.Name()) + return "", err + } + return file.Name(), nil +} + func diff(b1, b2 []byte, filename string) (data []byte, err error) { - f1, err := ioutil.TempFile("", "gofmt") + f1, err := writeTempFile("", "gofmt", b1) if err != nil { return } - defer os.Remove(f1.Name()) - defer f1.Close() + defer os.Remove(f1) - f2, err := ioutil.TempFile("", "gofmt") + f2, err := writeTempFile("", "gofmt", b2) if err != nil { return } - defer os.Remove(f2.Name()) - defer f2.Close() - - f1.Write(b1) - f2.Write(b2) + defer os.Remove(f2) cmd := "diff" if runtime.GOOS == "plan9" { cmd = "/bin/ape/diff" } - data, err = exec.Command(cmd, "-u", f1.Name(), f2.Name()).CombinedOutput() + data, err = exec.Command(cmd, "-u", f1, f2).CombinedOutput() if len(data) > 0 { // diff exits with a non-zero status when the files don't match. // Ignore that failure as long as we get output. - err = nil - - data, err = replaceTempFilename(data, filename) + return replaceTempFilename(data, filename) } return }