...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package raft
16
17 import (
18 "fmt"
19 "io"
20 "io/ioutil"
21 "os"
22 "os/exec"
23 "strings"
24 )
25
26 func diffu(a, b string) string {
27 if a == b {
28 return ""
29 }
30 aname, bname := mustTemp("base", a), mustTemp("other", b)
31 defer os.Remove(aname)
32 defer os.Remove(bname)
33 cmd := exec.Command("diff", "-u", aname, bname)
34 buf, err := cmd.CombinedOutput()
35 if err != nil {
36 if _, ok := err.(*exec.ExitError); ok {
37
38 return string(buf)
39 }
40 panic(err)
41 }
42 return string(buf)
43 }
44
45 func mustTemp(pre, body string) string {
46 f, err := ioutil.TempFile("", pre)
47 if err != nil {
48 panic(err)
49 }
50 _, err = io.Copy(f, strings.NewReader(body))
51 if err != nil {
52 panic(err)
53 }
54 f.Close()
55 return f.Name()
56 }
57
58 func ltoa(l *raftLog) string {
59 s := fmt.Sprintf("committed: %d\n", l.committed)
60 s += fmt.Sprintf("applied: %d\n", l.applied)
61 for i, e := range l.allEntries() {
62 s += fmt.Sprintf("#%d: %+v\n", i, e)
63 }
64 return s
65 }
66
View as plain text