Commit e40c7081 authored by Egon Elbre's avatar Egon Elbre Committed by Brad Fitzpatrick

internal/diff: flush to disk before diffing

Flush strings to disk before diffing files.

Change-Id: I91c47bfe352ee833a164fa7de00341e96498bc96
Reviewed-on: https://go-review.googlesource.com/39235Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 1dffca75
......@@ -12,6 +12,22 @@ import (
"runtime"
)
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
}
// Diff returns a human-readable description of the differences between s1 and s2.
// If the "diff" command is available, it returns the output of unified diff on s1 and s2.
// If the result is non-empty, the strings differ or the diff command failed.
......@@ -22,29 +38,24 @@ func Diff(s1, s2 string) string {
if _, err := exec.LookPath("diff"); err != nil {
return fmt.Sprintf("diff command unavailable\nold: %q\nnew: %q", s1, s2)
}
f1, err := ioutil.TempFile("", "benchfmt_test")
f1, err := writeTempFile("", "benchfmt_test", []byte(s1))
if err != nil {
return err.Error()
}
defer os.Remove(f1.Name())
defer f1.Close()
defer os.Remove(f1)
f2, err := ioutil.TempFile("", "benchfmt_test")
f2, err := writeTempFile("", "benchfmt_test", []byte(s2))
if err != nil {
return err.Error()
}
defer os.Remove(f2.Name())
defer f2.Close()
f1.Write([]byte(s1))
f2.Write([]byte(s2))
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.
......@@ -54,5 +65,4 @@ func Diff(s1, s2 string) string {
data = append(data, []byte(err.Error())...)
}
return string(data)
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment