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/fix | |
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/fix')
-rw-r--r-- | src/cmd/fix/main.go | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/src/cmd/fix/main.go b/src/cmd/fix/main.go index 3b4130b3bf..f06abae171 100644 --- a/src/cmd/fix/main.go +++ b/src/cmd/fix/main.go @@ -17,6 +17,7 @@ import ( "os" "os/exec" "path/filepath" + "runtime" "sort" "strings" ) @@ -237,25 +238,41 @@ func isGoFile(f os.FileInfo) bool { return !f.IsDir() && !strings.HasPrefix(name, ".") && strings.HasSuffix(name, ".go") } +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) (data []byte, err error) { - f1, err := ioutil.TempFile("", "go-fix") + f1, err := writeTempFile("", "go-fix", b1) if err != nil { - return nil, err + return } - defer os.Remove(f1.Name()) - defer f1.Close() + defer os.Remove(f1) - f2, err := ioutil.TempFile("", "go-fix") + f2, err := writeTempFile("", "go-fix", b2) if err != nil { - return nil, err + return } - defer os.Remove(f2.Name()) - defer f2.Close() + defer os.Remove(f2) - f1.Write(b1) - f2.Write(b2) + cmd := "diff" + if runtime.GOOS == "plan9" { + cmd = "/bin/ape/diff" + } - data, err = exec.Command("diff", "-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. |