Diff returns the unified diff (from running "diff -u") or returns an error string.
(a, b []byte)
| 25 | // Diff returns the unified diff (from running "diff -u") or |
| 26 | // returns an error string. |
| 27 | func Diff(a, b []byte) string { |
| 28 | if bytes.Equal(a, b) { |
| 29 | return "" |
| 30 | } |
| 31 | ta, err := os.CreateTemp("", "") |
| 32 | if err != nil { |
| 33 | return err.Error() |
| 34 | } |
| 35 | tb, err := os.CreateTemp("", "") |
| 36 | if err != nil { |
| 37 | return err.Error() |
| 38 | } |
| 39 | defer os.Remove(ta.Name()) |
| 40 | defer os.Remove(tb.Name()) |
| 41 | // Lqzy... |
| 42 | ta.Write(a) |
| 43 | tb.Write(b) |
| 44 | ta.Close() |
| 45 | tb.Close() |
| 46 | out, err := exec.Command("diff", "-u", ta.Name(), tb.Name()).CombinedOutput() |
| 47 | if err != nil && len(out) == 0 { |
| 48 | return err.Error() |
| 49 | } |
| 50 | return string(out) |
| 51 | } |