diff options
author | Egon Elbre <egonelbre@gmail.com> | 2017-02-10 11:30:22 +0200 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2017-03-30 18:19:57 +0000 |
commit | e86168430f0aab8f971763e4b00c2aae7bec55f0 (patch) | |
tree | 5aa7edebbb1b88c56ffee2a1519873cf396a6b68 /src/cmd/gofmt | |
parent | c5ddc558baa9884050ddf26dd93c91e9297509b8 (diff) | |
download | go-e86168430f0aab8f971763e4b00c2aae7bec55f0.tar.gz go-e86168430f0aab8f971763e4b00c2aae7bec55f0.zip |
cmd/fix,cmd/gofmt: flush to disk before diffing
Flush file content to disk before diffing files,
may cause unpredictable results on Windows.
Convert from \r\n to \n when comparing diff result.
Change-Id: Ibcd6154a2382dba1338ee5674333611aea16bb65
Reviewed-on: https://go-review.googlesource.com/36750
Reviewed-by: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
Diffstat (limited to 'src/cmd/gofmt')
-rw-r--r-- | src/cmd/gofmt/gofmt.go | 35 | ||||
-rw-r--r-- | src/cmd/gofmt/gofmt_test.go | 5 |
2 files changed, 27 insertions, 13 deletions
diff --git a/src/cmd/gofmt/gofmt.go b/src/cmd/gofmt/gofmt.go index ff38df7ee4..d5b7be327a 100644 --- a/src/cmd/gofmt/gofmt.go +++ b/src/cmd/gofmt/gofmt.go @@ -225,36 +225,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 } diff --git a/src/cmd/gofmt/gofmt_test.go b/src/cmd/gofmt/gofmt_test.go index 76fb250f4d..16b653b646 100644 --- a/src/cmd/gofmt/gofmt_test.go +++ b/src/cmd/gofmt/gofmt_test.go @@ -198,6 +198,11 @@ func TestDiff(t *testing.T) { if err != nil { t.Fatal(err) } + + if runtime.GOOS == "windows" { + b = bytes.Replace(b, []byte{'\r', '\n'}, []byte{'\n'}, -1) + } + bs := bytes.SplitN(b, []byte{'\n'}, 3) line0, line1 := bs[0], bs[1] |